#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar code tab[]=
{
0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,
0x80,0x90};
unsigned char cnt = 0;
unsigned char cnt0 = 0;
unsigned char sec0 = 0;
unsigned char sec1 = 0;
unsigned char sec2 = 0;
bit flag=0;
bit flag0=0;
bit flag1=0;
bit flag1s=0;
sbit key0=P3^2;
sbit key1=P3^3;
sbit key2=P3^4;
sbit key3=P3^5;
void delay(uint ms)
{
while(ms--);
}
void main()
{
sec2=23;
sec1=59;
sec0=55;
EX0=1; //外部中断0
IT0=1;
EX1=1; //外部中断1
IT1=1;
EA = 1;
TMOD = 0x01;
TH0=(65536-50000)/256;
TL0=(655356-50000)%256;
ET0=1;
TR0=1;
while(1)
{
P2 = 0x80;P0 = tab[sec0%10];delay(10);P0 = 0xff;
P2 = 0x40;P0 = tab[sec0/10];delay(10);P0 = 0xff;
if(flag1s==0)
{
P2 = 0x20;P0 = tab[sec1%10];delay(10);P0 = 0xff;
P2 = 0x10;P0 = tab[sec1/10];delay(10);P0 = 0xff;
P2 = 0x20; P0 =0x7f; delay(10);P0=0xff;
}
else
{
P2 = 0x20;P0 = tab[sec2%10];delay(10);P0 = 0xff;
P2 = 0x10;P0 = tab[sec2/10];delay(10);P0 = 0xff;
}
if((key2==0)&&(flag0==0))
flag0=1;
if((key2==1)&&(flag0==1))
{
flag=0;
flag1s=0;
flag0=0;
sec1++;
if(sec1==60)
{
sec1 = 0;
sec2++;
}
}
if((key3==0)&&(flag1==0))
flag1=1;
if((key3==1)&&(flag1==1))
{
flag=0;
flag1s=1;
flag1=0;
sec2++;
if(sec2==24)
sec2 =0;
}
}
}
void t0(void) interrupt 1 using 3
{
TH0 = (65536-50000)/256;
TL0 = (65536-50000)%256;
cnt++;
if (cnt >= 20)
{
if(flag==1)
{
cnt = 0;
cnt0++;
if(cnt0==5)
{
flag1s=~flag1s;
cnt0=0;
}
sec0++;
if(sec0==60)
{
sec0=0;
sec1++;
if(sec1==60)
{
sec1=0;
sec2++;
if(sec2==24)
{
sec2=0;
}
}
}
}
}
}
void int0_()interrupt 0 using 1
{
if(key0==0)
flag=1;
}
void int1_()interrupt 2 using 2
{
if(key1==0)
{
flag=0;
sec0++;
if(sec0==60)
{
sec0 = 0;
sec1++;
}
}
}
|