📄 5.c
字号:
#include<reg52.h>
#define uchar unsigned char
#define lcd P2
#define key P1
#define Busy 0x80
sbit key0=P1^0;
sbit key1=P1^1;
sbit key2=P1^2;
sbit key3=P1^3;
sbit rs=P3^5;
sbit w=P3^6;
sbit e=P3^7;
sbit li=P2^0;
char code days[]={35,30,30,30,30,30,30,30,30,30,30,30,30};
char data str1[]=" 2008-09-01 00";
char data str2[]=" 12:00:00";
uchar y=8,m=9,d=1,s=12,f,o,shi,ge,ss=12,sf=1,so=0,temp,temp1,temp2;
int con1s=0x00,con=0x00,nn=0,MM=0;
void delay(int t)
{
int x,y;
for(;x<t;x++)
for(;y<120;y++);
}
uchar wait(void)
{
lcd = 0xFF;
rs = 0;
w = 1;
e= 0;
e= 1;
e = 1;
while (lcd & Busy);
e = 0;
return(lcd);
}
void writecom(uchar com,uchar m)
{
if (m) wait();
w=0;
e=0;
rs=0;
lcd=com;
delay(5);
e=1;
delay(5);
e=0;
}
void writedata(uchar c)
{
wait();
w=0;
e=0;
rs=1;
lcd=c;
delay(5);
e=1;
delay(5);
e=0;
}
void initlcd()
{
uchar num;
delay(20);
writecom(0x38,0);
delay(10);
writecom(0x38,1);
writecom(0x08,1);
writecom(0x01,1);
writecom(0x06,1);
writecom(0x0c,1);
writecom(0x80);
for(num=0;num<15;num++)
{
writedata(str1[num]);
delay(20);
};
writecom(0x80+0x40);
for(num=0;num<12;num++)
{
writedata(str2[num]);
delay(20);
};
}
void up(uchar ad,uchar dat)
{
shi=dat/10;
ge=dat%10;
writecom(0x80+0x40+ad);
writedata(0x30+shi);
writedata(0x30+ge);
}
void upit(uchar ad,uchar dat)
{
shi=dat/10;
ge=dat%10;
writecom(0x80+ad);
writedata(0x30+shi);
writedata(0x30+ge);
}
void check()
{
if(o>=60){o=0;f++;};
if(f>=60){f=0;s++;};
if(s>=24){s=0;d++;};
if(d>=days[m]){d=0;m++;};
if(m>=12){m=0;y++;};
up(0x04,s);
up(0x07,f);
up(0x0a,o);
upit(0x04,y);
upit(0x07,m);
upit(0x0a,d);
switch(con){
case 0x01:writecom(0x80+0x05);break;
case 0x02:writecom(0x80+0x08);break;
case 0x03:writecom(0x80+0x0b);break;
case 0x04:writecom(0x80+0x40+0x05);break;
case 0x05:writecom(0x80+0x40+0x08);break;
case 0x06:writecom(0x80+0x40+0x0b);break;};
if(!MM){if(ss==s){if(sf==f){
li=1;}}}
else{li=0;}}
void clear()
{
li=0;
EA=1;
TMOD=0x11;TH0=0x0c;TL0=0xb0;ET0=1;TR0=1;
}
void keyscan()
{
key=0x0f;
if(key0==0){
delay(10);
if(key0==0){
while(key0!=1);
con++;
if(con>6){
con=0x00;};
switch(con)
{
case 0x00:if(!MM){TR0=1;};writecom(0x0c);break;
case 0x01:TR0=0;writecom(0x80+0x05);writecom(0x0f);break;
case 0x02:writecom(0x80+0x08);break;
case 0x03:writecom(0x80+0x0b);break;
case 0x04:writecom(0x80+0x40+0x05);break;
case 0x05:writecom(0x80+0x40+0x08);break;
case 0x06:writecom(0x80+0x40+0x0b);break;
};
}}
if(con!=0x00)
{
if(key1==0){
delay(10);
if(key1==0){
while(!key1);
switch(con){
case 0x01:y++;break;
case 0x02:m++;break;
case 0x03:d++;break;
case 0x04:s++;break;
case 0x05:f++;break;
case 0x06:o++;break;};
check();};
};}
if(con!=0x00)
{
if(key2==0){
delay(10);
if(key2==0){
while(!key2);
switch(con){
case 0x01:if(y)y--;break;
case 0x02:if(m)m--;break;
case 0x03:if(d)d--;break;
case 0x04:if(s)s--;break;
case 0x05:if(f)f--;break;
case 0x06:if(o)o--;break;
}
check();};};}
if(key3==0){
delay(10);
if(key3==0){
while(!key3);
TR0=~TR0;
MM=~MM;
temp=s;
s=ss;
ss=temp;
temp1=f;
f=sf;
sf=temp1;
temp2=o;
o=so;
so=temp2;
check();
}}}
void main()
{
clear();
initlcd();
while(1)
{keyscan();
};
}
void time_intt0(void) interrupt 1
{
ET0=0;TR0=0;TH0=0x0c;TL0=0xb0;TR0=1;
con1s++;
if(con1s==20){o++;
con1s=0x00;
check();};
ET0=1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -