欢迎来到Doc100.Net免费学习资源知识分享平台!
您的位置:首页 > 程序异常 >

60s倒计时有关问题

更新时间: 2014-01-05 03:14:13 责任编辑: Author_N1

 

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)这一步都是触发状态
上一篇:上一篇
下一篇:下一篇

 

随机推荐程序问答结果

 

 

如对文章有任何疑问请提交到问题反馈,或者您对内容不满意,请您反馈给我们DOC100.NET论坛发贴求解。
DOC100.NET资源网,机器学习分类整理更新日期::2014-01-05 03:14:13
如需转载,请注明文章出处和来源网址:http://www.doc100.net/bugs/t/19882/
本文WWW.DOC100.NET DOC100.NET版权所有。