矩阵式键盘的输入实验

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验六、矩阵式键盘的输入实验

实验目的

学习矩阵式键盘工作原理

学习矩阵式键盘接口的电路设计和程序设计

实验设备

仿真器

单片机最小系统实验教学模块

矩阵式键盘实验模块

动态扫描数码管显示模块

实验要求

要求实现:在矩阵式键盘中的某个键被按下时,8位LED动态显示器上最低位显示该键对应的字符,以前的字符向高位推进一位

实验原理

矩阵式由行线和列线组成,按键位于行、列的交叉点。一个4*4 的行列结构可以构成一个16个按键的键盘。很明显,在按键数量较多的场合,矩阵式键盘与独立式键盘相比,要节省很多的I/O端口

矩阵式键盘工作原理

按键是设置在行列的交接点上,行列分别连接到按键开关的两端。行线通过上拉电阻接到+5V上。平时无按键按下时,行线处于高电平状态,而当有按键按下时,行线电平状态将由与此行线相连的列线电平决定。列线电平如果为低,则行线电平为低,列线电平如果为高,则行线电平则为高。这一点是识别矩阵式键盘是否被按下的关键所在。由于行列式键盘中行列线为多键共用,各按键均影响该键所在行和列的电平。因此,各按键彼此将相互发生影响,所以必须将行列线信号配合起来并作适当的出来,才能确定闭合键的位置。

键被按下时,与此键相连的行线电平将由与此相连的列线电平决定,而行线电平在物件按显示处于高电平状态。如果让所有列线出于高电平时没法识别出按键的,现在发过来,让所有列线处于低电平,很明显,按下的键所在行电平将也被置为低电平,根据此变化,便能判定该行一定又键被按下。但我们还不能确定是这一行的哪个键被按下。所以,为了进一步判定到底是哪一列的键被按下,可在某一时刻只让一列线处于低电平。而其余所有列线处于高电平。当第一列为低电平,其余各列为高电平时,因为键4被按下,所以死一行扔处于高电平状态;当第二列为低电平,其余各列为高电平时,同样哦我们会发现第一行仍处于高电平状态。知道让第四列为低电平,其余各列为高电平时,因为是4号键被按下,所以第一行的高电平状态转换到第四列所处的低电平,据此,我们确信第一行第四列交叉点处的按键即4号键被按下。

识别键盘有无键被按下的方法是:让所有列线均为低电平,检查各行线电平是否有低电

平,如果有。则说明有键被按下,如果没有,则说明无键被按下

识别具体按键的方法是:逐列置零电平,并检查各行线电平的变化,如果某行电平由高电平变为低电平,则可确定此行此列交叉点处按键被按下。

请注意由于键盘模块做了特殊的处理,是的矩阵式键盘的行线输出的电平状态与前卖弄所述正好相反。即,行线的输出电平,在平时为低电平,有键按下时,该键对应的行线输出为高电平。

电路图

KEYVALUE EQU 40H

DISPPTR EQU 37H

FIRSTPTR EQU 30H

ORG 0000H

AJMP INIT

ORG 0030H

INIT:

MOV R0,#FIRSTPTR

MOV R1,#08H

INITLOOP:

MOV A,#10H

MOV @R0,A

INC R0

DJNZ R1,INITLOOP

LOOP:

MOV P2,#00H

MOV R4,#04H

MOV R5,#0EFH KEY:

MOV A,R5

MOV P1,A

MOV A,P1

MOV KEYVALUE,A

ORL A,#0F0H

CJNE A,#0F0H,KEY_ON

ACALL DISP

MOV A,R5

RL A

MOV R5,A

DJNZ R4,KEY

JMP LOOP

KEY_ON:

ACALL DL10MS

MOV A,P1

CJNE A,KEYVALUE,KEY K1:

CJNE A,#0E1H,K2

LCALL MOVDISP

MOV FIRSTPTR,#0

ACALL DISP

LJMP LOOP

K2:

CJNE A,#78H,K3

LCALL MOVDISP

MOV FIRSTPTR,#0

ACALL DISP

LJMP LOOP

K3:

CJNE A,#74H,K4

LCALL MOVDISP

MOV FIRSTPTR,#0

ACALL DISP

LJMP LOOP

K4:

CJNE A,#72H,K5

LCALL MOVDISP

MOV FIRSTPTR,#0

ACALL DISP

LJMP LOOP

K5:

CJNE A,#071H,K6

LCALL MOVDISP

MOV FIRSTPTR,#0

ACALL DISP

LJMP LOOP

K6:

CJNE A,#0B8H,K7

LCALL MOVDISP

MOV FIRSTPTR,#0

ACALL DISP

LJMP LOOP

K7:

CJNE A,#0B4H,K8

LCALL MOVDISP

MOV FIRSTPTR,#0

ACALL DISP

LJMP LOOP

K8:

CJNE A,#0B2H,K9

LCALL MOVDISP

MOV FIRSTPTR,#0

ACALL DISP

LJMP LOOP

K9:

CJNE A,#0B1H,K10

LCALL MOVDISP

MOV FIRSTPTR,#0

ACALL DISP

LJMP LOOP

K10:

CJNE A,#0D8H,K11

LCALL MOVDISP

MOV FIRSTPTR,#0

ACALL DISP

LJMP LOOP

K11:

CJNE A,#0D4H,K12

LCALL MOVDISP

MOV FIRSTPTR,#0

ACALL DISP

LJMP LOOP

K12:

CJNE A,#0D2H,K13

相关文档
最新文档