注册 登录
编程论坛 单片机编程

数码管跳动的时间没有1S怎么回事??

随风8888 发布于 2016-10-03 22:22, 2372 次点击
#include<reg52.h>

unsigned char  LEDchar[]=
                  {0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
void main()
{
unsigned char cnt = 0;
unsigned char i = 0;
  TMOD = 0x01;            
  TH0 =  0xb1df;            // x*12/12000000=0.02s    x=20000      x+y=65535     y=45535=0xb1df  
  TL0 = 0x00;
  TR0 = 1;

  while (1)
  {
    if(TF0==1)
     {
      TF0 = 0;
      TH0 = 0xb1df;
      TL0 = 0x00;
      cnt++;
     if(cnt>=50)
      {
        cnt = 0;
        P0 = LEDchar[i];
        i++;
     if(i>=9)
     {
        i = 0;
     }

      }
      }
   }
 }
4 回复
#2
hu9jj2016-10-04 08:30
以下是引用随风8888在2016-10-3 22:22:31的发言:

#include<reg52.h>

unsigned char  LEDchar[]=
                  {0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
void main()
{
unsigned char cnt = 0;
unsigned char i = 0;
  TMOD = 0x01;            
  TH0 =  0xb1df;            // x*12/12000000=0.02s    x=20000      x+y=65535     y=45535=0xb1df  
  TL0 = 0x00;
  TR0 = 1;

  while (1)
  {
    if(TF0==1)
     {
      TF0 = 0;
      TH0 = 0xb1df;
      TL0 = 0x00;
      cnt++;
     if(cnt>=50)
      {
        cnt = 0;
        P0 = LEDchar;
        i++;
     if(i>=9)
     {
        i = 0;
     }

      }
      }
   }
 }

TH0和TL0都是8位的寄存器,你将16位的数值0xb1df赋值给TH0,TH0就溢出了。试试修改成:
TH0=0xb1;
TL0=0xdf;
如果定时的时间相差太大,再适当调整这个数值。
#3
随风88882016-10-04 21:21
回复 2楼 hu9jj
谢谢,论坛有你更精彩!!!
#4
hu9jj2016-10-05 19:20
你的这个程序可能还会有点问题。对定时器重复赋值不能在主程序的while()中进行,而应该在定时器中断的处理过程中进行,因为你无法保让while循环与定时器溢出保持同步的。
#5
易联沧海2016-10-24 12:28
1