|
本帖最后由 f181912356 于 2016-9-17 09:58 编辑
本人刚按例程写了一段按键控制数码管加减显示0-99数字的问题,现出现十位数字有的能显示,有的显示不出来的问题,请高手指教,具体代码如下:
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit key1=P1^0;
sbit key2=P1^1;
sbit key3=P1^2;
sbit key4=P1^3;
sbit dula=P2^0;
sbit wei=P2^1;
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
uchar num;
void delay(uint ms)
{
uchar j;
while(ms--)
for(j=110;j>0;j--);
}
void keyscan()
{
if(key1==0)
{
delay(10);
if(key1==0)
{
num++;
if(num==99)
num=0;
while(!key1);
}
}
if(key2==0)
{
delay(10);
if(key2==0)
{
if(num==0)
num=99;
num--;
while(!key2);
}
}
if(key3==0)
{
delay(10);
if(key3==0)
{
num=99;
while(!key3);
}
}
if(key4==0)
{
delay(10);
if(key4==0)
{
num=0;
while(!key4);
}
}
}
void disp(uchar num1)
{
uchar shi,ge;
shi=num1/10;
ge=num1%10;
wei=1;
P0=0XFE;
wei=0;
dula=1;
P0=table[shi];
dula=0;
delay(5);
wei=1;
P0=0XFD;
wei=0;
dula=1;
P0=table[ge];
dula=0;
delay(5);
}
void main()
{
while(1)
{
keyscan();
disp(num);
}
}
单片机电路图如附件,仿真时十位不能显示的状况如下
|
|