读书人

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

发布时间: 2012-03-16 16:34:56 作者: rapoo

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

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

读书人网 >单片机

热点推荐