ImageVerifierCode 换一换
格式:DOCX , 页数:16 ,大小:256.43KB ,
资源ID:16749854      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/16749854.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(矩阵键盘的设计文档格式.docx)为本站会员(b****3)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

矩阵键盘的设计文档格式.docx

1、3.1程序系统 33.2判别是否有键按下程序 43.3识别哪个键按下程序 63.4显示程序 73.5延时程序 84 仿真结果分析 95 汇编程序 126 课程设计总结与体会 16参考文献资料1 问题描述(1)设计一个44矩阵式键盘,以实现矩阵式键盘的程序识别。(2)用单片机的并行口P1连接44矩阵键盘,并以单片机的P1.0P1.3各管脚作输入线,以单片机的P1.4P1.7各管脚作输出线,在数码管上显示每个按键 “0F”的序号。键盘中对应按键的序号排列如下图 图1.1 键盘序号图2 设计原理2.1 电路硬件说明(1)在“单片机系统”区域中,把单片机的P1.0P1.7端口通过8联拨动拨码开关JP3

2、连接到“44行列式键盘”区域中的M1M4,N1N4端口上。即将P1口作为整个系统的输入接口电路 。 (2)在“单片机系统”区域中,把单片机的P0.0P0.6端口通过上拉电阻连接到“静态数码显示模块”区域中的任何一个ag端口上;作为整个系统的并且P0.0对应着a,P0.1对应着b,P0.6对应着g。 (3)此实验采用的是共阴极LED显示块,只有当ag端口输入高电平时才有效,即显示块中的对应的发光二极管才发光,低电平时不显示,通过ag端口的不同输入使显示器显示不同的字符。 (4)系统中的上拉电阻RP1和RP2是限流电阻,起到限流的作用,阻值一般在100300欧姆之间。2.2 矩阵式键盘的工作原理(

3、1)CPU先使行线平P1.4线为低,其余行线P1.5-P1.7为高,即P1.4所在的行线为“0”状态,其余行为“1状态。(2)CPU读入输入缓冲器的状态,以确定哪条列线为“0”状态,此时,若P1.0为“0”状态,则为0键按下;若P1.1为“0”状态,则为“1”键按下;以此类推。(3)若输入缓冲器的状态全部为“1”状态,则CPU继续使使行线P1.5为低,其余行线为高。再读入输入缓冲器的状态,以确定那条列线为“0”状态,从而判断是哪个键压下。(4)判断出哪个键压下之后,程序转入相应的键处理程序2.3 程序设计内容 (1)44矩阵键盘识别处理 。 (2)每个按键都有它的行值和列值,行值和列值的组合就

4、是识别这个按键的编码。矩阵的行线和列线分别通过两并行接口和CPU通信。键盘的一端(列线)通过电阻接VCC,而接地是通过程序输出数字“0”实现的。键盘处理程序的任务是:确定有无键按下,判断哪一个键按下,键的功能是什么?还要消除按键在闭合或断开时的抖动。两个并行口中,一个输出扫描码,使按键逐行动态接地;另一个并行口输入按键状态,由行扫描值和回馈信号共同形成键编码而识别按键,通过软件查表,查出该键的功能。2.4 硬件电路设计及电路图硬件电路设计图如下图所示。把单片机的P1.0P1.7端口通过8联拨动拨码开关连接到“44行列式键盘”,其中P1.0-P1.3作为列线,P1.4-P1.7作为行线,把单片机

5、的P0.0P0.6端口连接到共阴极“静态数码显示模块”区域中对应的ag端口上;系统首先通过CPU对全部键盘进行扫描,即把第一根行线置为“0”状态,其余行线置于“1”状态,读入输入缓冲器的状态,若其状态全为“1”表明该行无键按下,再将第二根行线置为“0”状态,同样读入输入缓冲器的状态,如其状态也全为“1”,则置第一根行线置为“0”状态,以此类推。如读入输入缓冲器的状态不全为“1”,确定哪一根列线为“0”状态,当某个键的行线和列线都为“0”状态时,表明该键按下。最后通过显示程序将该键的序号显示出来。 图2.1 硬件电路图3 程序说明及其流程图3.1系统程序(1)说明:该图是一个总的系统框图,首先C

6、PU读入初始状态,CPU先让某一行线为低,其他行线为高,同时列线都为高,通过对按键进行扫描,也就是通过按键后判断列线是否为0来判断是否有键按下,有的话就继续执行程序识别判断是哪个键按下,然后通过P0口查询显示该数符,如果没有按键按下就返回程序继续扫描直到有键按下时才停止扫描。(2)流程图3.2 判别是否有键按下程序该图表示的是将P1口置初值为FFH,MOV P1,#0FFH,然后CLR P1.4,通过读入输入缓冲器的状态,通过屏蔽A的高四位后和0FH进行异或来判断赋值为0的这一行是否有键按下,如无键按下,重置P1为FFH,CLR P1.5,如仍无键按下,就依次CLR P1.6、 CLR P1.

7、7。直到有键按下,为去抖动,就延时10ms,再次确认是否真的有键按下,如果是的话就根据当前状态识别按键。如一次全部的扫描仍没有键按下,就回到开始处继续扫描。3.3 识别哪个键按下程序本图是以第2行有键按下时判哪一个键按下的流程图为例的。当将第二行的行线置为0,其余行线置于1的情况下,读入输入缓冲器的状态,不为全0,则说明该行有键按下,此时就可以将A的值送给P1,屏蔽A的高四位,依次与OEH、0BH、0DH、07H进行比较来确定按下的键号是4、5、6还是7,然后送至P0口显示。执行完显示程序后再转向程序的开始处3.4 显示程序判断有键按下并且识别出是哪个键按下时,接着就通过显示程序将其通过数码管

8、显示出来。该实验用的是查表程序来实现相应键的显示的。将定义字伪指令地址赋给DPTR,通过指令 MOVC A,A+DPTR 查到对应字符的显示码送给A,再由A送给P0,最后由显示器显示出来。显示器字形与字段的对应关系如下:表3.1 显示器字形与字段对应关系表3.5 延时程序为防止抖动,使键盘识别失误,于是我们运用一个10ms的延时程序使之产生10ms的定时,对键盘再一次进行扫描,检查键盘的状态,当两次扫描到键位上有键按下时CPU才做处理。此延时程序是通过双重循环结构实现延时的。其汇编程序如下:DELAY10MS:MOV R6,#10 D1:MOV R7,#248 DJNZ R7,$ DJNZ R

9、6,D1 RET其延时的时间计算过程为:设其晶振频率为6MHZ,则其机器周期为2us,又上述指令均为双周期指令,因而,T=4+(4+104)248+4=10920us10ms4 仿真结果及分析(1)在proteus中设计好实验电路后,然后在proteus编程环境中进行程序设计和编译,生成HEX文件并加载HEX文件,点启动,运行仿真。由于开始时P0口的值被赋为00H,P1口的值为FFH,当无键按下时,将P1.4口置0,再将P1口的值送A,屏蔽高4位,与0F相异或后,A的值变为0,即第0行没有键按下,转入NOKEY0子程序中,重新赋值P1口的值为FFH,将P1.5口置0后送A,屏蔽高4位,与0F相

10、异或后,A的值又变为0,即第1行没有键按下,转入NOKEY1子程序中,同理,可以得知第2行和第3行也没有键按下。因而,P0口没有被重新赋值,保持为00H不变,又显示器是共阴极的,此时P0.0-P1.6口均为“0”,即“a-g”段均不显示,从而显示器不显示,并转向程序的开始继续循环扫描键盘,直到有键按下为止。观察到显示器中的显示现象如下: 图4.1 (2)当按下第六个键时,开始时P0口的值被赋为00H,P1口的值为FFH,将P1.4口置0,再将P1口的值送A,屏蔽高4位,与0F相异或后,A的值变为0,即第0行没有键按下,转入NOKEY0子程序中,重新赋值P1口的值为FFH,将P1.5口置0后送A

11、,屏蔽高4位,与0FH相异或后,由于第一行有键按下,此时,A的值不为1,为了防止抖动,进入10ms的定时程序后再重新确认一次,是否真的有键按下,当重新确认后,A的值仍不为1,说明确实有键按下,然后将P1的值送A,屏蔽高4位,将A与0EH比较,判断其是否等于0EH相等,由于此时的A等于0DH,即两者不相等,程序转向NEXT5,与0DH比较,相等把5送给key,进入显示程序,将key值送给A,通过查表程序的查表参数查找其对应值06H并送给P0,通过P0口控制显示器,此时P0口的值为01101101B,对应着显示器的a、c、d、f、g段显示,其余段不显示,从而显示为“5”。接着又转向程序的最开始处继

12、续进行扫描。 图4.2 同理,当按下第十个键时, 图4.3 以此类推,当按下最后一个键时,观察到显示器中显示的数码为“F”。总之,当按下相应的键时,显示器上对应的显示数符“0F”,从而实现了对键盘的识别。5 汇编程序KEY EQU 30H ORG 0000H ;入口地址SJMP START START:MOV P0,#00H JIXU:MOV P1,#0FFH ;判第0行是否有键按下CLR P1.4 ;将P1.4清零MOV A,P1 ANL A,#0FH ;屏蔽高4位XRL A,#0FH JZ NOKEY0 ;A为0,转向NOKEY0LCALL DELAY10MS ;延时,去抖动 MOV A,

13、P1 ;再确认一次ANL A,#0FH JZ NOKEY0 ;判哪一个键按下CJNE A,#0EH,NEXT1 MOV KEY,#0 LJMP OK ;转向显示程序NEXT1:CJNE A,#0DH,NEXT2 MOV KEY,#1 LJMP OK NEXT2:CJNE A,#0BH,NEXT3 MOV KEY,#2 NEXT3:CJNE A,#07H,NOKEY0 MOV KEY,#3 NOKEY0:MOV P1,#0FFH ;判第1行是否有键按下CLR P1.5 ;将P1.5清零ANL A,#0FH ;JZ NOKEY1 ;A为0,转向NOKEY1LCALL DELAY10MS ;延时,去

14、抖动JZ NOKEY1 ;CJNE A,#0EH,NEXT5 MOV KEY,#4 NEXT5:CJNE A,#0DH,NEXT6 MOV KEY,#5 NEXT6:CJNE A,#0BH,NEXT7 MOV KEY,#6 NEXT7:CJNE A,#07,NOKEY1 MOV KEY,#7 NOKEY1:MOV P1,#0FFH ;判第2行是否有键按下CLR P1.6 ;将P1.6清零JZ NOKEY2 ;A为0,转向NOKEY2CJNE A,#0EH,NEXT9 MOV KEY,#8 SJMP OK NEXT9:CJNE A,#0DH,NEXT10 MOV KEY,#9 NEXT10:CJ

15、NE A,#0BH,NEXT11 MOV KEY,#10 NEXT11:CJNE A,#07,NOKEY2 MOV KEY,#11 NOKEY2:CLR P1.7 ;MOV A,#P1 JZ NEXT16 ;A为0,转向NEXT16CJNE A,#0EH,NEXT13 MOV KEY,#12 NEXT13:CJNE A,#0DH,NEXT14 MOV KEY,#13 NEXT14:CJNE A,#0BH,NEXT15 MOV KEY,#14 NEXT15:CJNE A,#07H,NEXT16 MOV KEY,#15 NEXT16:LJMP JIXU OK:MOV A,KEY ;查表显示MOV

16、DPTR,#TABLE MOVC A,A+DPTR MOV P0,A MOV R6,#10 ;延时RET TABLE: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H DB 7FH,6FH,77H,7CH,39H,5EH,79H,71H END6 课程设计的总结与体会回顾起此次课程设计,感觉受益匪浅,从拿到题目到完成整个编程,从理论到实践,学到很多很多的课堂理论中没学到过的东西,不仅对键盘的识别技术这一章节的知识点有了深刻的认识,而且对这学期开设的单片机这门课程有了更全面的了解,尤其是在学习使用proteus软件片编程和仿真时收获良多。通过这次单片机课程设计,还使我懂得了实践的重要性。同时在程序调试的过程中提高自己的发现问题、解决问题、实际动手和独立思考的能力。这次课程设计能顺利的完成,除了我们的努力外,当然也离不开指导老师申老师的辛勤指导,致使我在设计的过程中学到了很多实用性的知识。同时,对给过我帮助的所有同学和各位指导老师表示忠心的感谢!参考文献资料:1张俊谟单片机中级教程M北京:北京航空航天大学出版,20062.何立民 编著. MCS-51单片机应用系统设计系统配置与接口技术.

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1