新手求教:为什么这个键盘程序只能控制一个数码管亮
#include<reg52.h>#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
uchar aa=0,bb,temp,num;
uchar code table[10]=
{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //亮什么
uchar code W[8]= {0,1,2,3,4,5,6,7}; //谁亮
void delay(uint x);
void main()
{
P0=0x00; //先把所有数码管灯熄灭
while(1)
{
P1=0xfe; //控制第一列按键让第三个数码显示相应数字,出现问题:在后面有控制第二列按键的程序
temp=P1; //如果先按下第一列的某一按键,则之后在按第二列的就没用,只保留第一列出现的数字。
temp=temp&0xf0; //同理,先按下第二列效果同上。想请教一下大家,这个应该怎么改才
while(temp!=0xf0) //能在按下第一列后,显示相应的数字,并且在按下第二列的数字后,也显示
{ //相应的数字,且两个数字皆保留呢?
delay(5);
temp=P1;
temp=temp&0xf0;
while(temp!=0xf0)
{
temp=P1;
switch(temp)
{
case 0xee:num=1;
break;
case 0xde:num=5;
break;
case 0xbe:num=3;
break;
case 0x7e:num=4;
break;
}
P2=W[2];
P0=table[num];
}
}
P1=0xfd; /*这一段控制第二列按键
temp=P1; 让第四个数码管亮*/
temp=temp&0xf0;
while(temp!=0xf0)
{
delay(5);
temp=P1;
temp=temp&0xf0;
while(temp!=0xf0)
{
temp=P1;
switch(temp)
{
case 0xed:num=1;
break;
case 0xdd:num=5;
break;
case 0xbd:num=3;
break;
case 0x7d:num=4;
break;
}
P2=W[3];
P0=table[num];
}
}
}
}
void delay(uint x)
{
uint i,j;
for(i=500;i>0;i--);
for(j=x;j>0;j--);
}
HOT-51原理图.pdf
(334.39 KB)