当前位置: 代码迷 >> 单片机 >> 数码管动态扫描,该如何处理
  详细解决方案

数码管动态扫描,该如何处理

热度:200   发布时间:2016-04-28 16:31:19.0
数码管动态扫描
当扫描到百位的时候只能显示0、1、2 然后归零 百位以上一直显示0。麻烦各位帮着看看,谢谢了!
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar t;
uchar j,i;
uchar code arr[]={0xc0,0xf9,0xa4,0xb0,0x99,
0x92,0x82,0xf8,0x80,0x90,};
uchar code ar[]={0xdf,0xef,0xf7,0xfb,0xfd,0xfe};
void delay(uint z);
void water();
main()
{
P1=0;
TMOD=0x01;
TH0=0xd8;
TL0=0xF0;
EA=1;
ET0=1;
TR0=1;
while(1);


}
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=80;y>0;y--);
}
void water()
{
t++;
if(t==1)
{
t=0;

j++;

}


P0=ar[0];P1=arr[j%10]; delay(1);
P0=ar[1];P1=arr[j/10%10];delay(1);
P0=ar[2];P1=arr[j/100%10];delay(1);
P0=ar[3];P1=arr[j/1000%10];delay(1);
P0=ar[4];P1=arr[j/10000%10];delay(1);
P0=ar[5];P1=arr[j/100000%10];delay(1);
i++;
if(i==6)
{
i=0;
}
if(j==1000)
{
j=0;
}
}
void intTIME() interrupt 1
{
TH0=0xd8;
TL0=0xF0;

water();

}

------解决方案--------------------
你的j是uchar变量, 8位的, 当然最大只能到255了。如果你想表示大一点,定义为unsigned long类型。另外全局变量最好不要用这样单字母的名称。
因为一般只有局部变量才用这样简单的名称。否则,形成习惯了,以后你看别人的程序会很痛苦。而且自己的程序也很难调。
------解决方案--------------------
很确定的告诉你,你的变量j定义的太小了。可以试试用unsigned long。如果不够,可以用两个unsigned long变量来实现j的作用。
------解决方案--------------------
楼上的都回答的很好了,以后这种问题不要着急来提问,用你的编译软件仿真,看下你的函数中用到的各个变量在运行的时候都是多少就知道了,或者把各个变量直接送到数码管显示下页可以的。变量的溢出很正常了!!!
  相关解决方案