(玩电子) 电子技术学习与研究
当前位置单片机教程网 >> 基础教程 >> 浏览文章

26课:矩阵式键盘接口技术及程序设计

作者:佚名   来源:本站原创   点击数:x  更新时间2007年08月14日   字体

在单片机系统中键盘中按钮数量较多时为了减少I/O口的占用常常将按钮排列成矩阵形式如图1所示在矩阵式键盘中每条水较和垂直线在交叉处不直接连通而是通过一个按钮加以连接这样一个端口如P1口就能组成4*4=16个按钮比之直接将端口线用于键盘多出了一倍而且线数越多区别越明显比如再多加一条线就能组成20键的键盘而直接用端口线则只能多出一键9键由此可见在需要的键数比较多时采用矩阵法来做键盘是合理的
 


<单片机矩阵式键盘接口技术及编程接口图>

矩阵式结构的键盘显然比直接法要复杂一些识别也要复杂一些上图中列线通过电阻接正电源并将行线所接的单片机的I/O口作为输出端而列线所接的I/O口则作为输入这样当按钮没有按下时所有的输出端都是高电平代表无键按下行线输出是低电平一旦有键按下则输入线就会被拉低这样通过读入输入线的状态就可得知是否有键按下了具体的识别及编程办法如下所述

矩阵式键盘的按钮识别办法

确定矩阵式键盘上何键被按下介绍一种“行扫描法”

行扫描法 行扫描法又称为逐行或列扫描查询法是一种最常用的按钮识别办法如上图所示键盘介绍过程如下

判断键盘中形键按下 将全部行线Y0-Y3置低电平然后检测列线的状态只要有一列的电平为低则表示键盘中有键被按下而且闭系键位于低电较与4根行线相交叉的4个按钮之中若所有列线均为高电平则键盘中无键按下

判断闭合键所在的位置 在确认有键按下后即可进入确定具体闭合键的过程其办法是来将行线置为低电平即在置某根行线为低电平时其它线为高电平在确定某根行线位置为低电平后再逐行检测各列线的电平状态若某列为低则该列线与置为低电平的行线交叉处的按钮就是闭系按钮

下面给出一个具体的例程

图仍如上所示8031单片机的P1口用作键盘I/O口键盘的列线接到P1口的低4位键盘的行线接到P1口的高4位列线P1.0-P1.3直接有4个上拉电阻到正电源+5V并把列线P1.0-P1.3设置为输入线行线P1.4-P.17设置为输出线4根行线和4根列线形成16个相交点

检测当前是否有键被按下检测的办法是P1.4-P1.7输出全“0”读取P1.0-P1.3的状态若P1.0-P1.3为全“1”则无键闭合不然有键闭合

去除键抖动当检测接键按下后延时一段时间再做下一步的检测判断

若有键被按下应识别出是哪一个键闭合办法是对键盘的行线进行扫描P1.4-P1.7按下述4种组合来输出

P1.7 1 1 1 0

P1.6 1 1 0 1

P1.5 1 0 1 1

P1.4 0 1 1 1

在每组行输出时读取P1.0-P1.3若全为“1”则表示为“0”这一行没有键闭合不然有键闭合由此得到闭合键的行值和列值然后可采用计算法或查表法将闭合键的行值和列值转换成所定义的键值

为了保证键每闭合一次CPU仅作一次处理必须却除键释放时的抖动


 

单片机矩阵式键盘接口技术及编程

键盘扫描程序

从以上分析得到单片机键盘扫描程序的流程图如图2所示程序如下

SCAN: MOV P1,#0FH

MOV A,P1

ANL A,#0FH

CJNE A,#0FH,NEXT1

SJMP NEXT3

NEXT1: ACALL D20MS

MOV A,#0EFH

NEXT2: MOV R1,A

MOV P1,A

MOV A,P1

ANL A,#0FH

CJNE A,#0FH,KCODE;

MOV A,R1

SETB C

RLC A

JC NEXT2

NEXT3: MOV R0,#00H

RET

KCODE: MOV B,#0FBH

NEXT4: RRC A

INC B

JC NEXT4

MOV A,R1

SWAP A

NEXT5: RRC A

INC B

INC B

INC B

INC B

JC NEXT5

NEXT6: MOV A,P1

ANL A,#0FH

CJNE A,#0FH,NEXT6

MOV R0,#0FFH

RET

键盘处理程序就作这么一个简单的介绍实际上键盘显示处理是很复杂的它一般占到一个应用程序的大部份代码可见其重要性但说到这种复杂并不来自于单片机的本身而是来自于操作者的习惯等等问题因此在编写键盘处理程序之前最好先把它从逻辑上理清然后用实的算法表示出来最后再去创码这样才能快速行地写好代码到本课为止本站教程暂告一个段落请继续关注http://www.hr-chem.com的单片机教程行大家的关心和支持教程中如果有不对之处也希望大家在评论中提出我们会及时正更错误的.

发表评论告诉好友收藏此文关闭窗口

文章评论

Ƶ