使用定时器和数码管实现秒表倒计时数字没有变化是什么问题?

2019-07-15 07:31发布

#include<reg52.h>
void Inittimer0(void);

unsigned int code LedChar[]={
     0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,
     0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e
};


void main()
{
     unsigned int sec = 0;
     while(1)
     {
         if(sec<=16)
         {
         P0=LedChar[sec];
         InitTimer0();
         sec++;
         }
         else
         {
         sec=0;
         }
     }
}


void InitTimer0(void)
{
     TMOD = 0x01;
     TH0 = 0x0FC;
     TL0 = 0x18;
     TR0 = 1;
}

为什么我的数码管一直都是停在8这个数字上没有变动?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
10条回答
hucc
1楼-- · 2019-07-16 15:20
我不是很懂为什么 InitTimer0();放在unsigned int sec = 0;下面,按道理来讲函数不应该是执行到哪一步了,需要在那一步使用的时候才进行调用的吗?
fair2017
2楼-- · 2019-07-16 18:41
问题有多处。其一,LedChar[sec],当sec为16时超界了,会得到意想不到的结果;其二,没有定时中断函数,而且TMOD=0x01时,是用的16位计数,这种模式需要在中断函数中重新设置载入值的,不然会从0开始计时;其三,允许中断的EA=1,ET0=1要打开。其四,你的这个值应该是1ms计数一次。
fair2017
3楼-- · 2019-07-17 00:26
 精彩回答 2  元偷偷看……
1171244495
4楼-- · 2019-07-17 00:38
这程序写的,再学一下定时器怎么用的。楼上程序可以。

一周热门 更多>