60s倒计时问题
做了个60s倒计时,但是发现屏蔽了TH0和TL0跟没屏蔽时走1s的时间是一样的,已经看了好几天,都没发现出究竟错在哪里,恳请各位帮忙。代码如下:
#include<reg51.h>
#include<stdio.h>
unsigned char a[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
void delay(int x)
{
unsigned int i,j;
for(i=1;i<=x;i++)
for(j=1;j<=100;j++);
}
void display(int shi,int ge)
{
P0=a[shi];
P1=0xfb; //数码管十位接通
delay(10);
P1=0xff;
P0=a[ge];
P1=0xf7; //数码管个位接通
delay(10);
P1=0xff;
//cout++;
}
void main()
{
int cout,ge,shi,num;
cout=0;
num=60;
TMOD=0x01;
TR0=1;
//TH0=0x3c; //*****屏蔽与没屏蔽走1s的时间都是一样的*******
//TL0=0xb0; //*****屏蔽与没屏蔽走1s的时间都是一样的*******
for(;;)
{
shi=num/10; //十位
ge=num%10; //个位
display(shi,ge);
if(TF0==1)
{
//TH0=0x3c; //*****屏蔽与没屏蔽走1s的时间都是一样的*******
//TL0=0xb0; //*****屏蔽与没屏蔽走1s的时间都是一样的*******
cout++;
TF0=0;
}
if(cout==20) //分为20份, 每份50ms,50ms*20=1s
{
cout=0;
num--;
if(num==-1)
num=60;
}
}
}
[解决办法]
有一种可能
shi=num/10; //十位
ge=num%10; //个位
display(shi,ge);