#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit dula=P2^6;
sbit wela=P2^7;
sbit b=P2^3;
sbit key1=P3^4;
sbit key2=P3^5;
uchar aa;
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f};
uchar code table1[]={
0xBF,0x86,0xDB,0xCF,0xE6,
0xED,0xFD,0x87,0xFF,0xEF};
uchar time[]={0,0,0,0,0,0};
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=120;y>0;y--);
}
void init()
{
TMOD=0x01;
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;
}
void display()
{
dula=1;
P0=table[time[0]];
dula=0;
P0=0xff;
wela=1;
P0=0xdf;
wela=0;
delay(1);
dula=1;
P0=table[time[1]];
dula=0;
P0=0xff;
wela=1;
P0=0xef;
wela=0;
delay(1);
dula=1;
P0=table1[time[2]];
dula=0;
P0=0xff;
wela=1;
P0=0xf7;
wela=0;
delay(1);
dula=1;
P0=table[time[3]];
dula=0;
P0=0xff;
wela=1;
P0=0xfb;
wela=0;
delay(1);
dula=1;
P0=table1[time[4]];
dula=0;
P0=0xff;
wela=1;
P0=0xfd;
wela=0;
delay(1);
dula=1;
P0=table[time[5]];
dula=0;
P0=0xff;
wela=1;
P0=0xfe;
wela=0;
delay(1);
if(aa==1)
{
aa=0; time[0]++;
if(time[0]==10)
{time[0]=0;time[1]++;
if(time[1]==10)
{time[1]=0;time[2]++;
if(time[2]==10)
{time[2]=0;time[3]++;
if(time[3]==6)
{time[3]=0;time[4]++;
if(time[4]==10)
{time[4]=0;time[5]++;
if(time[5]==6)
{time[5]=0;time[6]++;}}}}}
}
}
}
void keyscan()
{
if(key1==0)
{
delay(5);
if(key1==0)
{ b=0;
EA=~EA;
ET0=~ET0;
TR0=~TR0;
}
while(!key1);
}
b=1;
if(key2==0)
{
delay(5);
if(key2==0)
{ b=0;
time[0]=time[1]=time[2]=time[3]=time[4]=time[5]=0;
}
while(!key2);
}
b=1;
}
void main()
{
init();
while(1) {keyscan();
display();}
}
void timer0() interrupt 1
{
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;
aa++;
}
這是我用51單片機寫的秒表程序,其他很正常,就是秒表太不準(zhǔn)了,本該顯示微秒的數(shù)碼管變化的時間一秒差不多,這是怎么回事啊。。。