键盘输入一个数字 比如123 按一下确认 用LED显示它的二进制
以下是输入两位数的代码,但是有一定的问题,暂时无法解决。
可以实现一位数的输入输出,两位数输入十位可以被扫描但是个位的扫描出现了问题,暂时无法解决。
#include<reg51.h>
#define LED P0
int main()
{
int flag = 0,j;
int a,key;
LED = 0xff;
key = 0;
P3 = 0xf0;
//第一次按下按键
while(1)
{
key = 0;
P3 = 0xf0;
if((P3 != 0xf0)&&(flag == 0))
{
switch(P3)
{
case 0xe0: key = 0; break;
case 0xd0: key = 1; break;
case 0xb0: key = 2; break;
case 0x70: key = 3; break;
}
P3 = 0x0f;//判断哪一行被按下
switch(P3)
{
case 0x0e: key += 1;while(P3 != 0x0f) P3 = 0x0f;break;
case 0x0d: key += 5;while(P3 != 0x0f) P3 = 0x0f; break;
case 0x0b: key += 9;while(P3 != 0x0f) P3 = 0x0f; break;
case 0x07: key += 13;while(P3 != 0x0f) P3 = 0x0f; break;
}
flag = 1;
a = key*10;
P3 = 0xf0;
LED = 0xff;
}
j = 20000;
while(j--);
//第二次按下按键
if((P3 != 0xf0)&&(flag == 1))
{
switch(P3)
{
case 0xe0: key = 0; break;
case 0xd0: key = 1; break;
case 0xb0: key = 2; break;
case 0x70: key = 3; break;
}
P3 = 0x0f;//判断哪一行被按下
switch(P3)
{
case 0x0e: key += 1;while(P3 != 0x0f); break;
case 0x0d: key += 5;while(P3 != 0x0f); break;
case 0x0b: key += 9;while(P3 != 0x0f); break;
case 0x07: key += 13;while(P3 != 0x0f); break;
}
flag = 0;
LED = ~(0x00+a+key);
P3 = 0xf0;
}
}
return 0;
}