文章目录
前言
矩阵按键是一种通过行列交叉连接的按键阵列,可以节省单片机的IO口资源,用于实现多个按键的输入检测。以下是本文的简要介绍。
一、矩阵按键的硬件连接
1.将矩阵按键按照图1方式进行连接。
图1.矩阵按键硬件连接
2.将单片机IO口与排针JP18相连接。
二、工作原理
1.将矩阵按键通过逐行扫描和逐列检测的方法,判断某个按键是否被按下。
2.将4行4列的矩阵按键可以看成是4行且每行4个独立按键。如:令Y4=0,则当X1=0时,检测到按键“1”,当X2=0时,检测到按键“2”;当X3=0时,检测到按键“3”,当X4=0时,检测到按键“+”。同理,令Y3=0,Y2=0,Y1=0即可。
3.将将4行4列的矩阵按键可以看成是4列且每列4个独立按键。如:令X1=0,则当Y1=0时,检测到按键“1”,当Y2=0时,检测到按键“4”;当Y3=0时,检测到按键“7”,当Y4=0时,检测到按键“F1”。同理,令X2=0,X3=0, X4=0即可。
4.步骤2和3任选一种。
三、代码编写
采用枚举的模式实现矩阵按键的按键值定义。
参考代码如下:
/**
硬件连接:
1.矩阵按键接口与P1口相连
2.LED灯与P2口相连
实现功能:
1.设置矩阵按键值
2.当按下按键1/2/3/4时,分别实现点灯功能
*/
#include <REGX52.H>//头文件调用
void delay(unsigned int Xms);
unsigned char key_scan();
typedef enum //矩阵按键键值枚举
{
MATRIX_KEY_NONE = 0, //无按键按下
MATRIX_KEY_ENTER, //按键“确认”
MATRIX_KEY_ESC, //按键“返回”
MATRIX_KEY_DEC, //按键“-”
MATRIX_KEY_ADD, //按键“+”
MATRIX_KEY_1,
MATRIX_KEY_2,
MATRIX_KEY_3,
MATRIX_KEY_4,
MATRIX_KEY_5,
MATRIX_KEY_6,
MATRIX_KEY_7,
MATRIX_KEY_8,
MATRIX_KEY_9,
MATRIX_KEY_F1,
MATRIX_KEY_F2,
MATRIX_KEY_F3,
}MATRIX_KEY_Enum;
MATRIX_KEY_Enum Matrix_Key_Value;
void main()
{
MATRIX_KEY_Enum state;
while(1)
{
state=key_scan();
switch(state)
{
case MATRIX_KEY_1:P2=0x00;break;
case MATRIX_KEY_2:P2=0xff;break;
case MATRIX_KEY_3:P2=0xf0;break;
case MATRIX_KEY_4:P2=0x0f;break;
default:break;
}
}
}
void delay(unsigned int Xms)
{
unsigned int i,j;
for(i=Xms;i>0;i--)
for(j=124;j>0;j--);
}
unsigned char key_scan()
{
P1=0xfe;
if(P1_7==0) delay(20);Matrix_Key_Value=MATRIX_KEY_1;
if(P1_6==0) delay(20);Matrix_Key_Value=MATRIX_KEY_4;
if(P1_5==0) delay(20);Matrix_Key_Value=MATRIX_KEY_7;
if(P1_4==0) delay(20);Matrix_Key_Value=MATRIX_KEY_F1;
P1=0xfd;
if(P1_7==0) delay(20);Matrix_Key_Value=MATRIX_KEY_2;
if(P1_6==0) delay(20);Matrix_Key_Value=MATRIX_KEY_5;
if(P1_5==0) delay(20);Matrix_Key_Value=MATRIX_KEY_8;
if(P1_4==0) delay(20);Matrix_Key_Value=MATRIX_KEY_F2;
P1=0xfb;
if(P1_7==0) delay(20);Matrix_Key_Value=MATRIX_KEY_3;
if(P1_6==0) delay(20);Matrix_Key_Value=MATRIX_KEY_6;
if(P1_5==0) delay(20);Matrix_Key_Value=MATRIX_KEY_9;
if(P1_4==0) delay(20);Matrix_Key_Value=MATRIX_KEY_F3;
P1=0xf7;
if(P1_7==0) delay(20);Matrix_Key_Value=MATRIX_KEY_ADD;
if(P1_6==0) delay(20);Matrix_Key_Value=MATRIX_KEY_DEC;
if(P1_5==0) delay(20);Matrix_Key_Value=MATRIX_KEY_ESC;
if(P1_4==0) delay(20);Matrix_Key_Value=MATRIX_KEY_ENTER;
return Matrix_Key_Value;
}
总结
实现了矩阵按键按键值的定义,通过枚举的方式,对矩阵按键值有更清晰的显示,便于后期维护。
标签:P1,MATRIX,51,无标题,Key,单片机,KEY,按键,Matrix From: https://blog.csdn.net/weixin_52748093/article/details/144703327