单片机定时器实现实时时钟程序-lcd1602显示
P3 = 0xfd;
temp = P3;
temp &= 0xf0;
if(temp != 0xf0)
{
delay(5);
temp = P3;
temp &= 0xf0;
if(temp != 0xf0)
{
FM = 0;
temp = P3;
switch(temp)
{
case 0xed: 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)
{
if(ri >= 31)
{
ri = 1;
}
}
if(yue == 2)
{
if(((nian % 4 == 0) && (nian % 100) != 0) || (nian % 400 == 0))
{
if(ri >= 30)
{
ri = 1;
}
}
else
{
if(ri >= 29)
{
ri = 1;
}
}
}
break;
case 0xdd: tshi--; if(tshi <= 0) {tshi = 23;} break;
case 0xbd: tfen--; if(tfen <= 0) {tfen = 59;} break;
case 0x7d: nian--; if(nian <= 0) {nian = 10000;} break;
}
while(temp != 0xf0)
{
temp = P3;
temp &= 0xf0;
}
delay(2);
while(temp != 0xf0)
{
temp = P3;
temp &= 0xf0;
}
FM = 1;
}
}
P3 = 0xfb;
temp = P3;
temp &= 0xf0;
if(temp != 0xf0)
{
delay(5);
temp = P3;
temp &= 0xf0;
if(temp != 0xf0)
{
FM = 0;
temp = P3;
switch(temp)
{
case 0xeb:
ri--;
if(yue == 1 || yue == 3 || yue == 5 || yue == 7 || yue == 8 || yue == 10 || yue == 12 )
{
if(ri <= 0)
{
ri = 31;
}
}
if(yue == 4 || yue == 6 || yue == 9 || yue == 11)
{
if(ri <= 0)
{
ri = 30;
}
}
if(yue == 2)
{
if(((nian % 4 == 0) && (nian % 100) != 0) || (nian % 400 == 0))
{
if(ri <= 0)
{
ri = 29;
}
}
else
{
if(ri <= 0)
{
ri = 28;
}
}
break;
case 0xdb: tshi = 0;
tfen = 0;
tmiao = 0;
nian = 0;
yue = 1;
ri = 1;
break;
}
while(temp != 0xf0)
{
temp = P3;
temp &= 0xf0;
}
delay(2);
while(temp != 0xf0)
{
temp = P3;
temp &= 0xf0;
}
}
FM = 1;
}
}
}
//main:
void main(void)
{
init();
timer1_init();
write_pos(0x42);
write_data(:);
write_pos(0x06);
write_data(-);
while(1)
{
times();
dates();
marixKeyscan();
if(counter == 50)
{
counter = 0;
tmiao++;
if(tmiao >= 60)
{
tmiao = 0;
tfen++;
if(tfen >= 60)
{
tfen = 0;
tshi++;
if(tshi >= 24)
{
tshi = 0;
ri++;
switch(yue)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12: if(ri >= 32)
{
ri = 1;
yue++;
}
break;
case 4:
case 6:
case 9:
case 11: if(ri >= 31)
{
ri = 1;
yue++;
}
break;
case 2: if(((nian % 4 ) == 0 && (nian % 100) != 0) || (nian % 400 == 0))
{
if(ri >= 30)
{
ri = 1;
yue++;
}
}
else
{
if(ri >= 29)
{
ri = 1;
yue++;
}
}
break;
default: break;
}
if(yue >= 13)
{
yue = 1;
nian++;
if(nian >= 10000)
{
nian = 0;
}
}
}
}
}
}
}
}
//timr1:int
void timer1_int() interrupt 3
{
TH1 = 0xB8;
TL1 = 0x00;
counter++;
}本文引用地址:https://www.eepw.com.cn/article/201612/324602.htm
评论