1602显示时钟.docx
《1602显示时钟.docx》由会员分享,可在线阅读,更多相关《1602显示时钟.docx(16页珍藏版)》请在冰豆网上搜索。
1602显示时钟
源程序:
#include"reg52.h"
#include"intrins.h"
#defineucharunsignedchar
#defineuintunsignedint
uchartab[]={'0','1','2','3','4','5','6','7','8','9'};
sbitk1=P1^0;
sbitk2=P1^1;
sbitk3=P1^2;
sbitrs=P2^0;
sbite=P2^1;
sbitbeep=P2^2;
uintcount,year=2012,mon=9,day=28,hour=23,min=59,sec=50;
//uintcolock_year=2012,colock_yue,colock_ri,colock_hour,colock_min,colock_sec;
ucharc;
voiddelay()
{
uchari;
for(i=0;i<5;i++);
}
voiddelay5ms(uintj)
{
uinta,b;
for(a=j;a>0;a--)
for(b=100;b>0;b--);
}
voidinit_time0()
{
EA=1;
ET0=1;
TMOD=0x01;
TH0=0x4c;
TL0=0x00;
TR0=1;
}
voidwrite_com(ucharcom)
{
rs=0;
e=0;
_nop_();
_nop_();
P0=com;
_nop_();
_nop_();
_nop_();
_nop_();
e=1;
_nop_();
_nop_();
_nop_();
_nop_();
e=0;
}
voidwrite_date(uchardate)
{
rs=1;
e=0;
_nop_();
_nop_();
P0=date;
_nop_();
_nop_();
_nop_();
_nop_();
e=1;
_nop_();
_nop_();
_nop_();
_nop_();
e=0;
}
voidlcd_init()
{
write_com(0x01);delay();
write_com(0x3c);delay();
write_com(0x0c);delay();
write_com(0x06);//delay();
}
voidsec_init()
{
write_com(0x3c);delay();
write_com(0x0f);delay();
write_com(0x06);//delay();
}
voidtime0()interrupt1
{
TH0=0x4c;
TL0=0x00;
count++;
}
voiddisplay()
{
if(count==17)
{
count=0;
sec++;
if(sec==60)
{
sec=0;
min++;
if(min==60)
{
min=0;
hour++;
if(hour==24)
{
hour=0;
day++;
if((mon==1||mon==3||mon==5||mon==7||mon==8||mon==10||mon==12)&&day==32)
{
day=1;
mon++;
}
elseif((mon==4||mon==6||mon==9||mon==11)&&day==31)
{
day=1;
mon++;
}
elseif(mon==2)
{
if((year/4==0&&year/100!
=0)||(year/4==0&&year/400==0))
{
if(day==30)
day=1;
mon++;
}
elseif(!
((year/4==0&&year/100!
=0)&&(year/100==0&&year/400==0)))
{
if(day>28)
{
day=1;
mon++;
}
}
}
if(mon==13)
{
mon=1;
year++;
}
}
}
}
}
}
voidlcd_display(uintnian,uintyue,uintri,uintshi,uintfen,uintmiao)
{
write_com(0x80);delay();
write_date('D');delay();
write_date('A');delay();
write_date('T');delay();
write_date('E');delay();
write_date(':
');
write_date(tab[nian/1000]);
write_date(tab[nian%1000/100]);//delay();
write_date(tab[nian%1000%100/10]);//delay();
write_date(tab[nian%10]);delay();
write_date('-');//delay();
write_date(tab[yue/10]);//delay();
write_date(tab[yue%10]);delay();
write_date('-');//delay();
write_date(tab[ri/10]);//delay();
write_date(tab[ri%10]);delay();
write_com(0xc0);delay();
write_date('T');delay();
write_date('I');delay();
write_date('M');delay();
write_date('E');delay();
write_date(':
');
write_date('');
write_date(tab[shi/10]);//delay();
write_date(tab[shi%10]);delay();
write_date(':
');delay();
write_date(tab[fen/10]);delay();
write_date(tab[fen%10]);delay();
write_date(':
');delay();
write_date(tab[miao/10]);delay();
write_date(tab[miao%10]);delay();
}
voidk1_button()
{
if(!
k1)
{
delay5ms(10);
while(!
k1);
delay5ms(10);
if(c==1)
{
sec++;
if(sec==60)
{
sec=0;
}
}
if(c==2)
{
min++;
if(min==60)
{
min=0;
}
}
if(c==3)
{
hour++;
if(hour==24)
{
hour=0;
}
}
if(c==4)
{
day++;
if(day==32)
{
day=0;
}
}
if(c==5)
{
mon++;
if(mon==13)
{
mon=0;
}
}
if(c==6)
{
year++;
}
}
}
voidk2_button()
{
if(!
k2)
{
delay5ms(10);
while(!
k2);
delay5ms(10);
if(c==1)
{
if(sec>0)
{
sec--;
}
}
if(c==2)
{
if(min>0)
{
min--;
}
}
if(c==3)
{
if(hour>0)
{
hour--;
}
}
if(c==4)
{
if(day>0)
{
day--;
}
}
if(c==5)
{
if(mon>0)
{
mon--;
}
}
if(c==6)
{
if(year>2012)
{
year--;
}
}
}
}
voidk3_button()
{
if(!
k3)
{
delay5ms(10);
while(!
k3);
delay();
TR0=0;
c++;
while
(1)
{
if(!
k3)
{
delay5ms(10);
while(!
k3);
delay5ms(10);
c++;
sec_init();
}
switch(c)
{
case1:
write_com(0xcc);
write_date(tab[sec/10]);
write_date(tab[sec%10]);
k1_button();
k2_button();
break;
case2:
write_com(0xc9);
write_date(tab[min/10]);
write_date(tab[min%10]);
k1_button();
k2_button();
break;
case3:
write_com(0xc6);
write_date(tab[hour/10]);
write_date(tab[hour%10]);
k1_button();
k2_button();
break;
case4:
write_com(0x8d);
write_date(tab[day/10]);
write_date(tab[day%10]);
k1_button();
k2_button();
break;
case5:
write_com(0x8a);
write_date(tab[mon/10]);
write_date(tab[mon%10]);
k1_button();
k2_button();
break;
case6:
write_com(0x85);
write_date(tab[year/1000]);
write_date(tab[year%1000/100]);
write_date(tab[year%1000%100/10]);
write_date(tab[year%10]);
k1_button();
k2_button();
break;
case7:
TR0=1;
c=0;
break;
}
if(c==0)
{
break;
}
}
count=0;
write_com(0x0c);
}
}
/*voidinit0()
{
EA=1;
IT0=1;
IE0=1;
EX0=1;
}
voidexter0()interrupt0
{
lcd_init();
lcd_display(colock_year,colock_yue,colock_ri,colock_hour,colock_min,colock_sec);
k3_button(colock_year,colock_yue,colock_ri,colock_hour,colock_min,colock_sec);
}
voidclock()
{
if(colock_year==year&&colock_yue==mon&&colock_ri==day&&colock_hour==hour&&colock_min==min)
{
beep=~beep;
}
}*/
voidmain()
{
lcd_init();
init_time0();
while
(1)
{
display();
lcd_display(year,mon,day,hour,min,sec);
if(!
k3)
k3_button();
}
}
电路图: