📄 zlg7289.c
字号:
//zlg7289
//本程序在10M晶体下运行正常,如果用更高速率的晶体,需加更长时间延时
#include <AT89X52.H>
#include <ABSACC.H>
#include <INTRINS.H>
#define uchar unsigned char
#define unint unsigned int
uchar code key[]={ 0x00,0x01,0x02,0x03,0x0c,0x08,0x04,0x00,
0x08,0x09,0x0a,0x0b,0x0d,0x09,0x05,0x01,
0x10,0x11,0x12,0x13,0x0e,0x0a,0x06,0x02,
0x18,0x19,0x1a,0x1b,0x0f,0x0b,0x07,0x03};
//*************************************************
sbit ZLG_CS =P2^6; sbit ZLG_CLK=P2^3;
sbit ZLG_DIO=P2^4; sbit ZLG_KEY=P3^2;
//*************************************************
void DELAYL (uchar t){ uchar s;while (t--) { //长时间延时子程序
for (s=0xff;s>0;s--) {_nop_();_nop_();_nop_();} } }
//*************************************************
void DELAYS (uchar t){ while (t--) {_nop_();_nop_(); } }//短时间延时子程序
//*************************************************
//*************************************************
void ZLG_OUT(uchar a){uchar i; ZLG_CS=0;ZLG_CLK=0; //向ZLG7289发一条指令
for(i=0;i<8;i++){ZLG_DIO=(bit)(a&0x80);ZLG_CLK=1;
_nop_();_nop_();a<<=1;ZLG_CLK=0;_nop_();_nop_(); } ZLG_CS=1;}
//*************************************************
void ZLG_D_OUT(uchar a,b){uchar i; ZLG_CS=0;ZLG_CLK=0;
for(i=0;i<8;i++){ZLG_DIO=(bit)(a&0x80);ZLG_CLK=1;
_nop_();_nop_();a<<=1;ZLG_CLK=0;_nop_();_nop_(); }
for(i=0;i<8;i++){ZLG_DIO=(bit)(b&0x80);ZLG_CLK=1;
_nop_();_nop_();b<<=1;ZLG_CLK=0;_nop_();_nop_(); } ZLG_CS=1;}
//*************************************************
uchar ZLG_KEYB(void){uchar i;uchar a=0x15; ZLG_CS=0;ZLG_CLK=0; //从ZLG7289读取键盘数据的指令
for(i=0;i<8;i++){ZLG_DIO=(bit)(a&0x80);ZLG_CLK=1;
_nop_();_nop_();a<<=1;ZLG_CLK=0;_nop_();_nop_(); } ZLG_DIO=1;
for(i=0;i<8;i++){ ZLG_CLK=1;_nop_();_nop_();_nop_(); a<<=1;
if (ZLG_DIO) {a|=0x01;} ZLG_CLK=0;_nop_();_nop_();_nop_(); }
ZLG_CS=1;return(a);}
//*************************************************
uchar KEY_V(uchar a){return key[a];}
//*************************************************
//********************************************* 串行口初始化、发送接收子程序
void Comstart(void){ TMOD=0X20;TL1=0xfd;TH1=0xfd; //256-11059200/384/9600=0xfd
SCON=0x40;PCON=0x00;TR1=1; }//方式1,波特率不加倍,计数器开
//*************************************************
void Txd2(uchar z) //串口发送子程序
{ SBUF=z; while(TI==0); TI=0; }//为0等待
//*************************************************向微机发送数据子程序
void Pc_com(unint a){ unint m,n; uchar w;
m=a/10000;w=(uchar)(m+0x0030);Txd2(w); //万位
m=a%10000;n=m/1000;w=(uchar)(n+0x0030);Txd2(w); //千位
n=m%1000;m=n/100;w=(uchar)(m+0x0030);Txd2(w); //百位
m=n%100;n=m/10;w=(uchar)(n+0x0030);Txd2(w); //十位
n=m%10;w=(uchar)(n+0x0030);Txd2(w);Txd2(0x0d);Txd2(0x0a);}//个位 回车
//*************************************************
//*************************************************
main(){ uchar a,b;Comstart();IE=0x00;
ZLG_OUT(0xa4);ZLG_OUT(0xbf);ZLG_D_OUT(0x88,0x00);//复位、闪烁、测试
DELAYL(0x01);DELAYL(0x01);ZLG_D_OUT(0x88,0xff); //不闪烁,测试结束
b=0x80;for (a=0x80;a<0x88;a++){ZLG_D_OUT(a,b);b++;} //DELAYL(0xff);
//带小数点不闪烁显示01234567,方式0译码并延时一段时间
ZLG_D_OUT(0x80,0x08);ZLG_D_OUT(0x81,0x09);
ZLG_D_OUT(0x82,0x0a);ZLG_D_OUT(0x83,0x0a);
ZLG_D_OUT(0x84,0x0c);ZLG_D_OUT(0x85,0x0b);
ZLG_D_OUT(0x86,0x0d);ZLG_D_OUT(0x87,0x0e);//DELAYL(0xff);
//不带小数点不闪烁显示89-HELP ,方式0译码并延时一段时间
b=0x00;for (a=0xc8;a<0xd0;a++){ZLG_D_OUT(a,b);b++;}
DELAYL(0x01); //闪烁显示01234567,方式1译码
for (a=0;a<0x08;a++){ZLG_OUT(0xa3);DELAYL(0x01);}
for (a=0;a<0x08;a++){ZLG_OUT(0xa2);DELAYL(0x01);}
for (a=0;a<0x08;a++){ZLG_OUT(0xa1);DELAYL(0x01);}
b=0x08;for (a=0xc8;a<0xd0;a++){ZLG_D_OUT(a,b);b++;}
for (a=0;a<0x08;a++){ZLG_OUT(0xa0);DELAYL(0x01);}
//循环左右移位显示,不循环左右移位显示
b=0x11;for (a=0x90;a<0x98;a++){ZLG_D_OUT(a,b);b++;}
DELAYL(0x01); ZLG_D_OUT(0x88,0x7f); //显示乱码,不译码并延时一段时间
while(1){ if(!ZLG_KEY){ a=ZLG_KEYB();Pc_com(a);
if(a!=0xff){ZLG_OUT(0xa2);a=KEY_V(a);ZLG_D_OUT(0xcf,a);
while(!ZLG_KEY);DELAYS(0x01);} } }
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -