#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit dula=P2^6;//定義鎖存器鎖存端
sbit wela=P2^7;//定義鎖存器鎖存端
sbit k1=P3^4;
sbit k2=P3^5;
sbit k3=P3^6;
sbit k4=P3^7;
bit bSystemRunFlag;
bit bIconFlashFlag;
bit bFlashHourFlag;
bit bFlashMinTFlag;
uchar usec,msec,sec,min,hour;
uchar displayBuf[6];
uchar keyDecTime;
uint tt;
uchar code table[]={0x3f,
0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,0x7f,0x6f,
0x77,0x7c,0x39,0x5e,0x79,0x71,};
uchar code tablecom[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf} ;//6個數碼管全亮
void delay(uint z);
void keyscan();
void main()
{
tt=0;
delay(1);
TMOD=0x01;
TH0=(65536-45872)/256;
TL0=(65536-45872)%256;
EA=1;
ET0=1;
TR0=1;
wela=1;
P0=0xff;
wela=1;
dula=0;
P0=0x00;
dula=1;
dula=0;
while(1)
{
if(usec==250)
{
usec=0;
bIconFlashFlag =~ bIconFlashFlag;
if(++msec>=2)
{
msec=0;
if(++sec>=60)
{
sec=0;
if(++min>=60)
{ min=0;
if(++hour>=24)
hour=0;
}
}
}
}
if(bSystemRunFlag==1)
{
bSystemRunFlag=0;
keyscan();
tt++;
if(tt>=6)
tt=0;
displayBuf[0]=hour/10;
displayBuf[1]=hour%10;
displayBuf[2]=min/10;
displayBuf[3]=min%10;
displayBuf[4]=sec/10;
displayBuf[5]=sec%10;
P0=0xff;
wela=1;
wela=0;
P0=table[displayBuf[tt]];
if(tt==1||tt==3)
{
if(msec==1)
P0|=0x80;
}
if(bFlashHourFlag&&!bIconFlashFlag)
{
if(tt<2)
P0 = 0;
}
if(bFlashMinTFlag&&!bIconFlashFlag)
{
if(tt==2||tt==3)
P0 = 0;
}
//
dula=1;
dula=0;
P0=tablecom[tt];
wela=1;
wela=1;
wela=1;
wela=0;
}
}
}
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void exter0()interrupt 1
{
TH0=(65536-1872)/256;//定時器輸入20毫秒。
TL0=(65536-1872)%256;//求余
usec++;bSystemRunFlag=1;//毫秒加加,flag=1;
}
void keyscan()
{
if(k1==0)
{
if(keyDecTime<200)keyDecTime++;
if(keyDecTime==40)
{
bFlashMinTFlag=0;
bFlashHourFlag =~bFlashHourFlag;
}
}
else if(k2 == 0)
{
if(keyDecTime<200)keyDecTime++;
if(keyDecTime==40)
{
bFlashHourFlag=0;
bFlashMinTFlag =~bFlashMinTFlag;
}
}
else if(k3 == 0)
{
if(keyDecTime<200)keyDecTime++;
if(keyDecTime==40)
{
if(bFlashHourFlag)
{
if(++hour >= 24)
hour=0;
}
if(bFlashMinTFlag)
{
if(++min >= 60)
min=0;
}
}
}
else if(k4 == 0)
{
if(keyDecTime<200)keyDecTime++;
if(keyDecTime==40)
{
if(bFlashHourFlag)
{
if(hour > 0)
hour--;
else
hour=23;
}
if(bFlashMinTFlag)
{
if(min > 0)
min--;
else
min=59;
}
}
}
else
{
keyDecTime=0;
}
} |