微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 让后四位数码管以0.01秒(利用定时器)的速度从0显示到9999,在使用定时器定时,为什么定时时间不对,计算应该没错呀

让后四位数码管以0.01秒(利用定时器)的速度从0显示到9999,在使用定时器定时,为什么定时时间不对,计算应该没错呀

时间:10-02 整理:3721RD 点击:
让后四位数码管以0.01秒(利用定时器)的速度从0显示到9999
#include <reg52.h>
#include <intrins.h>
int ge,shi,bai,qian;
unsigned   int x;
sbit wei=P2^7;
sbit duan=P2^6;
char code A[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
void delay(int z)
{
int t,y;
for(t = z; t> 0; t--)
  for(y = 114; y > 0 ; y--);
}
void display( unsigned int s)
{
   qian=s/1000;
   bai=(s-1000*qian)/100;
   shi=(s-1000*qian-100*bai)/10;
   ge=s-1000*qian-100*bai-10*shi;
       //第一个数码管 51单片机数码管  位:从左到右 低位到高位 且 低电频亮
    wei=1;
          P0=0x7f;
          wei=0; //位选
          duan=1;
          P0=A[ge];
          duan=0;  //段选
   delay(1);
    //第二个数码管
       wei=1;
          P0=0xbf;
          wei=0;
          duan=1;
          P0=A[shi];
          duan=0;
    delay(1);
    //第三个数码管
    wei=1;
          P0=0xdf;
          wei=0;
          duan=1;
          P0=A[bai];
          duan=0;
    delay(1);
    //第四个数码管  
        wei=1;
          P0=0xef;
          wei=0;
          duan=1;
          P0=A[qian];
          duan=0;
    delay(1);
    if(ge==9&&shi==9&&bai==9&&qian==9)
    {
    wei=1;
          P0=0xff;
          wei=0;
    while(1);//显示9999后熄灭
    }     
}
void main()
{
TMOD=0x01;
TH0=(65536-56320)/256;//晶振频率11.0592Mhz,//时钟频率0.9216Mhz//1.085069444微秒计数器+1时间
TL0=(65536-56320)%256;//定时10ms,计数器+9216次,十六进制为2400,高八位0x24,低八位0x00
TR0=1;
while(1)
{
  if(TF0==1)
  {
    TF0=1;
TH0=0x24;//
TL0=0x00;
x++;
  }
  display(x);

}
}
//晶振频率11.0592Mhz,//时钟频率0.9216Mhz//1.085069444微秒计数器+1时间
//定时10ms,计数器+9216次,十六进制为2400,高八位0x24,低八位0x00
这样的思路应该没问题吧 为什么会有大约2倍的时间误差,数码管跑数大概快了两倍

就灭看懂为什么会有两倍的差距 唉

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top