首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 单片机 >

60s倒计时有关问题

2013-12-06 
60s倒计时问题做了个60s倒计时,但是发现屏蔽了TH0和TL0跟没屏蔽时走1s的时间是一样的,已经看了好几天,都没

60s倒计时问题
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)这一步都是触发状态

热点排行