首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 单片机 >

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

2012-03-16 
求高手指点 数码管显示0加到200 输入仿真软件不能实现数码管不能同时显示,只是单个显示,而且不能正确显示

求高手指点 数码管显示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的值。

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

热点排行