矩阵键盘.docx
《矩阵键盘.docx》由会员分享,可在线阅读,更多相关《矩阵键盘.docx(13页珍藏版)》请在冰豆网上搜索。
![矩阵键盘.docx](https://file1.bdocx.com/fileroot1/2023-1/7/ed1ff615-ce8b-4e4f-a95f-926a95e8c592/ed1ff615-ce8b-4e4f-a95f-926a95e8c5921.gif)
矩阵键盘
摘要
本课题研究的内容是4×4矩阵式键盘识别技术,即以单片机为控制核心设计一个4×4的键盘和LED数码管的显示电路,按顺序键号为“0—F”,并在数码管上显示按下的按键的键号﹙“0—F”之间的值﹚。
本文通过方案设计、电路设计、程序设计、系统仿真四个部分来叙说4×4矩阵式键盘识别技术的具体实现。
其中电路设计对每个单元电路原理有详细解说,程序采用模块化、结构化设计,这样免去了内容的多次重复程序冗长的缺点,同时也更加清晰明了。
整个过程都可以在PROTEUS上进行仿真,并能成功实现该课题所要求的功能。
关键词:
89C51单片机;矩阵式键盘;LED数码管
目录
摘要I
1方案设计1
1.1设计任务1
1.2设计要求1
1.3工程方案1
2电路设计2
2.14×4矩阵式键盘电路2
2.2LED数码显示电路3
2.3单片机最小系统电路3
2.4电路工作原理4
3程序设计5
3.1程序流程图5
3.2程序代码实现8
4系统仿真10
4.1系统仿真方法10
4.2仿真结果分析10
5总结与体会12
参考文献:
12
致谢13
1方案设计
1.1设计任务
设计一个4×4的键盘和LED数码管的显示电路,按顺序键号为“0—F”,并在数码管上显示按下的按键的键号(“0—F”之间的值)。
1.2设计要求
﹙1﹚以单片机为控制核心,实现硬件电路的设计、程序设计,并在PROTEUS平台实现仿真。
﹙2﹚课程设计论文内容正确,结构合理。
1.3工程方案
单片机4×4矩阵式键盘识别技术的实现包括电路设计、程序设计以及系统仿真三大部分,系统总框图见图1.1。
﹙1﹚电路设计
电路设计包括4×4矩阵式键盘电路设计、LED数码管显示电路设计、单片机最小系统电路设计。
首先,分别设计出键盘电路、数码显示电路以及单片机最小系统电路﹙各电路设计详情可见下文的电路设计﹚。
然后,单片机的P3口连接键盘电路,P3口低四位分别连接矩阵键盘的列线,P3口高四位分别连接矩阵键盘的行线,LED数码管显示电路连接在P0口﹙P0.0~P0.6﹚。
电路工作原理图如图2.4所示。
﹙2﹚程序设计
程序采用模块化、结构化设计,同时用延时程序进行延时去抖动在一定程度上实现了软件抗干扰技术。
程序模块有:
主程序、键盘扫描程序、键值显示程序、延时程序。
1主程序:
主程序流程图见图3.1.1。
2键盘扫描程序:
完成对整个矩阵式键盘的扫描并将按下的键的行值暂存于ACC中,列值暂存于R4中。
3键值显示程序:
算出键值,通过查表的方式完成键值在LED数码管上的正确显示。
4延时程序:
通过判断循环语句来实现10MS的延时功能。
﹙3﹚系统仿真
在PROTEUS中画好电路图,然后加载编译通过的程序,点播放按钮开始仿真,详情见下文的系统仿真方法。
图1.1系统总体框图
2电路设计
2.14×4矩阵式键盘电路
4×4矩阵式键盘电路图如图2.1所示,该图中左边的接口连接在单片机的P3口,低四位接列线,高四位接行线。
当要对键盘进行扫描时,可以一行一行进行扫描。
假设要扫描第二行,我们只需先让第二行为低电平,即P3.2为低电平,其余三行为高电平,然后读取列线上的电平,如果第二行的5号键按下,那么第二列的电平变为低电平,即P3.6为低电平,这样每个键按下都会改变P3口的电平,且不同键按下所对应的P3口的电平不同,这样便可以使单片机正确识别有无键按下以及哪个键按下。
图2.1矩阵式键盘电路
2.2LED数码显示电路
数码显示电路图如图2.2所示,该电路由一个LED数码显示管和一个集成电阻器组成。
其中显示块由若干发光二极管组合而成,图中的“8”字形显示块由8个发光二极管组成,每个二极管显示一字段,有共阴极和共阳极两种形式。
图中所用的集成电阻器,就是集成了7个电阻,在此与显示块连接是为了保证显示块能够正常显示。
图左边的端口分别接单片机上P0口的低七位,P0口不同的电平对应数码管不同的显示。
图2.2用的是阳极LED数码管,所以另一脚接电源,若为阴极LED数码管,则要接地。
图2.2LED数码管显示电路
2.3单片机最小系统电路
单片机最小系统由复位电路、时钟电路和单片机AT89C51组成,图如图2.3所示。
﹙1﹚复位电路
复位是单片机的初始化操作,单片机启动运行时,都必须复位。
它的作用是使CPU和系统中其他的部件处于一个确定的初始状态,并从这个状态开始工作。
一般,51系列单片机本身是不能自动复位的,必须配合相应的外部电路才能实现。
﹙2﹚时钟电路
时钟电路用于产生单片机工作所需要的时钟信号,为了保证同步工作方式的实现,电路应在唯一的时钟信号控制下严格地按照时序工作。
﹙3﹚单片机AT89C51
Intel公司的89C51单片机是低功耗的具有4KB在线可编程Flash存储器的单片机。
片内的Flash可允许在线重新编程,也可使用通用非易失性存储器编程。
它将通用CPU和在线可编程Flash集成在一个芯片上,形成了功能强大、使用灵活和具有较高性能价格比的微控制器。
图2.3单片机最小系统电路
2.4电路工作原理
电路原理图如图2.4所示,在整个电路处于工作状态时,内部程序会控制单片机对矩阵式键盘进行不断扫描,当扫描到有按键按下时会改变P3口的值,从而为内部程序提供依据,以此来识别是哪个键按下,然后将数据发到P0口,在LED数码显示管上进行显示键值。
图2.4电路工作原理图
3程序设计
3.1程序流程图
3.1.1主程序流程图
图3.1主程序流程图
3.1.2键盘扫描程序流程图
图3.2键盘扫描程序流程图
3.1.3键值显示程序流程图
图3.3键值显示程序流程图
3.1.4延时程序流程图
图3.4延时程序流程图
3.2程序代码实现
ORG0000H
AJMPMAIN
ORG0030H
MAIN:
LCALLJUDGE;调用键盘扫描程序
LJMPMAIN
//键盘扫描子程序//
JUDGE:
MOVR3,#0EFH;将扫描值放入R3中暂存
MOVR4,#0;R4用于存放列值
KS:
MOVP3,R3;输出行码
MOVA,P3;读取列码
ANLA,#0FH
XRLA,#0FH
JZS2;判断是否有键按下
S1:
ACALLDELAY;延时去抖动
JZS2;再次判断是否有键按下
JNBACC.0,L1;判断第一列是否有键按下
MOVA,#0;行值赋给ACC
ACALLDISPLAY;对键值进行显示
AJMPDK;子程序返回
L1:
JNBACC.1,L2;判断第二列是否有键按下
MOVA,#1
ACALLDISPLAY
AJMPDK
L2:
JNBACC.2,L3;判断第三列是否有键按下
MOVA,#2
ACALLDISPLAY
AJMPDK
L3:
JNBACC.3,L4;判断第四列是否有键按下
MOVA,#3
ACALLDISPLAY
L4:
NOP
AJMPDK
DK:
RET
S2:
ACALLDELAY
MOVA,#00H
MOVA,R3
JNBACC.7,JUDGE;扫描完成则进行下一回合扫描
RLA;扫描未完成则行码左移扫描下一行
MOVR3,A
MOVA,#00H
MOVA,R4
ADDA,#4;扫描下一行时列值加4
MOVR4,A
AJMPKS
//键值显示子程序//
DISPLAY:
ADDA,R4;行值加列值得键值暂存于ACC中
MOVDPTR,#TABLE;DPTR指向表头
MOVCA,@A+DPTR;查表后将键值送入ACC
MOVP0,A
FINAL:
ACALLDELAY
MOVA,P3
ANLA,#0FH
XRLA,#0FH
JNZFINAL;按键未松开则延时等待
RET;按键已松开则返回
//延时子程序//
DELAY:
MOVR6,#10
D1:
MOVR7,#248
DJNZR7,$
DJNZR6,D1
RET
TABLE:
DB0C0H,0F9H,0A4H,0B0H,099H,092H,082H,0F8H;
DB080H,090H,088H,083H,0C6H,0A1H,086H,08EH;
END
4系统仿真
4.1系统仿真方法
整个仿真过程是在PROTEUS平台上完成的。
进入PROTEUS仿真软件主界面后,首先,设置view菜单下的捕捉对齐和system下的颜色、图形界面大小等项目。
然后,通过工具栏中的p命令(从库中选择元件命令),在pickdevices窗口中选择电路所需的元件,放置元件并调整其相对位置,设置好元件参数,并完成元器件间的连线,使电路图尽量美观得体。
接着,选择好程序编译的工具、路径、扩展名等项目后编写程序,程序编译通过后,在source菜单的Add/removesourcefiles命令下,加入单片机硬件电路的对应程序。
最后,通过debug菜单的相应命令仿真程序和电路的运行情况。
4.2仿真结果分析
仿真时可以对矩阵键盘上编号为0~F的十六个键进行操作,每按下一个键,在数码显示管上都会出现相应的键值字形显示。
具体情况如表4.1所示。
表4.1按键键号与显示字形对应表
按键键号
显示字形
按键键号
显示字形
按键键号
显示字形
按键键号
显示字形
0
0
1
1
2
2
3
3
4
4
5
5
6
6
7
7
8
8
9
9
A
A
b
b
C
C
d
d
E
E
F
F
下图4-2、4-3分别为按下键号9和E时的仿真图:
图4.2按下键号9时的仿真图
图4.3按下键号E时的仿真图
其它按键也同样可以看到正确的键号字形显示,由此可知,本课程设计成功实现了所要求实现的功能。
5总结与体会
这次课程设计,老师在4月17号下达了课题任务书,我用了两天的时间思考了本课题并查阅了相关资料,有了大致思路后确定了总体设计方案。
有了方案设计,目的明确了很多,接下来的两天完成了电路设计。
由于我们的课题关于4×4矩阵键盘的设计,在电路设计中,为了把矩阵键盘画的美观花了不少时间,不过整个电路设计过程还顺利。
在这电路设计的过程中,我熟悉了PROTEUS中的各种操作,这使我能够更有效率地完成电路的设计。
接着便是程序设计,我首先确定了整体思路,用子函数来分块实现各种功能,这样我的整个程序的条理非常清晰,同时也节省可很多时间和程序的篇幅,接着就是编写各个子函数。
整个程序比较麻烦的就是键盘扫描程序,我第一次写出来的程序由于跳入弄错了不能循环扫描,后来检查了一阵才查出来,程序中还出现了两处操作码错误,这是由于我对一些指令不是很熟的缘故,以后一定要多动手,多编写程序来熟悉各种指令。
电路和程序都通过之后,仿真过程就很容易了。
最后就是写课程设计报告了,这是对表达能力的一个检查,我花了两天时间到今天才写完。
现在不仅有完成了课程设计的喜悦,更多的是感觉自己学到了不少东西,通过这样一次实践性的练习,让我加深了对单片机的认识,熟练了PROTEUS、WORD的各种操作,进一步提高了自己的表达能力,同时也看到了自己由于缺乏实践而暴露的不足,希望以后能够多进行一些实践性活动来弥补自己的不足。
参考文献:
[1]曹巧媛.单片机原理及应用[M].北京:
电子工业出版社,1997.7.
[2]张洪润,兰清华.单片机应用技术教程[M].北京:
清华大学出版社,1997.11.
[3]李华.MCS-51系列单片机实用接口技术[M].北京航空航天大学出版社,1993.8.
致谢
在这次课程中,电路图和程序的完成还算顺利,就是在撰写课程设计报告时,感觉自己不知从何下手,后来通过老师的指导让我有了大体的思路,于是自己着手写。
自己感觉还不错的时候拿给老师看,但老师很不满意,再一次耐心地帮我指出了不足之处,然后我又再一次加以改进。
正是老师的严格要求和耐心指导,让我学到了更多东西,因此在这里我要对老师表示由衷的感谢。
同时也要感谢我们这组的同学对我工作的支持与配合。