课程设计报告
(单片机原理和应用)
题目名称 4x4矩阵式键盘
专业班级
学生姓名
学号
指导教师
4x4矩阵式键盘的设计与仿真
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
实验环境
Keil uVision3
proteus 7
功能设计描述
由4x4组成16个按钮矩阵式键盘
按键成功会在7段LED显示该按键的键号
主要知识点
Keil uVision3的使用及调试
proteus 7的使用及调试
键盘接口、LED 显示接口、模拟电路的相关知识2、实现及编程
电路原理图
程序内容
4x4行列式键盘识别
7段数码管输出
汇编源程序
LINE EQU 30H
ROW EQU 31H
VAL EQU 32H
ORG 00H
START: MOV DPTR,#TABLE ;段码表首地址 MOV P2,#00H ;数码管显示初始化LSCAN: MOV P3,#0F0H ;电平,行线置低电平
L1: JNB ,L2 ;逐行扫描
LCALL DELAY50ms ;调用延时,消除抖动
JNB ,L2
MOV LINE,#00H ;存行号
LJMP RSCAN
L2: JNB ,L3
LCALL DELAY50ms
JNB ,L3
MOV LINE,#01H
LJMP RSCAN
L3: JNB ,L4
LCALL DELAY50ms
JNB ,L4
MOV LINE,#02H
LJMP RSCAN
L4: JNB ,L1
LCALL DELAY50ms
JNB ,L1
MOV LINE,#03H
RSCAN: MOV P3,#0FH ; 列线置低电平,行线置高电平C1: JNB ,C2 ;逐列扫描
MOV ROW,#00H ;存列号
LJMP CALCU
C2: JNB ,C3
MOV ROW,#01H
LJMP CALCU
C3: JNB ,C4
MOV ROW,#02H
LJMP CALCU
C4: JNB ,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: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H ; 共阴极LED段码表
DB 7FH,6FH,77H,7CH,39H,5EH,79H,71H
END
3、调试及测试
3.1调试
通过按下4x4行列式键盘的按键,并在7段led显示所按下的键值,如按下F后显示如下图:
3.2出现的问题及解决
当在选7段显示数码管时,由于不知道哪个类型是共阴极的,所以就随便选了一个,以至于在运行的时候数码管没有显示,后给换了另一个类型的,即可。
还有就是在运行时,引脚处的蓝色点代表低电平,红色是高电平,那么我觉得灰色的点按解释应该也是高电平,后去网上查,说是灰色的点代表未接入信号或者为三态。
4、课程设计总结
设计中存在的问题及对策
设计中,由于对器件名称的不熟悉,以至于找到器件比较费时;在编写程序时,不知道如何计算键值,后去网上搜索一些程序来参考。
在此设计基础上还可以增加的功能及设计思路
可在此基础上,可增加简易电子琴的功能。
可加一个喇叭和一个音乐控制开关,并可加一个内部时钟电路和音乐输出电路。
也可用到调节时钟、抢答器、计算器等。
4.2通过本课程设计的收获及感想
通过本次课程设计,懂得了4x4矩阵式键盘接口的工作原理及其的按键识别方法(扫描法);通过自己动手操作,对于消除抖动和计算显示键值有了更深的理解;也对Keil uVision3的使用及调试和proteus 7的使用及调试有了进一步的了解,至少最基本的懂一些;了解了LED显示接口的原理等的相关知识。
觉得自己本次的课程设计过于简单,实现也不难;但观有些设计,电路图过于复杂,即使参考也不是看的很懂,所以就设计一个简单易懂的。