/********按键控制液晶显示时钟*****/
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar code table[]="WEIFA 2015";
uchar code table1[]="00:00:00:00:00";
uchar nian1,nian2,yue,tian,shi,fen,miao,num,key,num1,com,add,date;
sbit s1=P3^4;
sbit s2=P3^5;
sbit s3=P3^6;
sbit rs=P1^0;
sbit rw=P1^1;
sbit en=P2^5;
sbit du=P2^6;
sbit we=P2^7;
void delay(uchar xms)
{
uchar x,y;
for(x=xms;x>0;x--)
for(y=112;y>0;y--);
}
void write_com(com)
{
rs=0;
en=0;
rw=0;
P0=com;
delay(5);
en=1;
delay(5);
en=0;
}
void write_date(date)
{
rs=1;
en=0;
rw=0;
P0=date;
delay(5);
en=1;
delay(5);
en=0;
}
void write_time(add,date)
{
uchar shi,ge;
shi=date/10;
ge=date%10;
write_com(0x80+0x40+add);
write_date(0x30+shi);
write_date(0x30+ge);
delay(2);
}
void write_nian(add,date)
{
uchar shi,ge;
shi=date/10;
ge=date%10;
write_com(0x80+add);
write_date(0x30+shi);
write_date(0x30+ge);
delay(2);
}
void init()
{
du=0;
we=0;
rs=0;
rw=0;
en=0;
write_com(0x38);//设置显示屏模式为2行16字符
write_com(0x0c);//
write_com(0x06);
write_com(0x01);
write_com(0x80);
for(num=0;num<10;num++)
{
write_date(table[num]);
delay(2);
}
write_com(0x80+0x40);
for(num=0;num<12;num++)
{
write_date(table1[num]);
delay(2);
}
TMOD=0x01;
EA=1;
TR0=1;
ET0=1;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
}
void timer() interrupt 1
{
TMOD=0x01;
EA=1;
TR0=1;
ET0=1;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
num1++;
if(num1==18)
{
num1=0;
miao++;
if(miao==60)
{
miao=0;
fen++;
if(fen==60)
{
fen=0;
shi++;
if(shi==24)
{
shi=0;
tian++;
if(tian==30)
{
tian=0;
yue++;
if(yue==12)
{
yue=0;
nian1++;
if(nian1==10)
{
nian1=0;
nian2++;
if(nian2==10)
{
nian2=0;
}
write_nian(8,nian1);
}
write_nian(6,nian2);
}
write_time(0,yue);
}
write_time(3,tian);
}
write_time(6,shi);
}
write_time(9,fen);
}
write_time(12,miao);
}
}
void anjian()
{
if(s1==0)
{
delay(10);
if(s1==0)
{
while(!s1);
key++;
if(key==1)
{
TR0=0;
write_com(0x0f);
write_com(0x80+0x40+12);
}
if(key==2)
{
write_com(0x80+0x40+9);
}
if(key==3)
{
write_com(0x80+0x40+6);
}
if(key==4)
{
write_com(0x80+0x40+3);
}
if(key==5)
{
write_com(0x80+0x40+0);
}
if(key==6)
{
write_com(0x80+8);
}
if(key==7)
{
write_com(0x80+6);
}
if(key==8)
{
key=0;
write_com(0x0c);
TR0=1;
}
}
}
if(key!=0)
{
if(s2==0)
{
delay(10);
if(s2==0)
{
while(!s2);
if(key==1)
{ miao++;
if(miao==60)
{
miao=0;
}
write_time(12,miao);
write_com(0x80+0x40+13);
}
if(key==2)
{
fen++;
if(fen==60)
{
fen=0;
}
write_time(9,fen);
write_com(0x80+0x40+10);
}
if(key==3)
{
shi++;
if(shi==24)
{
shi=0;
}
write_time(6,shi);
write_com(0x80+0x40+7);
}
if(key==4)
{
tian++;
if(tian==30)
{
tian=0;
}
write_time(3,tian);
write_com(0x80+0x40+4);
}
if(key==5)
{
yue++;
if(yue==12)
{
yue=0;
}
write_time(0,yue);
write_com(0x80+0x40+0);
}
if(key==6)
{
nian1++;
if(nian1==100)
{
nian1=0;
}
write_nian(8,nian1);
write_com(0x80+8);
}
if(key==7)
{
nian2++;
if(nian2==100)
{
nian2=0;
}
write_nian(6,nian2);
write_com(0x80+6);
}
}
}
if(s3==0)
{
delay(10);
if(s3==0)
{
while(!s3);
if(key==1)
{
miao--;
if(miao==-1)
{
miao=59;
}
write_time(12,miao);
write_com(0x80+0x40+13);
}
if(key==2)
{
fen--;
if(fen==-1)
{
fen=59;
}
write_time(9,fen);
write_com(0x80+0x40+10);
}
if(key==3)
{
shi--;
if(shi==-1)
{
shi=23;
}
write_time(6,shi);
write_com(0x80+0x40+7);
}
if(key==4)
{
tian--;
if(tian==-1)
{
tian=29;
}
write_time(3,tian);
write_com(0x80+0x40+4);
}
if(key==5)
{
yue--;
if(yue==-1);
{
yue=11;
}
write_time(0,yue);
write_com(0x80+0x40+0);
}
if(key==6)
{
nian1--;
if(nian1==-1)
{
nian1=99;
}
write_nian(8,nian1);
write_com(0x80+8);
}
if(key==7)
{
nian2--;
if(nian2==-1)
{
nian2=99;
}
write_nian(6,nian2);
write_com(0x80+6);
}
}
}
}
}
void main()
{
init();
while(1)
{
anjian();
}
}
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar code table[]="WEIFA 2015";
uchar code table1[]="00:00:00:00:00";
uchar nian1,nian2,yue,tian,shi,fen,miao,num,key,num1,com,add,date;
sbit s1=P3^4;
sbit s2=P3^5;
sbit s3=P3^6;
sbit rs=P1^0;
sbit rw=P1^1;
sbit en=P2^5;
sbit du=P2^6;
sbit we=P2^7;
void delay(uchar xms)
{
uchar x,y;
for(x=xms;x>0;x--)
for(y=112;y>0;y--);
}
void write_com(com)
{
rs=0;
en=0;
rw=0;
P0=com;
delay(5);
en=1;
delay(5);
en=0;
}
void write_date(date)
{
rs=1;
en=0;
rw=0;
P0=date;
delay(5);
en=1;
delay(5);
en=0;
}
void write_time(add,date)
{
uchar shi,ge;
shi=date/10;
ge=date%10;
write_com(0x80+0x40+add);
write_date(0x30+shi);
write_date(0x30+ge);
delay(2);
}
void write_nian(add,date)
{
uchar shi,ge;
shi=date/10;
ge=date%10;
write_com(0x80+add);
write_date(0x30+shi);
write_date(0x30+ge);
delay(2);
}
void init()
{
du=0;
we=0;
rs=0;
rw=0;
en=0;
write_com(0x38);//设置显示屏模式为2行16字符
write_com(0x0c);//
write_com(0x06);
write_com(0x01);
write_com(0x80);
for(num=0;num<10;num++)
{
write_date(table[num]);
delay(2);
}
write_com(0x80+0x40);
for(num=0;num<12;num++)
{
write_date(table1[num]);
delay(2);
}
TMOD=0x01;
EA=1;
TR0=1;
ET0=1;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
}
void timer() interrupt 1
{
TMOD=0x01;
EA=1;
TR0=1;
ET0=1;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
num1++;
if(num1==18)
{
num1=0;
miao++;
if(miao==60)
{
miao=0;
fen++;
if(fen==60)
{
fen=0;
shi++;
if(shi==24)
{
shi=0;
tian++;
if(tian==30)
{
tian=0;
yue++;
if(yue==12)
{
yue=0;
nian1++;
if(nian1==10)
{
nian1=0;
nian2++;
if(nian2==10)
{
nian2=0;
}
write_nian(8,nian1);
}
write_nian(6,nian2);
}
write_time(0,yue);
}
write_time(3,tian);
}
write_time(6,shi);
}
write_time(9,fen);
}
write_time(12,miao);
}
}
void anjian()
{
if(s1==0)
{
delay(10);
if(s1==0)
{
while(!s1);
key++;
if(key==1)
{
TR0=0;
write_com(0x0f);
write_com(0x80+0x40+12);
}
if(key==2)
{
write_com(0x80+0x40+9);
}
if(key==3)
{
write_com(0x80+0x40+6);
}
if(key==4)
{
write_com(0x80+0x40+3);
}
if(key==5)
{
write_com(0x80+0x40+0);
}
if(key==6)
{
write_com(0x80+8);
}
if(key==7)
{
write_com(0x80+6);
}
if(key==8)
{
key=0;
write_com(0x0c);
TR0=1;
}
}
}
if(key!=0)
{
if(s2==0)
{
delay(10);
if(s2==0)
{
while(!s2);
if(key==1)
{ miao++;
if(miao==60)
{
miao=0;
}
write_time(12,miao);
write_com(0x80+0x40+13);
}
if(key==2)
{
fen++;
if(fen==60)
{
fen=0;
}
write_time(9,fen);
write_com(0x80+0x40+10);
}
if(key==3)
{
shi++;
if(shi==24)
{
shi=0;
}
write_time(6,shi);
write_com(0x80+0x40+7);
}
if(key==4)
{
tian++;
if(tian==30)
{
tian=0;
}
write_time(3,tian);
write_com(0x80+0x40+4);
}
if(key==5)
{
yue++;
if(yue==12)
{
yue=0;
}
write_time(0,yue);
write_com(0x80+0x40+0);
}
if(key==6)
{
nian1++;
if(nian1==100)
{
nian1=0;
}
write_nian(8,nian1);
write_com(0x80+8);
}
if(key==7)
{
nian2++;
if(nian2==100)
{
nian2=0;
}
write_nian(6,nian2);
write_com(0x80+6);
}
}
}
if(s3==0)
{
delay(10);
if(s3==0)
{
while(!s3);
if(key==1)
{
miao--;
if(miao==-1)
{
miao=59;
}
write_time(12,miao);
write_com(0x80+0x40+13);
}
if(key==2)
{
fen--;
if(fen==-1)
{
fen=59;
}
write_time(9,fen);
write_com(0x80+0x40+10);
}
if(key==3)
{
shi--;
if(shi==-1)
{
shi=23;
}
write_time(6,shi);
write_com(0x80+0x40+7);
}
if(key==4)
{
tian--;
if(tian==-1)
{
tian=29;
}
write_time(3,tian);
write_com(0x80+0x40+4);
}
if(key==5)
{
yue--;
if(yue==-1);
{
yue=11;
}
write_time(0,yue);
write_com(0x80+0x40+0);
}
if(key==6)
{
nian1--;
if(nian1==-1)
{
nian1=99;
}
write_nian(8,nian1);
write_com(0x80+8);
}
if(key==7)
{
nian2--;
if(nian2==-1)
{
nian2=99;
}
write_nian(6,nian2);
write_com(0x80+6);
}
}
}
}
}
void main()
{
init();
while(1)
{
anjian();
}
}