#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit dula=P2^6;
sbit wela=P2^7;
sbit key1=P3^0;
sbit key2=P3^1;
sbit key3=P3^2;
sbit key4=P3^3;
uchar run,key;
unsigned char flag=0;
unsigned char fen1=29,maio1=59,maio1_=60;
uchar fen2,maio2,maio2_;
//float time0,time1;
char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
void Init()//清零
{
run=0;
maio2_=0;
maio2=0;
fen2=0;
EA=0;
ET0=0;
TR0=0;
}
void delay(unsigned char i)//延时
{
char j,k;
for(j=i;j>0;j--)
for(k=125;k>0;k--);
}
void keyscan()//按键检测
{
if(key1==0)
{
delay(5);
if(key1==0)
{
run=1;
}
}
if(key2==0)
{
delay(5);
if(key2==0)
{
run=0;
}
}
if(key3==0)
{
delay(5);
if(key3==0)
{
run=2;
}
}
if(key4==0)
{
delay(5);
if(key4==0)
{
run=3;
}
}
}
void T0_time()interrupt 1
{
TH0=(65536-9216)/256; //每隔10毫秒发起一次中断。
TL0=(65536-9216)%256;
if(run==1)
{
flag=1;
maio2_+=1;
if(maio2_==60)
{
maio2_=0;
maio2++;
if(maio2==60)
{
maio2=0;
fen2++;
if(fen2==60)
fen2=0;
}
}
}
if(run==2)
{
flag=0;
maio1_-=1;
if(maio1_==0)
{
maio1_=60;
maio1--;
if(maio1==0)
{
maio1=60;
fen1--;
if(fen1==0)
fen1=60;
}
}
}
}
void display(char fen,char miao,char miao_)
{
int a[6];
a[1]=miao_/10;
a[2]=miao%10;
a[3]=miao/10;
a[4]=fen%10;
a[5]=fen/10;
P0=table[a[1]];
dula=1;
dula=0;
P0=0x7f;
wela=1;
wela=0;
delay(5);
P0=0x40;
dula=1;
dula=0;
P0=0xbf;
wela=1;
wela=0;
delay(5);
P0=table[a[2]];
dula=1;
dula=0;
P0=0xdf;
wela=1;
wela=0;
delay(5);
P0=table[a[3]];
dula=1;
dula=0;
P0=0xef;
wela=1;
wela=0;
delay(5);
P0=0x40;
dula=1;
dula=0;
P0=0xf7;
wela=1;
wela=0;
delay(5);
P0=table[a[4]];
dula=1;
dula=0;
P0=0xfb;
wela=1;
wela=0;
delay(5);
P0=table[a[5]];
dula=1;
dula=0;
P0=0xfd;
wela=1;
wela=0;
delay(5);
P0=0x3f;
dula=1;
dula=0;
P0=0xfe;
wela=1;
wela=0;
delay(5);
}
void check_display()
{
if(run==0)
TR0=0;
if(run==1&&TR0==0||run==2&&TR0==0)
{
TMOD=0x01;
TH0=(65536-9216)/256; //每隔10毫秒发起一次中断。
TL0=(65536-9216)%256;
EA=1;
ET0=1;
TR0=1;
}
if(run!=3)
{
if(flag==1)
{
display(fen2,maio2,maio2_);
}
if(flag==0)
{
display(fen1,maio1,maio1_);
}
}
else
{
display(0,0,0);
fen1=29;
maio1=59;
maio1_=60;
fen2=0;
maio2=0;
maio2_=0;
}
}
void main()
{
Init();
while(1)
{
keyscan();
check_display();
}
}
#define uchar unsigned char
#define uint unsigned int
sbit dula=P2^6;
sbit wela=P2^7;
sbit key1=P3^0;
sbit key2=P3^1;
sbit key3=P3^2;
sbit key4=P3^3;
uchar run,key;
unsigned char flag=0;
unsigned char fen1=29,maio1=59,maio1_=60;
uchar fen2,maio2,maio2_;
//float time0,time1;
char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
void Init()//清零
{
run=0;
maio2_=0;
maio2=0;
fen2=0;
EA=0;
ET0=0;
TR0=0;
}
void delay(unsigned char i)//延时
{
char j,k;
for(j=i;j>0;j--)
for(k=125;k>0;k--);
}
void keyscan()//按键检测
{
if(key1==0)
{
delay(5);
if(key1==0)
{
run=1;
}
}
if(key2==0)
{
delay(5);
if(key2==0)
{
run=0;
}
}
if(key3==0)
{
delay(5);
if(key3==0)
{
run=2;
}
}
if(key4==0)
{
delay(5);
if(key4==0)
{
run=3;
}
}
}
void T0_time()interrupt 1
{
TH0=(65536-9216)/256; //每隔10毫秒发起一次中断。
TL0=(65536-9216)%256;
if(run==1)
{
flag=1;
maio2_+=1;
if(maio2_==60)
{
maio2_=0;
maio2++;
if(maio2==60)
{
maio2=0;
fen2++;
if(fen2==60)
fen2=0;
}
}
}
if(run==2)
{
flag=0;
maio1_-=1;
if(maio1_==0)
{
maio1_=60;
maio1--;
if(maio1==0)
{
maio1=60;
fen1--;
if(fen1==0)
fen1=60;
}
}
}
}
void display(char fen,char miao,char miao_)
{
int a[6];
a[1]=miao_/10;
a[2]=miao%10;
a[3]=miao/10;
a[4]=fen%10;
a[5]=fen/10;
P0=table[a[1]];
dula=1;
dula=0;
P0=0x7f;
wela=1;
wela=0;
delay(5);
P0=0x40;
dula=1;
dula=0;
P0=0xbf;
wela=1;
wela=0;
delay(5);
P0=table[a[2]];
dula=1;
dula=0;
P0=0xdf;
wela=1;
wela=0;
delay(5);
P0=table[a[3]];
dula=1;
dula=0;
P0=0xef;
wela=1;
wela=0;
delay(5);
P0=0x40;
dula=1;
dula=0;
P0=0xf7;
wela=1;
wela=0;
delay(5);
P0=table[a[4]];
dula=1;
dula=0;
P0=0xfb;
wela=1;
wela=0;
delay(5);
P0=table[a[5]];
dula=1;
dula=0;
P0=0xfd;
wela=1;
wela=0;
delay(5);
P0=0x3f;
dula=1;
dula=0;
P0=0xfe;
wela=1;
wela=0;
delay(5);
}
void check_display()
{
if(run==0)
TR0=0;
if(run==1&&TR0==0||run==2&&TR0==0)
{
TMOD=0x01;
TH0=(65536-9216)/256; //每隔10毫秒发起一次中断。
TL0=(65536-9216)%256;
EA=1;
ET0=1;
TR0=1;
}
if(run!=3)
{
if(flag==1)
{
display(fen2,maio2,maio2_);
}
if(flag==0)
{
display(fen1,maio1,maio1_);
}
}
else
{
display(0,0,0);
fen1=29;
maio1=59;
maio1_=60;
fen2=0;
maio2=0;
maio2_=0;
}
}
void main()
{
Init();
while(1)
{
keyscan();
check_display();
}
}