?? test7279.c
字號(hào):
#include "c8051f020.h"
#include <intrins.h>
sbit HD7279_DAT=P1^7;
sbit HD7279_CLK=P1^6;
#define NOSELECT7279 P5 |= 0x80 //SPICS4(P57)=1
#define SELECT7279 P5 &= ~(0x80) //SPICS4(P57)=0;
#define Set7279DAT HD7279_DAT=1
#define Clr7279DAT HD7279_DAT=0
#define Set7279CLK HD7279_CLK=1
#define Clr7279CLK HD7279_CLK=0
// HD7279測(cè)試/演示程序
// I/O口初始化
void Delay1ms(unsigned char T);
void Delay1s(unsigned char T);
void Delay1us(unsigned char T);
void Send7279Byte(unsigned char ch)
{
char i;
SELECT7279; //置CS低電平
Delay1us(50); //延時(shí)50μ
for (i=0;i<8;i++)
{
if (ch&0x80) //輸出7位到HD7279A的DATA端
{
Set7279DAT;
}
else
{
Clr7279DAT;
}
Set7279CLK; //置CLK高電平
ch=ch<<1; //待發(fā)數(shù)據(jù)左移
Delay1us(8); //延時(shí)8μ
Clr7279CLK; //置CLK低電平
Delay1us(8); //延時(shí)50μ
}
Clr7279DAT; //發(fā)送完畢,DATA端置低,返回
}
unsigned char Receive7279Byte(void)
{
unsigned char i,ch;
ch=0;
Set7279DAT; //DATA端置為高電平,輸入狀態(tài)
Delay1us(50); //延時(shí)50μ
for (i=0;i<8;i++)
{
Set7279CLK; //置CLK高電平
Delay1us(8); //延時(shí)8μ
ch=ch<<1; //接收數(shù)據(jù)左移1位
if (HD7279_DAT)
ch+=1; //接收1位數(shù)據(jù)
Clr7279CLK; //置CLK低電平
Delay1us(8); //延時(shí)8μ
}
Clr7279DAT; //接收完畢,DATA端重新置成低電平(輸出狀態(tài))
return ch;
}
void FlashLED(unsigned char No)
{
char i;
Send7279Byte(0x88); //發(fā)閃爍指令
i=0x1;
while (No)
{
i=i<<1;
No--;
}
Send7279Byte(~i); //1閃爍
NOSELECT7279; //置CS高電平
}
/*
void BlankLED(unsigned char ch)
{
Send7279Byte(0x98); //發(fā)消隱指令
Send7279Byte(ch); //1-顯示 0-消隱
NOSELECT7279; //置CS高電平
}
*/
void MoveLeft(void)
{
Send7279Byte(0xA1); //發(fā)左移指令
NOSELECT7279; //置CS高電平
}
void MoveRight(void)
{
Send7279Byte(0xA0); //發(fā)右移指令
NOSELECT7279; //置CS高電平
}
unsigned char code BdSeg[]={
0x7e,0x30,0x6d,0x79, // 0 1 2 3
0x33,0x5b,0x5f,0x70, // 4 5 6 7
0x7f,0x7b,0x77,0x1f, // 8 9 a b
0x4e,0x3d,0x4f,0x47, // c d e f
0x00,0x01};
/*
; b6
; ----
; b1| b0 |b5
; ---- small
; b2| b3 |b4
; ---- .b7
*/
void DispLED(char *DispBuf,char ShowDot)//ShowDot 顯示小數(shù)點(diǎn)位
{
char i,ch;
ShowDot--;
for (i=0;i<6;i++)
{
ch=DispBuf[i];
if ((ch>='a') && (ch<='f'))
{
ch-='a';ch+=0xa;
}
if ((ch>='A') && (ch<='F'))
{
ch-='A';ch+=0xa;
}
Send7279Byte(0x90+5-i); //不譯碼
if (ch==' ')
Send7279Byte(0x00);
else
if (ch=='-')
Send7279Byte(0x01);
else
{
if (ShowDot==i)
Send7279Byte(0x80|BdSeg[ch&0x0f]);
else
Send7279Byte(BdSeg[ch&0x0f]);
}
}
NOSELECT7279; //置CS高電平
}
char GetKeyValue(void)
{
char KeyValue;
if (CPT1CN&0x40) return -1; //無(wú)鍵按下
Send7279Byte(0x15); //發(fā)讀鍵盤指令
KeyValue=Receive7279Byte();
NOSELECT7279; //置CS高電平
return KeyValue;
}
void WaitKeyOff(void)
{
while (!(CPT1CN&0x40));
}
void Test7279(bit LoopFlag)
{
char i,KeyValue;
Delay1ms(25); //等待25ms復(fù)位時(shí)間
Send7279Byte(0xA4); //發(fā)復(fù)位指令
NOSELECT7279; //置CS高電平
if (LoopFlag==0) return;
DispLED("123456",0); //顯示123456
for (i=0;i<8;i++)
{
Delay1s(1);
MoveLeft();
}
DispLED("123456",0); //顯示123456
DispLED("7890AB",2); //顯示123456
DispLED("CDEF -",3); //顯示123456
for (i=0;i<6;i++)
{
Delay1s(1);
MoveRight();
}
DispLED("F 1",1); //顯示123456
FlashLED(0); //第一位閃爍
Delay1s(1);
FlashLED(1); //第二位閃爍
Delay1s(1);
FlashLED(8); //關(guān)閃爍
//BlankLED(0x23); //注意:執(zhí)行消隱后,鍵盤輸入中斷口不能恢復(fù).
for (;;)
{
KeyValue=GetKeyValue();
if(KeyValue!=-1)
{
Send7279Byte(0xC8); //發(fā)送鍵碼值,按方式1譯碼下載顯示
Send7279Byte(KeyValue%16);
NOSELECT7279; //置CS高電平
WaitKeyOff();
}
}
}
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -