#include "reg52.h" typedef unsigned int u16; //??????????? typedef unsigned char u8; u8 KeyValue; //?????????? u8 NixieTable[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//??0~F?? void delay(u16 i) { while(i--); } void KeyDown(void) { char a=0; P1=0x0f; if(P1!=0x0f)//???????? { delay(1000);//??10ms???? if(P1!=0x0f)//?????????? { P1=0XF0;//? switch(P1) { case(0Xe0): KeyValue=0;break; case(0Xd0): KeyValue=1;break; case(0Xb0): KeyValue=2;break; case(0X70): KeyValue=3;break; } P1=0X0F;//? switch(P1) { case(0X0e): KeyValue=KeyValue;break; case(0X0d): KeyValue=KeyValue+4;break; case(0X0b): KeyValue=KeyValue+8;break; case(0X07): KeyValue=KeyValue+12;break; } while((a<50)&&(P1!=0xf0)) //???????? { delay(1000); a++; } } } } void main() { while(1) { KeyDown(); //?????? P0=~NixieTable[KeyValue]; } } 按键改成反过来
时间: 2023-08-26 14:15:45 浏览: 144
如果想要将按键的检测反过来,可以按照以下步骤进行修改:
1. 将P1的初始值设为0xF0,表示检测列。将P1的检测顺序也进行反转,先检测高4位,再检测低4位。
2. 将P1的判断条件改为==0xF0,表示检测列是否有按键按下。
3. 将P1的赋值操作改为P1=0x0F,表示检测行。
4. 将P1的检测顺序也进行反转,先检测低4位,再检测高4位。
5. 将KeyValue的赋值操作改为KeyValue=15-KeyValue,表示将按键编号取反。
修改后的代码如下所示:
#include "reg52.h"
typedef unsigned int u16; //定义数据类型
typedef unsigned char u8;
u8 KeyValue; //按键值
u8 NixieTable[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//数码管0~F的编码表
void delay(u16 i)
{
while(i--);
}
void KeyDown(void)
{
char a=0;
P1=0xF0; //检测列
if(P1==0xF0) //检测列是否有按键按下
{
delay(1000); //延时10ms
if(P1==0xF0) //再次检测列是否有按键按下
{
KeyValue=0xFF; //表示没有按键按下
}
else
{
P1=0x0F; //检测行
switch(P1) //检测低4位
{
case(0x0E): KeyValue=0;break; //按键1
case(0x0D): KeyValue=1;break; //按键2
case(0x0B): KeyValue=2;break; //按键3
case(0x07): KeyValue=3;break; //按键4
}
P1=0xF0; //检测列
switch(P1) //检测高4位
{
case(0xE0): KeyValue=KeyValue+12;break; //按键1
case(0xD0): KeyValue=KeyValue+8;break; //按键2
case(0xB0): KeyValue=KeyValue+4;break; //按键3
case(0x70): KeyValue=KeyValue;break; //按键4
}
KeyValue=15-KeyValue; //将按键编号取反
while((a<50)&&(P1!=0xF0)) //等待按键释放
{
delay(1000);
a++;
}
}
}
}
void main()
{
while(1)
{
KeyDown(); //按键检测
if(KeyValue!=0xFF) //如果有按键按下
{
P0=~NixieTable[KeyValue]; //在数码管上显示按键值
}
}
}
阅读全文