#include<at89x51.h>
#define uchar unsigned char
#define uint unsigned int
uint aa,num;
sbit beep=P3^6;
sbit start=P3^0;
sbit key=P3^1;
uchar temp,shu1=60,shu2=45,mm;
uchar code table[]={0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71
};
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void display(uchar shu1)
{
uchar a,b;
a=shu1/10;
b=shu1%10;
P2=0x04;
P0=table[a];
delay(3);
P2=0x01;
P0=table[b];
delay(3);
P2=0x08;
P0=table[num];
delay(3);
}
void display1(uchar shu2)
{
uchar r,t;
r=shu2/10;
t=shu2%10;
P2=0x04;
P0=table[r];
delay(3);
P2=0x01;
P0=table[t];
delay(3);
P2=0x08;
P0=table[num];
delay(3);
}
void keyscan(void)
{
while(P1!=0xff)
{
temp=P1;
beep=1;
delay(50);
beep=0;
TR0=0;
switch(temp)
{
case 0x7f:num=8;
break;
case 0xbf:num=7;
break;
case 0xdf:num=6;
break;
case 0xef:num=5;
break;
case 0xf7:num=4;
break;
case 0xfb:num=3;
break;
case 0xfd:num=2;
break;
case 0xfe:num=1;
break;
default :num=0; break;
}
}
}
void init()
{
beep=0;
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
}
void timer0() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
aa++;
if((aa==20)&&(mm==0))
{
aa=0;
shu1--;
if(shu1==0)
{
beep=1;
delay(50);
beep=0;
TR0=0;
}
}
if((aa==20)&&(mm==1))
{
aa=0;
shu2--;
if(shu2==0)
{
beep=1;
delay(50);
beep=0;
TR0=0;
}
}
}
void main()
{
beep=0;
TR0=0;
init();
while(start==1)
{
display(shu1);
}
if(!start)
{
TR0=1;
beep=1;
delay(100);
beep=0;
}
while((num==0)&&(shu1!=0))
{
keyscan();
display(shu1);
}
while((num!=0)&&(shu1!=0))
{
display1(shu2);
if(key==0)
{
mm=1;
TR0=1;
beep=1;
delay(5);
beep=0;
}
}
while(1)
{
display(shu1);
}
}