51单片机数码管动态显示不成功

#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit dula=P2^6;
sbit wela=P2^7;
uchar code table[]=
{ 0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
uchar temp,num,bai,shi,ge,count,aa;
void display(uchar bai,uchar shi,uchar ge);
void init();
void delay(uint z);
void main()
{
init();
if(aa==20)
{
aa=0;
num++;
}
bai=num/100;
shi=num%100/10;
ge=num%10;
while(1)
{
display(bai,shi,ge);
}
}
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x++)
for(y=120;y>0;y++);
}
void display(uchar bai,uchar shi,uchar ge)
{

dula=1;
P1=table[bai];
dula=0;
P1=0xff;

wela=1;
P1=0xfd;
wela=0;
delay(2);

dula=1;
P1=table[shi];
dula=0;
P1=0xff;

wela=1;
P1=0xfa;
wela=0;
delay(2);

dula=1;
P1=table[ge];
dula=0;
P1=0xff;

wela=1;
P1=0xf7;
wela=0;
delay(2);
P1=0x00;
}
void timer0() interrupt 1
{
aa++;

}
void init()
{
aa=0;
dula=0;
wela=0;
aa=0;
num=0;
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
}
只是显示一个0.也不动。。。。

你的这些代码没有放到while(1)中,
if(aa==20)
{
aa=0;
num++;
}
bai=num/100;
shi=num%100/10;
ge=num%10;追问

放进去也不行

追答

你那个定时器里面重新赋值
void main()
{
init();

while(1)
{
display(bai,shi,ge);
}
}
void timer0() interrupt 1
{
aa++;

TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
if(aa==20)
{
aa=0;
num++;
}
bai=num/100;
shi=num%100/10;
ge=num%10;
}

温馨提示:内容为网友见解,仅供参考
无其他回答

为什么我的51单片机数码管温度显示只显示-00000.06而且不能事实...
1.程序问题:程序中可能存在错误或者是不完善的设计,导致温度传感器采集的数据没有正确的进行处理显示,需要检查程序并进行调试对照采集温度数据。2.硬件问题:可能是温度传感器引脚连接的问题导致数据采集不正常,或者是数码管电路连接的问题导致不能够正确地显示。需要检查硬件电路的连接和功能。3. 环境问题...

51单片机数码管动态显示不亮 问题在哪
仿真图中的两个三极管的集电极要接地的,你接成VCC了,这样,三极管是永远也不会导通的,所以,LED就不会亮的。

51单片机数码管动态显示不成功
你的这些代码没有放到while(1)中,if(aa==20){ aa=0;num++;} bai=num\/100;shi=num%100\/10;ge=num%10;

51单片机定时中断导致主程序数码管显示出问题
2,串口发送改为中断方式,这个不细说了,网上有资料。。3,舍弃数码管扫描的软件延时,改用硬件延时(就是把数码管的位的切换也放在定时器中断里完成),保证动态扫描的及时性。这叫单片机的“前后台”编程方式,相当于将动态扫描放在了“后台”,由定时器中断来触发,不触发则不占CPU时间。

51单片机问题:按键,停止计数,数码管不显示数字变化
你的定时中断,是用来显示的,令TR0=0,不可。只能使计数值不变即可。

51单片机数码管显示问题
采用这种方式一般都是所谓的动态扫描显示,往往不止一个数码管。一个数码管8段加一个公共端需要9根口线才能完全显示任意数字,为了节省IO口线,就利用了人眼视觉驻留的原理(就像电影胶片每秒24帧,连续起来播放你觉得没有任何间断),每一位数码管显示一会儿,然后关掉它,再去显示下一个数码管。只要保证...

51单片机控制数码管显示不正常问题,为什么后面4位数码管1234和5678都...
授人以鱼不如授之以渔。先建立程序的一般结构,然后定义一个code数组,里边存放数码管显示0~9的数据,之后定义一个display显示函数,传递参数但不返回参数,然后将传递的参数(1234或5678)分解成4哥单个数,然后依次选择要显示的数码管和数据,紧接消影和简单暂时,这样一个数码管显示就完成了,之后三个...

51单片机数码管显示几秒就熄灭了
题主是否想询问“51单片机数码管显示几秒就熄灭了的原因”?po口数据残留。51单片机数码管不能正常显示,是因为上一次P0口的数据有所残留,与这次输出的数据发生了冲突,导致了数码管的异常显示。P0口输出数据后,延时不正确,过长或是过短都会导致函数的一个异常显示。

我用51单片机实现数码管动态显示时不同步
延时太长,一般0.5~1ms左右。另外,你这是共阴的,程序一般这样:开位选,送字段码,延时1ms,关位选,下一位开位选,送字段码,延时1ms,关位选 。。。CLR P2.0 MOV P0,A LCALL DELAY :1ms SETB P2.0 CLR P2.1 MOV P0,A LCALL DELAY SETB P2.1 ...

利用51单片机的T0定时器控制数码管显示的问题,我想控制他亮的时间,但...
有错:while(1){ if(tt=100) \/\/这里应该是双等号“==”{ tt=0;i++;if(i==16)i=0;……

相似回答