当前位置:文档之家› 矩阵式键盘的输入实验

矩阵式键盘的输入实验

实验六、矩阵式键盘的输入实验
实验目的
学习矩阵式键盘工作原理
学习矩阵式键盘接口的电路设计和程序设计
实验设备
仿真器
单片机最小系统实验教学模块
矩阵式键盘实验模块
动态扫描数码管显示模块
实验要求
要求实现:在矩阵式键盘中的某个键被按下时,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
LCALL MOVDISP
MOV FIRSTPTR,#0
ACALL DISP
LJMP LOOP
K13:
CJNE A,#0D1H,K14
LCALL MOVDISP
MOV FIRSTPTR,#0
ACALL DISP
LJMP LOOP
K14:
CJNE A,#0E8H,K15
LCALL MOVDISP
MOV FIRSTPTR,#0
ACALL DISP
LJMP LOOP
K15:
CJNE A,#0E4H,K16
LCALL MOVDISP
MOV FIRSTPTR,#0
ACALL DISP
LJMP LOOP
K16:
CJNE A,#0E1H,ERROR
ERROR:LCALL KEY DISP:MOV P2,#00H DISPLOOP2:MOV R2,#8 DISPLOOP0:MOV R1,#01H MOV R0,#30H
MOV DPTR,#TAB DISPLOOP1: MOV A,@R0 MOVC A,@A+DPTR
MOV P0,A
MOV P2,R1
LCALL DL1MS
INC R0
MOV A,R1
RL A
MOV R1,A
DJNZ R2,DISPLOOP1
RET
DL1MS:
L1:MOV R5,250
NOP
DJNZ R5,L1
DL10MS:
MOV R6,10
L2:MOV R5,250
NOP
DJNZ R5,L2
DJNZ R6,L2
MOVDISP:MOV R0,#DISPPTR
MOV R1,#DISPPTR
MOV R2,#7
MOV_LP:DEC R0
MOV A,@R0
MOV @R1,A
DEC R1
DJNZ R2,MOV_LP
RET
TAB: DB 03H,9FH,25H,0DH,99H,49H,41H,1FH DB 01H,09H,11H,0C1H,63H,85H,61H,71H
DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH
DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH
END
实验总结:。

相关主题