4x4矩阵键盘识别与应用指南.pdfVIP

  • 0
  • 0
  • 约2.37千字
  • 约 3页
  • 2026-01-15 发布于北京
  • 举报

4x4矩阵键盘识别

在单片机应用系统中,键盘是人机不可缺少的组件之一。在按键比较少时,我

们可以一个单片机I/O口接一个按键,但当按键需要很多,I/O资源又比较紧张时,使用矩阵

式键盘无疑是选择。

4x4矩阵键盘是运用得最多的键盘形式,也是单片机必需掌握的一种键盘识别

技术,下面我们就以实例来说明一下4x4矩阵键盘的识别方法。如下图所示,我们把按键接

成矩阵的形式,这样用8个I/O口就可以对16个按键进行识别了,节省了I/O口资源。

我们的识别思路是这样的,初使化时我们先让P1口的低四位输出低电平,高四位

输出即让P1口输出0xF0。扫描键盘的时候,我们读P1口,看P1是否还为0xF0,如果

仍为0xF0,则表示没有按键按下;如果不0xF0,我们先等待10ms左右,再读P1口,再次确

认是否为0xF0,这是为了防止是抖动干扰造成错误识别,如果不是那就说明是真的有按键

按下了,我们就可以读键码来识别到底是哪一个键按下了。

识别的过程是这样的,初使化时我们让P1口的低四位输出低电平,高四位输出高

电平,确认了真的有按键按下时,我们首先读P1口的高四位,然后P1口输出0x0F,即让P1

口的低四位输出高四位输出低电平,然后读P1口的低四位,最后我们把高四位读

到的值与低四位读到的值做或运算就得到了该按键的键码。就可以知道是哪个键按下了。

以0键为例,初使化时P1输出0xF0,当0键按下时,我们读高四位的状态应为1110,即

P1为0xE0,然后让P1输出0x0F,读低四位产状态应为0111,即P1为0x07,让两次读数相与得

0xE7。

现在我们在P0口和P2口分别接一个共阳极的数码管,用来显示我们按下去的键的

键值,P0口接的是个位,P2口接的是十位。如0键按下显示00,1键按下显示01,15键按下

显示15……,实现的程序如下:

#includereg52.h

unsignedcharnum[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//共阳极LED

段码0~9

unsignedchark;

/*************延时Xms*****************/

voidDelay_nms(unsignedintn)//延时程序

{unsignedinti,j;

for(i=n;i0;i--)

for(j=112;j0;j--);

}

voidGetKey()//键盘扫描函数,用于识别哪一个键按下,并键值

{unsignedcharX,Y,Z;

P1=0x0f;//先对P3置数行扫描

if(P1!=0x0f)//判断是否有键按下

{

Delay_nms(10);//延时,软件去干扰

if(P1!=0x0f)//确认按键按下X=P3;

{

X=P10x0f;//保存行扫描时有键按下时状态

P1=0xf0;//列扫描

Y=P10xf0;//保存列扫描时有键按下时状态

Z=X|Y;//取出键值

switch(Z)//判断键值(那一个键按下)

{

case0xe7:k=0;break;//对键值赋值

case0xd7:k=1;break;

case0xb7:k=2;break;

case0x77:k=3;break;

case0xeb:k=4;break;

case0xdb:k=5;break;

case0xbb:k=6;break;

case0x7b:k=7;break;

case0xed:k=8;break;

case0xdd:k=9;break;

case0xbd:k=10;break;

case0x7d:k=11;break;

case0xee:k=12;break;

case0xde:k=13;b

您可能关注的文档

文档评论(0)

1亿VIP精品文档

相关文档