单片机4x4矩阵式键盘的设计与仿真
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
4x4矩阵式键盘的设计与仿真
1、设计原理:
1.1矩阵式键盘工作原理
矩阵式键盘使用于按键数量较多的场合,它由行线与列线组成,按键位于行、列的交叉点上,行、列线分别列接到按键开关的两端。行线通过上拉电阻接到+5V上。无键按下时,行线处于低电平状态,而当有按键按下时,行线电平状态将由与此行线相连的列线电平一样为高电平。这是识别矩阵键盘按键是否被按下的关键所在。一个4x4的行列可以构成一个16按键的键盘。
本次以扫描法来识别按键。在扫描法中分两步处理按键,首先是判断有无键按下,让所有的列线置高电平,检查各行线电平是否有变化,如行线有一个为高,则有键按下。当判断有键按下时,使列线依次变低,其余各列为高电平,读行线,进而判断出具体哪个键被按下。
下表为7段共阴极段码表:
显示字符共阴极段码显示字符共阴极段码
“0”3FH“8”7FH
“1”06H“9”6FH
“2”5BH“A”77H
“3”4FH“b”7CH
“4”66H“C”39H
“5”6DH“d”5EH
“6”7DH“E”79H
“7”07H“F”71H
“灭“00H
1.2实验环境
Keil uVision3
proteus7
1.3功能设计描述
由4x4组成16个按钮矩阵式键盘
按键成功会在7段LED显示该按键的键号
1.4主要知识点
Keil uVision3的使用及调试
proteus7的使用及调试
键盘接口、LED显示接口、模拟电路的相关知识
开始
有键按下吗?
延时
50ms
确定有键按下吗?
确定按键位置
返回
键释放了吗?
键值→p2
N
N
N
Y
Y
Y
2、实现及编程
2.1程序框图
2.2电路原理图
2.3程序内容
4x4行列式键盘识别
7段数码管输出
2.4汇编源程序
LINE EQU30H
ROW EQU31H
VAL EQU32H
ORG00H
START:MOV DPTR,#TABLE;段码表首地址
MOV P2,#00H;数码管显示初始化LSCAN:MOV P3,#0F0H;电平,行线置低电平
L1:JNB P3.0,L2;逐行扫描
LCALL DELAY50ms;调用延时,消除抖动
JNB P3.0,L2
MOV LINE,#00H;存行号
LJMP RSCAN
L2:JNB P3.1,L3
LCALL DELAY50ms
JNB P3.1,L3
MOV LINE,#01H
LJMP RSCAN
L3:JNB P3.2,L4
LCALL DELAY50ms
JNB P3.2,L4
MOV LINE,#02H
LJMP RSCAN
L4:JNB P3.3,L1
LCALL DELAY50ms
JNB P3.3,L1
MOV LINE,#03H
RSCAN:MOV P3,#0FH;列线置低电平,行线置高电平C1:JNB P3.4,C2;逐列扫描
MOV ROW,#00H;存列号
LJMP CALCU
C2:JNB P3.5,C3
MOV ROW,#01H
LJMP CALCU
C3:JNB P3.6,C4
MOV ROW,#02H
LJMP CALCU
C4:JNB P3.7,C1
MOV ROW,#03H
CALCU:MOV A,LINE;根据行号和列号计算键值
MOV B,#04H
MUL AB;A与B相乘后,高位赋给B,低位赋给A
ADD A,ROW
MOV VAL,A;存键值
MOVC A,@A+DPTR;要据键值查段码
MOV P2,A;输出段码显示
LJMP LSCAN
DELAY50ms:MOV R6,#3DH;延时50ms子程序
Lop:MOV R7,#0FFH
DJNZ R7,$
DJNZ R6,Lop
RET
TABLE:DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H;共阴极LED段码表
DB7FH,6FH,77H,7CH,39H,5EH,79H,71H
END
3、调试及测试
3.1调试
通过按下4x4行列式键盘的按键,并在7段led显示所按下的键值,如按下F后显示如下图: