当前位置: 代码迷 >> 单片机 >> 60s倒计时有关问题
  详细解决方案

60s倒计时有关问题

热度:97   发布时间:2016-04-28 15:10:41.0
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);

耗时太长,超过了T0的最大计时,所以你该不该TH0,TL0都一个结果,到了 if(TF0==1)这一步都是触发状态
  相关解决方案