当前位置: 代码迷 >> 单片机 >> 求 数码管显示0加到200 输入仿真软件不能实现
  详细解决方案

求 数码管显示0加到200 输入仿真软件不能实现

热度:304   发布时间:2016-04-28 16:34:27.0
求高手指点 数码管显示0加到200 输入仿真软件不能实现
数码管不能同时显示,只是单个显示,而且不能正确显示数字
请哪位高手给看一下 

C程序如下:

#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
void display(uchar bai,uchar shi,uchar ge);
void init();
sbit dula=P2^6;
sbit weal=P2^7;
uchar aa,temp,bai,shi,ge;
uchar code table[]={
0x3f,0x06,0x5b,0x4f,0x66,
0x6d,0x7d,0x07,0x7f,0x6f};  
void delay(uint x)
{
  uchar i;
while(x--)
{
for(i=0;i>120;i--);
}
}

void main()
{
  init();
  temp=0;
  while(1)
  {
if(aa==20)
{
aa=0;
temp++;
if(temp==200)
{
temp=0;
}
bai=temp/100;
shi=temp%100/10;
ge=temp%10;
  } }
  display(bai,shi,ge);

}
}

void display(uchar bai,uchar shi,uchar ge)
{
  dula=1;
P0=table[bai];
dula=0;  
weal=1;
P0=0xfe;
weal=0;
delay(5);

dula=1;
P0=table[shi];
dula=0;
weal=1;
P0=0xfd;
weal=0;
delay(5);

dula=1;
P0=table[ge];
dula=0;
weal=1;
P0=0xfb;
weal=0;
delay(5);

}

void init()
{
  TMOD=0x01;
  TH0=(65536-50000)/256;
  TL0=(65536-50000)%256;
  EA=1;
  ET0=1;
  TR0=1;


void timer0() interrupt 1
{
  TH0=(65536-50000)/256;
  TL0=(65536-50000)%256;
  aa++; 
}

------解决方案--------------------
你的display(bai,shi,ge);我没看太懂

不过if(aa==20)这个条件是不是会有问题,如果display(bai,shi,ge)函数的执行时间超过一次定时器中断,有可能出现aa永远不等于20的情况吧?

我的表述可能不准确,但根据自己的经验,一般在利用定时器计数的值进行判断时,我用的都是if((aa==20)||(aa==20))或者if((aa>=19)||(aa<=21))类似这样的方式,保证能够检测到aa的值。

说的不一定对,仅供参考。