刚学单片机,碰到个问题,通过按钮和复位控制数管数字+1,但是仿真里测试,按钮加0,1,7时正常,但是加到其余次数时,第一位数会变成8,仿真重新画了,程序看了又看,眼拙没发现啥问题,头都懵了,求解救!
#include<reg51.h>
#define uint unsigned int
#define uchar unsigned char
sbit key1=P1^0;
sbit key2=P1^1;
sbit q=P3^0;
sbit b=P3^1;
sbit s=P3^2;
sbit g=P3^3;
uchar tab[]={0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90,0X89};
void delayms(uint k);
void main()
{
uint num;
while(1)
{
if(key1==0)
{
delayms(10);
if(key1==0)
{
while(key1==0)
{
q=1;
P2=tab[num/1000];
delayms(5);
q=0;
b=1;
P2=tab[(num/100)%10];
delayms(5);
b=0;
s=1;
P2=tab[(num/10)%10];
delayms(5);
s=0;
g=1;
P2=tab[num%10];
delayms(5);
g=0;
}
num++;
}
}
if(key2==0)
{
delayms(10);
if(key2==0)
{
while(key2==0)
{
q=1;
P2=tab[num/1000];
delayms(5);
q=0;
b=1;
P2=tab[(num/100)%10];
delayms(5);
b=0;
s=1;
P2=tab[(num/10)%10];
delayms(5);
s=0;
g=1;
P2=tab[num%10];
delayms(5);
g=0;
}
num=0;
}
}
q=1;
P2=tab[num/1000];
delayms(5);
q=0;
b=1;
P2=tab[(num/100)%10];
delayms(5);
b=0;
s=1;
P2=tab[(num/10)%10];
delayms(5);
s=0;
g=1;
P2=tab[num%10];
delayms(5);
g=0;
}
}
void delayms(uint k)
{
uint i,j;
for(i=0;i<k;i++);
for(j=0;j<125;j++);
}