求高手指点 数码管显示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的值。
说的不一定对,仅供参考。