矩阵式键盘的输入实验
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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