#include<reg51.h>
#define uchar unsigned char
#define dula P0
#define wela P2
sbit k4=P3^6;
sbit k5=P3^7;
sbit beep=P2^3;
bit stop=1,scp=0;
unsigned char j,k,num0,num1,num2,num3,sec,min,count=0;
unsigned char time_count;
unsigned char code weitable[]={0x8f,0x4f,0x2f,0x1f};
unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,
0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
unsigned char code table1[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,
0x87,0xff,0xef};
void delay(unsigned char i)
{
for (j=i;j>0;j--)
for(k=125;k>0;k--);
}
void display1 (uchar wei,uchar shu)
{
wei=wei-1;
wela|=0xf0;
if(wei==3)
P0=table1[shu];
else
P0=table[shu];
wela=wela&weitable[wei];
delay(10);
if(sec<10)
if(wei==1)
P0=table1[shu];
else
P0=table[shu];
wela=wela&weitable[wei];
delay(10);
}
void display(unsigned char c,unsigned char d)
{
display1 (4,0);
display1 (3,5);
if(sec<10)
{
display1 (1,c);
display1 (2,d);
}
else if(sec>9)
{
display1 (2,c);
display1 (1,d);
}
}
void start_timer()
{
ET0=1;
EA=1;
TR0=1;
}
void stop_timer()
{
ET0=0;
EA=0;
TR0=0;
}
void main()
{
int z=0;
TMOD=0x01;
TH0=(65536-46080)/256;
TL0=(65536-46080)%256;
while(1)
{
if(k4==0)
{
delay(10);
if(k4==0)
{
while(k4==0);
{
if(stop)
{
start_timer();
scp=~scp;
stop=~stop;
beep=1;
sec=0;
}
}
}
}
if(k5==0)
{
delay(10);
if(k5==0)
{
while(k5==0);
{
stop_timer();
scp=~scp;
stop=1;
}
}
}
if(time_count==20)
{
count=0;
time_count=0;
sec++;
if(sec==100)
{
sec=0;
}
beep=0;
delay(10);
beep=1;
}
if(scp==1)
{
num0=sec%10;
num1=sec/10;
display(num1,num0);
}
else if(scp==0)
{
num0=sec/2%10;
num1=sec/2/10;
display(num1,num0);
}
}
}
void rimer0()interrupt 1
{
TH0=(65536-46080)/256;
TL0=(65536-46080)%256;
time_count++;
}
|