基于stc89c51单片机的1602液晶简易万年历.docx
《基于stc89c51单片机的1602液晶简易万年历.docx》由会员分享,可在线阅读,更多相关《基于stc89c51单片机的1602液晶简易万年历.docx(14页珍藏版)》请在冰豆网上搜索。
基于stc89c51单片机的1602液晶简易万年历
基于stc89c51单片机的简易万年历
//基于stc89c51单片机的简易万年历设计
//zzuli-wuzhipeng
#include
#defineucharunsignedchar
#defineuintunsignedint
ucharshi=0,fen=0,miao=0,ri=7,yue=1,Z=1,Y=1,i,K1num;
uintnian=2015;
ucharcount_10ms,K1num;
sbitrs=P2^0;
sbitrw=P2^1;
sbitlcden=P2^2;
sbitK1=P3^0;
sbitK2=P3^1;
sbitK3=P3^2;
sbitBEEP=P3^7;
voiddelay(uintx)//简单延时程序
{
uinta,b;
for(a=x;a>0;a--)
for(b=10;b>0;b--);
}
bi(uintt)//控制响铃时间程序
intc,n;
for(c=0;c{for(n=0;n<50;n++);BEEP=~BEEP;}return(t);} voidwrite_com(ucharcom)//1602液晶写指令{P0=com;rs=0;rw=0;lcden=0;delay(10);lcden=1;delay(10);lcden=0;} voidwrite_date(uchardate)//1602液晶写数据{P0=date;rs=1;rw=0;lcden=0;delay(10);lcden=1;delay(10);lcden=0;} voidbeep()//喇叭{BEEP=0;delay(100);BEEP=1;delay(100);} voidnaozhong()//闹钟{if((Z==shi)&(Y==fen)&(miao<10)){bi(500);}} voidshijian(uintt,add){if(t>100){uchara,b,c,d;a=t/1000+0x30;b=t/100%10+0x30;c=t/10%10+0x30;d=t%10+0x30;write_com(add);write_date(a);write_date(b);write_date(c);write_date(d);}else{ucharm=0,n=0;m=t/10+0x30;n=t%10+0x30;write_com(add);write_date(m);write_date(n);}} voidLCD_disp(){shijian(shi,0x80+0);write_com(0x80+2);write_date(0x3a);shijian(fen,0x80+3);write_date(0x3a);shijian(miao,0x80+6);write_date(0x2d);write_date(0x2d);write_date(0x2d);shijian(Z,0x80+11);write_date(0x3a);shijian(Y,0x80+14);shijian(nian,0xc0+0);write_date(0x2d);shijian(yue,0xc0+5);write_date(0x2d);shijian(ri,0xc0+8);} voidinit()//1602液晶初始化{write_com(0x38);write_com(0x0c);write_com(0x06);write_com(0x01);}voidtimer1_init()//定时器初始化{TMOD=0x01;TH0=0x4c;TL0=0x00;EA=1;ET0=1;TR0=1;} voidtimer0()interrupt1using0//中断程序{TH0=0x4c;TL0=0x00;count_10ms++;if(count_10ms==20){count_10ms=0;miao++;if(miao==60){miao=0;fen++;if(fen==60){fen=0;shi++;if(shi==24){shi=0;if(yue==1||yue==3||yue==5||yue==7||yue==8||yue==10||yue==12){ri++;if(ri==32){ri=1;yue++;if(yue==13){nian++;yue=1;}}}elseif(yue==4||yue==6||yue==9||yue==11){ri++;if(ri==31){ri=1;yue++;if(yue==13){nian++;yue=1;}}}elseif(yue==2){if((!(nian%4)&&(nian%100))||!(nian%400)){ri++;if(ri==30){ri=1;yue++;if(yue==13){nian++;yue=1;}}}else{ri++;if(ri==29){ri=1;yue++;if(yue==13){nian++;yue=1;}}}} }}}}} voidkeycan()//键盘处理程序{ if(K1==0)//功能选择键{K1num++;delay(1);if(K1==0){while(!K1);bi(200);if(K1num==1){TR0=0;write_com(0x80+0);write_com(0x0f);}if(K1num==2){write_com(0x80+3);write_com(0x0f);}if(K1num==3){write_com(0x80+6);write_com(0x0f);}if(K1num==4){write_com(0x80+11);write_com(0x0f);}if(K1num==5){write_com(0x80+14);write_com(0x0f);}if(K1num==6){write_com(0xc0+3);write_com(0x0f);}if(K1num==7){write_com(0xc0+6);write_com(0x0f);}if(K1num==8){write_com(0xc0+9);write_com(0x0f);}if(K1num==9){K1num=0;write_com(0x0c);TR0=1;}}} if(K1num!=0)//功能加{if(K2==0){delay(1);if(K2==0){while(!K2);bi(200);if(K1num==1){shi++;if(shi==24)shi=0;shijian(shi,0x80+0);write_com(0x80);}if(K1num==2){fen++;if(fen==60)fen=0;shijian(fen,0x80+3);write_com(0x80+3);}if(K1num==3){miao++;if(miao==60)miao=0;shijian(miao,0x80+6);write_com(0x80+60);}if(K1num==4){Z++;if(Z==24)Z=0;shijian(Z,0x80+11);write_com(0x80+11);}if(K1num==5){Y++;if(Y==60)Y=0;shijian(Y,0x80+14);write_com(0x80+14);}if(K1num==6){nian++;if(nian==2999)nian=2015;shijian(nian,0xc0+0);write_com(0xc0+0);}if(K1num==7){yue++;if(yue==13)yue=1;shijian(yue,0xc0+5);write_com(0xc0+5);}if(K1num==8){ri++;if(yue==1||yue==3||yue==5||yue==7||yue==8||yue==10||yue==12){if(ri==32){ri=1;}}elseif(yue==4||yue==6||yue==9||yue==11){if(ri==31){ri=1;}}elseif(yue==2){if((!(nian%4)&&(nian%100))||!(nian%400)){if(ri==30){ri=1;}}else{if(ri==29){ri=1;}}}shijian(ri,0xc0+8);write_com(0xc0+8);}}}}if(K1num!=0)//功能减{if(K3==0){delay(1);if(K3==0){while(!K3);bi(200);if(K1num==1){shi--;if(shi==-1)shi=23;shijian(shi,0x80+0);write_com(0x80);}if(K1num==2){fen--;if(fen==-1)fen=59;shijian(fen,0x80+3);write_com(0x80+3);}if(K1num==3){miao--;if(miao==-1)miao=59;shijian(miao,0x80+6);write_com(0x80+6);}if(K1num==4){Z--;if(Z==-1)Z=23;shijian(Z,0x80+11);write_com(0x80+11); voidmain(){init();timer1_init();while(1){keycan();naozhong();}}
for(n=0;n<50;n++);
BEEP=~BEEP;
return(t);
voidwrite_com(ucharcom)//1602液晶写指令
P0=com;
rs=0;
rw=0;
lcden=0;
delay(10);
lcden=1;
voidwrite_date(uchardate)//1602液晶写数据
P0=date;
rs=1;
voidbeep()//喇叭
BEEP=0;
delay(100);
BEEP=1;
voidnaozhong()//闹钟
if((Z==shi)&(Y==fen)&(miao<10))
{bi(500);}
voidshijian(uintt,add)
if(t>100)
uchara,b,c,d;
a=t/1000+0x30;
b=t/100%10+0x30;
c=t/10%10+0x30;
d=t%10+0x30;
write_com(add);
write_date(a);
write_date(b);
write_date(c);
write_date(d);
else
ucharm=0,n=0;
m=t/10+0x30;
n=t%10+0x30;
write_date(m);
write_date(n);
voidLCD_disp()
shijian(shi,0x80+0);
write_com(0x80+2);
write_date(0x3a);
shijian(fen,0x80+3);
shijian(miao,0x80+6);
write_date(0x2d);
shijian(Z,0x80+11);
shijian(Y,0x80+14);
shijian(nian,0xc0+0);
shijian(yue,0xc0+5);
shijian(ri,0xc0+8);
voidinit()//1602液晶初始化
write_com(0x38);
write_com(0x0c);
write_com(0x06);
write_com(0x01);
voidtimer1_init()//定时器初始化
TMOD=0x01;
TH0=0x4c;TL0=0x00;
EA=1;ET0=1;
TR0=1;
voidtimer0()interrupt1using0//中断程序
count_10ms++;
if(count_10ms==20)
count_10ms=0;
miao++;
if(miao==60)
miao=0;
fen++;
if(fen==60)
fen=0;
shi++;
if(shi==24)
shi=0;
if(yue==1||yue==3||yue==5||yue==7||yue==8||yue==10||yue==12)
{ri++;if(ri==32){ri=1;yue++;if(yue==13){nian++;yue=1;}}}
elseif(yue==4||yue==6||yue==9||yue==11)
{ri++;if(ri==31){ri=1;yue++;if(yue==13){nian++;yue=1;}}}
elseif(yue==2)
if((!
(nian%4)&&(nian%100))||!
(nian%400))
{ri++;if(ri==30){ri=1;yue++;if(yue==13){nian++;yue=1;}}}
{ri++;if(ri==29){ri=1;yue++;if(yue==13){nian++;yue=1;}}}
voidkeycan()//键盘处理程序
if(K1==0)//功能选择键
K1num++;delay
(1);
if(K1==0)
while(!
K1);
bi(200);
if(K1num==1){TR0=0;write_com(0x80+0);write_com(0x0f);}
if(K1num==2){write_com(0x80+3);write_com(0x0f);}
if(K1num==3){write_com(0x80+6);write_com(0x0f);}
if(K1num==4){write_com(0x80+11);write_com(0x0f);}
if(K1num==5){write_com(0x80+14);write_com(0x0f);}
if(K1num==6){write_com(0xc0+3);write_com(0x0f);}
if(K1num==7){write_com(0xc0+6);write_com(0x0f);}
if(K1num==8){write_com(0xc0+9);write_com(0x0f);}
if(K1num==9){K1num=0;write_com(0x0c);TR0=1;}
if(K1num!
=0)//功能加
if(K2==0)
delay
K2);
if(K1num==1){shi++;if(shi==24)shi=0;shijian(shi,0x80+0);write_com(0x80);}
if(K1num==2){fen++;if(fen==60)fen=0;shijian(fen,0x80+3);write_com(0x80+3);}
if(K1num==3){miao++;if(miao==60)miao=0;shijian(miao,0x80+6);write_com(0x80+60);}
if(K1num==4){Z++;if(Z==24)Z=0;shijian(Z,0x80+11);write_com(0x80+11);}
if(K1num==5){Y++;if(Y==60)Y=0;shijian(Y,0x80+14);write_com(0x80+14);}
if(K1num==6){nian++;if(nian==2999)nian=2015;shijian(nian,0xc0+0);write_com(0xc0+0);}
if(K1num==7){yue++;if(yue==13)yue=1;shijian(yue,0xc0+5);write_com(0xc0+5);}
if(K1num==8){ri++;
{if(ri==32){ri=1;}}
{if(ri==31){ri=1;}}
{if(ri==30){ri=1;}}
{if(ri==29){ri=1;}}
shijian(ri,0xc0+8);write_com(0xc0+8);
=0)//功能减
if(K3==0)
K3);
if(K1num==1){shi--;if(shi==-1)shi=23;shijian(shi,0x80+0);write_com(0x80);}
if(K1num==2){fen--;if(fen==-1)fen=59;shijian(fen,0x80+3);write_com(0x80+3);}
if(K1num==3){miao--;if(miao==-1)miao=59;shijian(miao,0x80+6);write_com(0x80+6);}
if(K1num==4){Z--;if(Z==-1)Z=23;shijian(Z,0x80+11);write_com(0x80+11);
voidmain()
init();
timer1_init();
while
(1)
keycan();
naozhong();
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1