📄 main.c
字号:
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit zlg7289_cs=P1^3;
sbit zlg7289_clk=P1^2;
sbit zlg7289_dio=P1^1;
sbit zlg7289_int=P1^0;
void delayus(uchar x) //t=6*x+14 us (x>0)
{
while(x--)
;
}
void delayms(uint x)
{
uchar i;
while(x--)
for(i=0;i<125;i++)
;
}
void delay() //延时8us
{
_nop_();
//_nop_();
//_nop_();
//_nop_();
}
//写纯指令一个字节
void write_cmd(uchar dat)
{
uchar i;
bit flag;
flag=EA;
EA=0; //关掉中断
zlg7289_cs=0;
zlg7289_clk=0;
delayus(10);
for(i=0;i<8;i++)
{
zlg7289_dio=(bit)(dat&0x80);
zlg7289_clk=1;
delay(); //延时约8us
zlg7289_clk=0;
delay();
dat<<=1;
}
zlg7289_cs=1;
EA=flag;
}
//写带数据的指令
void write_cmd_dat(uchar cmd,uchar dat)
{
uchar i;
bit flag;
flag=EA;
EA=0;
zlg7289_cs=0;
zlg7289_clk=0;
delayus(10);
for(i=0;i<8;i++)
{
zlg7289_dio=(bit)(cmd&0x80);
zlg7289_clk=1;
delay(); //延时约8us
zlg7289_clk=0;
delay();
cmd<<=1;
}
delay();
for(i=0;i<8;i++)
{
zlg7289_dio=(bit)(dat&0x80);
zlg7289_clk=1;
delay(); //延时约8us
zlg7289_clk=0;
delay();
dat<<=1;
}
zlg7289_cs=1;
EA=flag;
}
//读取键盘
uchar read_key()
{
uchar i,cmd=0x15,key=0;
bit flag;
flag=EA;
EA=0;
zlg7289_cs=0;
zlg7289_clk=0;
delayus(10);
for(i=0;i<8;i++)
{
zlg7289_dio=(bit)(cmd&0x80);
zlg7289_clk=1;
delay(); //延时约8us
zlg7289_clk=0;
delay();
cmd<<=1;
}
delay();
for(i=0;i<8;i++)
{
zlg7289_clk=1;
delay();
if(zlg7289_dio) key|=0x01;
key<<=1;
zlg7289_clk=0;
delay();
}
key=key>>1;
zlg7289_cs=1;
return key;
}
//对数码管的数据下载 mod:是下载译码方式0,1,2 x:数码管的编号
//dp:小数点的点亮 dat:显示数据
void zlg7289_download(uchar mod,uchar x,bit dp,uchar dat)
{
uchar cmdh=0,cmdl=0;
uchar code mode[3]={0x80,0xc8,0x90};
cmdh=mode[mod];
x=x&0x07;
cmdh|=x;
cmdl=dat&0x0f;
if(dp) cmdl|=0x80;
write_cmd_dat(cmdh,cmdl);
}
void init_zlg7289()
{
uchar i;
zlg7289_cs=1; //io口初始化
zlg7289_clk=0;
zlg7289_dio=1;
zlg7289_int=1;
for(i=0;i<8;i++)
{
zlg7289_download(1,i,1,7);
}
}
void main()
{
uchar i,j,date=0;
delayus(100);
init_zlg7289();
for(j=0;j<20;j++)
{
for(i=0;i<8;i++)
zlg7289_download(1,i,1,date);
if((++date)==16)
date=0;
delayms(1000);
}
//write_cmd(0xa4); //清除显示
//write_cmd(0xbf);
delayms(3000);
for(i=0;i<8;i++)
zlg7289_download(1,i,1,9);
while(1)
{
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -