📄 zlg7289ok.c
字号:
#include<reg52.h>
sbit dio=P0^2;
sbit clk=P0^1;
sbit CS_7289=P0^0;
unsigned char DisBuffer[8];
void delay(unsigned int i)
{
while(i--);
}
//发送8位数据
void SendByte(unsigned char dat)
{
unsigned char i;
//CS_7289=0;
for(i=0;i<8;i++)
{
if(dat&0x80)
{
dio=1;
}else
{
dio=0;
}
clk=1;
delay(3);
clk=0;
dat<<=1;
}
dio=0;
//CS_7289=1;
}
//发送纯命令
void SendCom(unsigned char com)
{
CS_7289=0;
delay(1);
SendByte(com);
CS_7289=0;
}
//发送带数据的命令
void SendComData(unsigned char com,unsigned char dat)
{
CS_7289=0;
delay(1);
SendByte(com);
SendByte(dat);
CS_7289=1;
}
unsigned char ReadKey(void)
{
unsigned char i;
unsigned char key;
CS_7289=0;
SendByte(0x15);
for(i=0;i<8;i++)
{
key<<=1;
clk=0;
delay(1);
clk=1;
delay(1);
key |= dio;
}
return key;
}
//led数码管位置,dat显示数据
void ZLG7289Dis(unsigned char led,unsigned char dat)
{
SendComData(0x87-led,dat);
}
//消隐
void ZLG7289DisOFF(unsigned char led)
{
//SendComData(0x98,0x80>>led); //方式0
SendComData(0xcf,0x80>>led); //方式1
}
//点亮数码管的小数点
void ZLG7289DP(unsigned char led)
{
SendComData(0xe0,0x3f-led*8);
}
//小数点关闭
void ZLG7289DP_OFF(unsigned char led)
{
SendComData(0xc0,0x3f-led*8);
}
//数码管闪烁
void ZLG7289Flash(unsigned char led)
{
SendComData(0x88,0x80>>led);
}
void ZLG7289Reset(void)
{
SendCom(0xa4);
}
void ZLG7289MOVL(void)
{
SendCom(0xa1);
}
void ZLGDIS(void)
{
unsigned char i;
ZLG7289Reset();
for(i=0;i<8;i++)
{
if(DisBuffer[i]>=0 &&DisBuffer[i]<=9)
{
ZLG7289Dis(i,DisBuffer[i]);
}else if(DisBuffer[i]>=10 && DisBuffer[i]<=19)
{
ZLG7289Dis(i,DisBuffer[i]-10);
ZLG7289DP(i); //小数
} else ZLG7289DisOFF(i);
}
}
main()
{
unsigned int i;
unsigned char keyv;
delay(1000);
ZLG7289Reset();
DisBuffer[0]=22;
DisBuffer[1]=22;
DisBuffer[2]=22;
DisBuffer[3]=22;
DisBuffer[4]=22;
DisBuffer[5]=22;
DisBuffer[6]=50;
DisBuffer[7]=40;
while(1)
{
for(i=0;i<65535;i++);
keyv=ReadKey();
DisBuffer[1]=(keyv/100)%10;
DisBuffer[2]=(keyv/10)%10;
DisBuffer[3]=keyv%10;
ZLGDIS();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -