#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit W_lock=P3^6;
sbit S_lock=P3^7;
sbit key1=P1^0;
sbit key2=P1^1;
uchar key_pr1,key_pr2,key_flag;
uchar flag,sec,min,hr;
uchar code table_s[]={0x3f,0x06,0x5b,0x4f,0x66,
0x6d,0x7d,0x07,0x7f,0x6f,0x40};
uchar code table_w[]={0xfe,0xfd,0xf7,0xef,0xbf,0x7f,0xfb,0xdf};
uchar tab[8]={0,0,0,0,0,0,10,10};
void Delay(uint time);
void Deel_date();
void display();
void key_scan(); //鍵盤掃描
void main()
{
TMOD=0x11; //定時器0以工作方式1工作
EA=1; //開啟總中斷
ET0=1; //開定時器0中斷
TR0=1; //開啟定時器0
ET1=1; //開啟定時器1中斷
TR1=1; //開啟定時器1
TH0=(65536-46086)/256; //定時器0的中斷服務程序
TL0=(65536-46083)%256;
TH1=(65536-2000)/256; //定時器1的中斷服務程序
TL1=(65536-2000)%256;
while(1)
{
key_scan();
Deel_date();
if(flag>=20)
{
flag=0; // 按鍵按下的標志
sec++;
if(60==sec)
{
sec=0;
min++;
if(60==min)
{
min=0;
hr++;
if(24==hr)
{
hr=0;
}
}
}
}
}
}
void Deel_date()
{
tab[4]=sec/10;
tab[5]=sec%10;
tab[2]=min/10;
tab[3]=min%10;
tab[0]=hr/10;
tab[1]=hr%10;
}
void display()
{
static i;
P0=table_w[i];
W_lock=1;
W_lock=0;
P0=table_s[tab[i]];
S_lock=1;
S_lock=0;
i++;
if(8==i)
i=0;
}
void Delay(uint time)
{
uint x,y;
for(x=125;x>0;x--)
for(y=time;y>0;y--);
}
void key_scan()
{
if(0==key1)
{
Delay(5);
if(0==key1)
{
key_pr1=1;
}
}
if((1==key1)&&(1==key_pr1))
{
key_pr1=0;
key_flag++;
TR0=0;
}
if(4==key_flag)
{
key_flag=0;
TR0=1;
}
/*********************************************/
if(0==key2)
{
Delay(5);
if(0==key2)
{
key_pr2=1;
}
}
if((1==key2)&&(1==key_pr2))
{
key_pr2=0;
if(key_flag==1)
{
sec++;
if(sec==60)
sec=0;
}
if(key_flag==2)
{
min++;
if(min==60)
min=0;
}
if(key_flag==3)
{
hr++;
if(hr==24)
hr=0;
}
}
}
void Timer_0() interrupt 1
{
TH0=(65536-46086)/256;
TL0=(65536-46083)%256;
flag++;
}
void Timer_1() interrupt 3
{
TH1=(65536-2000)/256;
TL1=(65536-2000)%256;
display();
}
|