矩阵键盘不名思意就是按键组成的矩阵,实物图如图:
矩阵键盘的内部连接和单片机的独立键盘类似,通过快速扫描检测按键是否被按下,扫描时可以按列进行也可以按行进行,如下图是内部连接图:
接下来利用矩阵键盘做一个小项目:每按下一次按键会在LCD1602显示屏上显示该按键的标号。
由于已经学过代码模块化,这次要将代码模块化,大致需要以下函数及代码段:延时函数,自定义按键扫描函数,LCD1602函数库,主函数。
#include <REGX52.H>
#include "Delay.h"
unsigned char jz()
{
unsigned char jp=0;
P1=0xFF;
P1_3=0;
if(P1_7==0){Delay(20);while(P1_7==0);Delay(20);jp=1;}
if(P1_6==0){Delay(20);while(P1_6==0);Delay(20);jp=5;}
if(P1_5==0){Delay(20);while(P1_5==0);Delay(20);jp=9;}
if(P1_4==0){Delay(20);while(P1_4==0);Delay(20);jp=13;}
P1=0xFF;
P1_2=0;
if(P1_7==0){Delay(20);while(P1_7==0);Delay(20);jp=2;}
if(P1_6==0){Delay(20);while(P1_6==0);Delay(20);jp=6;}
if(P1_5==0){Delay(20);while(P1_5==0);Delay(20);jp=10;}
if(P1_4==0){Delay(20);while(P1_4==0);Delay(20);jp=14;}
P1=0xFF;
P1_1=0;
if(P1_7==0){Delay(20);while(P1_7==0);Delay(20);jp=3;}
if(P1_6==0){Delay(20);while(P1_6==0);Delay(20);jp=7;}
if(P1_5==0){Delay(20);while(P1_5==0);Delay(20);jp=11;}
if(P1_4==0){Delay(20);while(P1_4==0);Delay(20);jp=15;}
P1=0xFF;
P1_0=0;
if(P1_7==0){Delay(20);while(P1_7==0);Delay(20);jp=4;}
if(P1_6==0){Delay(20);while(P1_6==0);Delay(20);jp=8;}
if(P1_5==0){Delay(20);while(P1_5==0);Delay(20);jp=12;}
if(P1_4==0){Delay(20);while(P1_4==0);Delay(20);jp=16;}
return jp;
}
此代码是用来检测按键是否被按下,方法是通过一列一列扫描按键是否按下,虽然代码有些多但是思路清晰,通俗易懂。
接下来是主函数:
通过调用其他函数来实现功能
如图是效果图:当按键六按下后显示屏中会显示它的标号即06