📄 万年历程序2.txt
字号:
#include"reg52.h"
#define uchar unsigned char /*宏定义*/
#define uint unsigned int
#define pcf8563 0xa2
void delayMS(unsigned char i);
bit ISendStr(uchar sla,uchar suba,uchar *s,uchar no);
bit IRcvStr(uchar sla,uchar suba,uchar *s,uchar no);
unsigned char ZLG7290_SendData(unsigned char SubAdd,unsigned char Data);
unsigned char ZLG7290_SendCmd(unsigned char Data1,unsigned char Data2);
void ZLG7290_SendBuf(unsigned char * disp_buf,unsigned char num);
unsigned char ZLG7290_GetKey();
bit fig;
bit zhd;
void delay(unsigned char i)
{
unsigned char j,k,c;
for(c=0;c<i;c++)
for(k=0;k<i;k++)
for(j=0;j<255;j++);
}
uchar sss(uchar v)
{ uchar zg;
switch(v)
{
case(4) :{zg=0;return zg;}
case(3) :{zg=1;return zg;}
case(2) :{zg=2;return zg;}
case(1) :{zg=3;return zg;}
case(12) :{zg=4;return zg;}
case(11) :{zg=5;return zg;}
case(10) :{zg=6;return zg;}
case(9) :{zg=7;return zg;}
case(20) :{zg=8;return zg;}
case(19) :{zg=9;return zg;}
}
}
void main()
{
uchar tt;
uchar n=1;
uchar bb[9]={0x00,0x00,0x54,0x59,0x16,0x10,0x06,0x06,0x06};//秒,分,时,日,星,月
uchar cc[6];
uchar aa[8];
uchar ddd[8];
uchar yyy[8]={0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f};
uchar dshi[2]={0x82,10};// ISendStr(pcf8563,0x0e,dshi,2); delayMS(10);
uchar quzhi[3];
uchar xianshi[3]={0x01,0x01,0x00};
uchar kozhi[2]={0x00,0x11};//脉冲有效
uchar kozhi1[2]={0x00,0x00};
uchar m,mm=0,d;
ISendStr(pcf8563,0x00,bb,9);
delayMS(10);
EA=1;
IT0=1;
EX0=1;
EX1=1;
IT1=1;
while(1)
{
if(zhd)
{ n=0;
zhd=0;
ISendStr(pcf8563,0x00,kozhi1,2);
delayMS(10);
ZLG7290_SendData(0x0d,2);
ZLG7290_SendBuf(xianshi,3);
delay(23);
}
if(fig)////键盘的处理程序
{
fig=0;
tt=ZLG7290_GetKey();
delay(14);//可以延时来解决困难是因为弹片机为12M而7290为4M要快3倍,所以很可能将
//在tt=27时将27读两遍于是出现了修改值为y的错误,另一种解决方案是||27
//见while(key==0||key==27)*/
if(tt==26)
{
n=1;
goto aaa;
}
if(tt==25)
{
uchar key=0,i=0,j=0;
n=0;
for(j=0;j<4;j++)
{
while(key==0||key==25) //屏蔽key为27的副作用 同时扫描不按键时key为0将在此循环
{
key=ZLG7290_GetKey();
delay(14);
}
if(i<3)
{
ZLG7290_SendData(0x0d,7);
ZLG7290_SendBuf(yyy,8);//输入时闪烁提示
quzhi[i++]=sss(key);
ZLG7290_SendData(0x0d,2);
ZLG7290_SendBuf(quzhi,3);
key=0;
}
if(i==2)
{
// dshi[2]={0x82,8};//quzhi[1]*10+quzhi[0];
dshi[1]=((quzhi[0]*100)+(quzhi[1]*10)+quzhi[2]);
ISendStr(pcf8563,0x0e,dshi,2);
delayMS(10);
ISendStr(pcf8563,0x00,kozhi,2);
delayMS(10);
}
if(key==26)
{
n=1;
goto aaa;
}
}
}
if(tt==27)
{
uchar key=0,k=0,i=0,j;
n=0;
for(j=0;j<13;j++) //明白7290键值被读走后马上变为0
{
while(key==0||key==27) //屏蔽key为27的副作用 同时扫描不按键时key为0将在此循环
{
key=ZLG7290_GetKey();
delay(14);
}
if(key==26) //确认重新开始
{
m=aa[0]<<4;
bb[4]=(m+aa[1])&0x3f;
m=aa[3]<<4;
bb[3]=(m+aa[4])&0x7f;
m=aa[6]<<4;
bb[2]=(m+aa[7])&0x7f;
m=ddd[0]<<4;
bb[7]=(m+ddd[1])&0x1f;
m=ddd[3]<<4;
bb[5]=(m+ddd[4])&0x3f;
m=ddd[6]<<4;
bb[6]=(m+ddd[7])&0x07;
ISendStr(pcf8563,0x00,bb,8);
delayMS(10);
n=1;
goto aaa;
}
if(i<=7)
{
ZLG7290_SendData(0x0d,7);
ZLG7290_SendBuf(yyy,8);//输入时闪烁提示
if(i==2||i==5)
i++;
aa[i++]=sss(key);
ZLG7290_SendData(0x0d,7);
ZLG7290_SendBuf(aa,8);
}
else{
ZLG7290_SendData(0x0d,7);
ZLG7290_SendBuf(yyy,8);
if(k==2||k==5)
k++;
ddd[k++]=sss(key);
ZLG7290_SendData(0x0d,7);
ZLG7290_SendBuf(ddd,8);}
key=0;
//ZLG7290_SendData(0x0d,7);
//ZLG7290_SendBuf(aa,8);
}
}
}
aaa:
if(n)
{
IRcvStr(pcf8563,0x02,cc,6);
delayMS(10);
d=cc[2]&0x30;
aa[0]=(d>>4);
aa[1]=cc[2]&0x0f;
d=cc[1]&0x70;
aa[3]=(d>>4);
aa[4]=cc[1]&0x0f;
d=cc[0]&0xf0;
aa[6]=(d>>4);
aa[7]=cc[0]&0x0f;
aa[2]=0x1f;
aa[5]=0x1f;
ZLG7290_SendData(0x0d,7);
ZLG7290_SendBuf(aa,8);
ZLG7290_SendCmd(0x01,0x96);
ZLG7290_SendCmd(0x01,0xae);
delay(23);
delay(23);
d=cc[5]&0x10;
ddd[0]=(d>>4);
ddd[1]=cc[5]&0x0f;
d=cc[3]&0x30;
ddd[3]=(d>>4);
ddd[4]=cc[3]&0x0f;
//d=cc[4]&0xf0;
ddd[6]=0;
ddd[7]=cc[4]&0x07;
ddd[2]=0x1f;
ddd[5]=0x1f;
ZLG7290_SendData(0x0d,7);
ZLG7290_SendBuf(ddd,8);
ZLG7290_SendCmd(0x01,0x96);
ZLG7290_SendCmd(0x01,0xae);
delay(23);
delay(23);
}
}
}
void st( ) interrupt 0 using 1
{
fig=1;
}
void sst( ) interrupt 2 using 2
{
zhd=1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -