代码
#include"reg51.h"
#define lcd P0
typedef unsigned int u16;
typedef unsigned char u8;
sbit lcd_EN=P2^7;
sbit lcd_RS=P2^6;
sbit lcd_wr=P2^5;
sbit key1=P3^1;
sbit key2=P3^0;
u8 date[]=" 2020-03-08";
u8 time[]=" 23:59:53 ";
u16 num;
u8 flag=0;
u8 sign=0;
u8 count=0;
u8 ge;
u8 shi;
u8 hour=0;
u8 fen=0;
u8 miao=0;
u16 temp=0;
void delay(u16 x)
{
u16 j;
while(x--)
for(j=115;j>0;j--);
}
void tim0_init()
{
EA=1;
ET0=1;
TMOD=0X01;
TH0=(65535-50000)/256;
TL0=(65535-50000)%256;
TR0=1;
}
void lcd_write_com(u8 com)
{
lcd_RS=0;
lcd=com;
delay(4);
lcd_EN=1;
delay(4);
lcd_EN=0;
}
void lcd_write_date(u8 date)
{
lcd_RS=1;
lcd=date;
delay(4);
lcd_EN=1;
delay(4);
lcd_EN=0;
}
void lcd_init()
{
lcd_wr=0;
lcd_EN=0;
lcd_write_com(0x38);
lcd_write_com(0x01);
lcd_write_com(0x0c);
lcd_write_com(0x06);
lcd_write_com(0x80);
for(num=0;num<12;num++)
{
lcd_write_date(date[num]);
delay(4);
}
lcd_write_com(0x80+0x40);
for(num=0;num<12;num++)
{
lcd_write_date(time[num]);
delay(4);
}
}
void sfm()
{
if(sign==1)
{
flag=1;
sign=0;
miao++;
if(miao>=60)
{
miao-=60;
fen++;
if(fen>=60)
{
hour++;
fen-=60;
if(hour>=24)
hour-=24;
}
}
}
}
void key_scan()
{
if(key1==0)
{
delay(3);
if(key1==0)
{
temp++;
while(!key1);
TR0=0;
if(temp==1)
{
lcd_write_com(0x0f);
lcd_write_com(0x80+0x40+10);
}
if(temp==2)
lcd_write_com(0x80+0x40+7);
lcd_write_com(0x0f);
if(temp==3)
lcd_write_com(0x80+0x40+4);
lcd_write_com(0x0f);
if(temp==4)
{
temp=0;
lcd_write_com(0x0c);
TR0=1;
}
}
}
}
void time_display(hour,fen,miao)
{
if(flag==1)
{
ge=hour%10;
shi=hour/10;
lcd_write_com(0x80+0x40+4);
lcd_write_date(0x30+ge);
lcd_write_com(0x80+0x40+3);
lcd_write_date(0x30+shi);
ge=fen%10;
shi=fen/10;
lcd_write_com(0x80+0x40+7);
lcd_write_date(0x30+ge);
lcd_write_com(0x80+0x40+6);
lcd_write_date(0x30+shi);
ge=miao%10;
shi=miao/10;
lcd_write_com(0x80+0x40+10);
lcd_write_date(0x30+ge);
lcd_write_com(0x80+0x40+9);
lcd_write_date(0x30+shi);
flag=0;
switch(temp)
{
case(1):lcd_write_com(0x80+0x40+10);break;
case(2):lcd_write_com(0x80+0x40+7);break;
case(3):lcd_write_com(0x80+0x40+4);break;
case(0):lcd_write_com(0x0c);break;
}
}
}
void time_init()
{
if(key2==0)
{
delay(4);
if(key2==0)
{
while(!key2);
if(temp==1)
{
miao++;
if(miao==60)
{
miao=0;
fen++;
if(fen==60)
{
fen=0;
hour++;
}
}
}
if(temp==2)
{
fen++;
if(fen==60)
{
fen=0;
hour++;
if(hour>=24)
hour-=24;
}
}
if(temp==3)
{
hour++;
if(hour>=24)
hour-=24;
}
flag=1;
}
}
}
void main()
{
lcd_init();
tim0_init();
while(1)
{
sfm();
time_display(hour,fen,miao);
time_init();
key_scan();
}
}
void tim() interrupt 1
{
count++;
if(count==18)
{
sign=1;
count=0;
}
}