单片机定时器实时时钟程序Word文件下载.docx
《单片机定时器实时时钟程序Word文件下载.docx》由会员分享,可在线阅读,更多相关《单片机定时器实时时钟程序Word文件下载.docx(12页珍藏版)》请在冰点文库上搜索。
uchari,j;
for(i=0;
i<
xms;
i++)
for(j=0;
j<
125;
j++);
}
//wait:
voidwait()
P0=0xff;
RS=0;
RW=1;
EN=0;
EN=1;
while(BUSY==1);
//write:
cmd
voidwrite_cmd(ucharcmd)
wait();
RW=0;
P0=cmd;
data
voidwrite_data(uchardat)
{
RS=1;
P0=dat;
//LCD1602:
init
voidinit()
nian=2016;
yue=6;
ri=13;
wela=0;
dula=0;
P1=0xff;
delay(10);
write_cmd(0x38);
delay(5);
write_cmd(0x0c);
write_cmd(0x06);
write_cmd(0x01);
//timer1:
voidtimer1_init()
TMOD=0x10;
TH1=0xB8;
TL1=0x00;
TR1=1;
EA=1;
ET1=1;
byteaddress
voidwrite_pos(ucharadd)
write_cmd(add|0x80);
string
voidsend_string(uchar*str)
while(*str!
='
'
)
write_data(*str++);
//dis:
date
voiddates()
nqian=nian/1000%10;
nbai=nian/100%10;
nshi=nian/10%10;
nge=nian%10;
yshi=yue/10%10;
yge=yue%10;
rshi=ri/10%10;
rge=ri%10;
write_pos(0x00);
send_string(time);
write_pos(0x09);
send_string(date);
write_pos(0x46);
write_data(nqian+0x30);
write_pos(0x47);
write_data(nbai+0x30);
write_pos(0x48);
write_data(nshi+0x30);
write_pos(0x49);
write_data(nge+0x30);
write_pos(0x4A);
write_data('
-'
);
write_pos(0x4B);
write_data(yshi+0x30);
write_pos(0x4C);
write_data(yge+0x30);
write_pos(0x4D);
write_pos(0x4E);
write_data(rshi+0x30);
write_pos(0x4F);
write_data(rge+0x30);
time
voidtimes()
sshi=tshi/10%10;
sge=tshi%10;
fshi=tfen/10%10;
fge=tfen%10;
mshi=tmiao/10%10;
mge=tmiao%10;
write_pos(0x40);
write_data(sshi+0x30);
write_pos(0x41);
write_data(sge+0x30);
write_pos(0x43);
write_data(fshi+0x30);
write_pos(0x44);
write_data(fge+0x30);
write_pos(0x06);
write_data(mshi+0x30);
write_pos(0x07);
write_data(mge+0x30);
//keyscan:
voidmarixKeyscan()
uchartemp;
P3=0xfe;
temp=P3;
temp&
=0xf0;
if(temp!
=0xf0)
FM=0;
switch(temp)
case0xee:
tshi++;
if(tshi>
=24)tshi=0;
break;
case0xde:
tfen++;
if(tfen>
=60)tfen=0;
case0xbe:
nian++;
if(nian>
=10000)nian=0;
case0x7e:
yue++;
if(yue>
=13)yue=1;
while(temp!
delay
(2);
FM=1;
P3=0xfd;
case0xed:
ri++;
if(yue==1||yue==3||yue==5||yue==7||yue==8||yue==10||yue==12)
if(ri>
=32)
ri=1;
if(yue==4||yue==6||yue==9||yue==11)
=31)
if(yue==2)
if(((nian%4==0)&
&
(nian%100)!
=0)||(nian%400==0))
=30)
}
else
=29)
break;
case0xdd:
tshi--;
if(tshi<
=0){tshi=23;
}break;
case0xbd:
tfen--;
if(tfen<
=0){tfen=59;
case0x7d:
nian--;
if(nian<
=0){nian=10000;
P3=0xfb;
case0xeb:
ri--;
if(yue==1||yue==3||yue==5||yue==7||yue==8||yue==10||yue==12)
if(ri<
=0)
ri=31;
ri=30;
ri=29;
ri=28;
case0xdb:
tshi=0;
tfen=0;
tmiao=0;
nian=0;
yue=1;
//main:
voidmain(void)
init();
timer1_init();
write_pos(0x42);
:
while
(1)
times();
dates();
marixKeyscan();
if(counter==50)
counter=0;
tmiao++;
if(tmiao>
=60)
tfen++;
if(tfen>
tshi++;
if(tshi>
=24)
tshi=0;
ri++;
switch(yue)
case1:
case3:
case5:
case7:
case8:
case10:
case12:
if(ri>
yue++;
case4:
case6:
case9:
case11:
case2:
if(((nian%4)==0&
default:
if(yue>
=13)
nian++;
if(nian>
=10000)
//timr1:
int
voidtimer1_int()interrupt3
counter++;