背景: #EDF0F5 #FAFBE6 #FFF2E2 #FDE6E0 #F3FFE1 #DAFAF3 #EAEAEF 默认  
阅读新闻

51单片机教程

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

[日期:2008-04-19] 来源:单片机教程  作者:刘兴国 [字体: ]

在单片机系统中键盘中按钮数量较多时,为了减少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

键盘处理程序就作这么一个简单的介绍,实际上,键盘、显示处理是很复杂的,它一般占到一个应用程序的大部份代码,可见其重要性,但说到,这种复杂并不来自于单片机的本身,而是来自于操作者的习惯等等问题,因此,在编写键盘处理程序之前,最好先把它从逻辑上理清,然后用适当的算法表示出来,最后再去写代码,这样,才能快速有效地写好代码。到本课为止,本站教程暂告一个段落!

上一页1 ..2425262728下一页  GO
【内容导航】
第1页:1课:单片机简叙 第2页:2课:单片机引脚介绍
第3页:3课:单片机存储器结构 第4页:4课:第一个单片机小程序
第5页:5课:单片机延时程序分析 第6页:6课:单片机并行口结构
第7页:7课:单片机的特殊功能寄存器 第8页:8课:单片机寻址方式与指令系统
第9页:9课:单片机数据传递类指令 第10页:10课:单片机数据传送类指令
第11页:11课:单片机算术运算指令 第12页:12课:单片机逻辑运算类指令
第13页:13课:单片机逻辑与或异或指令详解 第14页:14课:单片机条件转移指令
第15页:15课:单片机位操作指令 第16页:16课:单片机定时器与计数器
第17页:17课:单片机定时器/计数器的方式控制字 第18页:18课:单片机的中断系统
第19页:19课:单片机定时器、中断试验 第20页:20课:单片机定时/计数器实验
第21页:21课:单片机串行口介绍 第22页:22课:单片机串行口通信程序设计
第23页:23课:LED数码管静态显示接口与编程 第24页:24课:动态扫描显示接口电路及程序
第25页:25课:单片机键盘接口程序设计 第26页:26课:单片机矩阵式键盘接口技术及程序设计
第27页:27课:关于单片机的一些基本概念 第28页:28课:单片机音乐程序设计

阅读:
录入:gddq

推荐 】 【 打印
上一篇:CAN
下一篇:8253的工作方式
相关新闻      
本文评论       全部评论
  好。。谢谢   (我是毛仔会员 ,05月21日 )
发表评论


点评: 字数
姓名:

  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款