矩阵键盘的设计.docx

上传人:b****7 文档编号:23975115 上传时间:2023-05-23 格式:DOCX 页数:20 大小:258.19KB
下载 相关 举报
矩阵键盘的设计.docx_第1页
第1页 / 共20页
矩阵键盘的设计.docx_第2页
第2页 / 共20页
矩阵键盘的设计.docx_第3页
第3页 / 共20页
矩阵键盘的设计.docx_第4页
第4页 / 共20页
矩阵键盘的设计.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

矩阵键盘的设计.docx

《矩阵键盘的设计.docx》由会员分享,可在线阅读,更多相关《矩阵键盘的设计.docx(20页珍藏版)》请在冰豆网上搜索。

矩阵键盘的设计.docx

矩阵键盘的设计

摘要

本实验是在基于PROTUES平台下,运用80C51芯片编写程序设计实现的矩阵式键盘。

通过对矩阵键盘的硬件电路的设计及对其进行程序汇编和运行,通过单片机的内部控制实现对硬件电路的设计,从而实现对4×4矩阵键盘的识别。

用单片机的并行P1口连接4×4矩阵键盘,并以单片机的P1.0-P1.3口作键盘输入的列线,以单片机的P1.4-P1.7口作为键盘输入的行线,然后用P0.0-P0.6作输出线,通过上拉电阻在显示器上显示不同的符号按键“0-F”。

在硬件电路的基础上加上软件程序的控制来设计实现。

其工作过程为:

先判断是否有键按下,如没有键按下,则继续扫描整个程序,如有键按下,就识别是哪一个键按下,最后通过显示器把该键所对应的键的序号显示出来。

关键词:

80C51芯片;4×4矩阵;键盘识别;显示器

目录

1问题描述1

2设计原理1

2.1电路硬件说明1

2.2矩阵式键盘的工作过程2

2.3程序设计内容2

2.4硬件电路设计及其电路图2

3程序说明及其流程图3

3.1程序系统3

3.2判别是否有键按下程序4

3.3识别哪个键按下程序6

3.4显示程序7

3.5延时程序8

4仿真结果分析9

5汇编程序12

6课程设计总结与体会16

参考文献资料

1问题描述

(1)设计一个4×4矩阵式键盘,以实现矩阵式键盘的程序识别。

(2)用单片机的并行口P1连接4×4矩阵键盘,并以单片机的P1.0-P1.3各管脚作输入线,以单片机的P1.4-P1.7各管脚作输出线,在数码管上显示每个按键“0-F”的序号。

键盘中对应按键的序号排列如下图

图1.1键盘序号图

2设计原理

2.1电路硬件说明

(1)在“单片机系统”区域中,把单片机的P1.0-P1.7端口通过8联拨动拨码开关JP3连接到“4×4行列式键盘”区域中的M1-M4,N1-N4端口上。

即将P1口作为整个系统的输入接口电路。

(2)在“单片机系统”区域中,把单片机的P0.0-P0.6端口通过上拉电阻连接到“静态数码显示模块”区域中的任何一个a-g端口上;作为整个系统的并且P0.0对应着a,P0.1对应着b,……,P0.6对应着g。

(3)此实验采用的是共阴极LED显示块,只有当a-g端口输入高电平时才有效,即显示块中的对应的发光二极管才发光,低电平时不显示,通过a-g端口的不同输入使显示器显示不同的字符。

(4)系统中的上拉电阻RP1和RP2是限流电阻,起到限流的作用,阻值一般在100-300欧姆之间。

2.2矩阵式键盘的工作原理

(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)4×4矩阵键盘识别处理。

 

(2)每个按键都有它的行值和列值,行值和列值的组合就是识别这个按键的编码。

矩阵的行线和列线分别通过两并行接口和CPU通信。

键盘的一端(列线)通过电阻接VCC,而接地是通过程序输出数字“0”实现的。

键盘处理程序的任务是:

确定有无键按下,判断哪一个键按下,键的功能是什么?

还要消除按键在闭合或断开时的抖动。

两个并行口中,一个输出扫描码,使按键逐行动态接地;另一个并行口输入按键状态,由行扫描值和回馈信号共同形成键编码而识别按键,通过软件查表,查出该键的功能。

 

2.4硬件电路设计及电路图

硬件电路设计图如下图所示。

把单片机的P1.0-P1.7端口通过8联拨动拨码开关连接到“4×4行列式键盘”,其中P1.0-P1.3作为列线,P1.4-P1.7作为行线,把单片机的P0.0-P0.6端口连接到共阴极“静态数码显示模块”区域中对应的a-g端口上;系统首先通过CPU对全部键盘进行扫描,即把第一根行线置为“0”状态,其余行线置于“1”状态,读入输入缓冲器的状态,若其状态全为“1”表明该行无键按下,再将第二根行线置为“0”状态,同样读入输入缓冲器的状态,如其状态也全为“1”,则置第一根行线置为“0”状态,以此类推。

如读入输入缓冲器的状态不全为“1”,确定哪一根列线为“0”状态,当某个键的行线和列线都为“0”状态时,表明该键按下。

最后通过显示程序将该键的序号显示出来。

图2.1硬件电路图

3程序说明及其流程图

3.1系统程序

(1)说明:

该图是一个总的系统框图,首先CPU读入初始状态,CPU先让某一行线为低,其他行线为高,同时列线都为高,通过对按键进行扫描,也就是通过按键后判断列线是否为0来判断是否有键按下,有的话就继续执行程序识别判断是哪个键按下,然后通过P0口查询显示该数符,如果没有按键按下就返回程序继续扫描直到有键按下时才停止扫描。

(2)流程图

3.2判别是否有键按下程序

(1)说明:

该图表示的是将P1口置初值为FFH,MOVP1,#0FFH,然后CLRP1.4,通过读入输入缓冲器的状态,通过屏蔽A的高四位后和0FH进行异或来判断赋值为0的这一行是否有键按下,如无键按下,重置P1为FFH,CLRP1.5,如仍无键按下,就依次CLRP1.6、CLRP1.7。

直到有键按下,为去抖动,就延时10ms,再次确认是否真的有键按下,如果是的话就根据当前状态识别按键。

如一次全部的扫描仍没有键按下,就回到开始处继续扫描。

(2)流程图

3.3识别哪个键按下程序

(1)说明:

本图是以第2行有键按下时判哪一个键按下的流程图为例的。

当将第二行的行线置为0,其余行线置于1的情况下,读入输入缓冲器的状态,不为全0,则说明该行有键按下,此时就可以将A的值送给P1,屏蔽A的高四位,依次与OEH、0BH、0DH、07H进行比较来确定按下的键号是4、5、6还是7,然后送至P0口显示。

执行完显示程序后再转向程序的开始处

(2)流程图

3.4显示程序

(1)说明:

判断有键按下并且识别出是哪个键按下时,接着就通过显示程序将其通过数码管显示出来。

该实验用的是查表程序来实现相应键的显示的。

将定义字伪指令地址赋给DPTR,通过指令MOVCA,@A+DPTR查到对应字符的显示码送给A,再由A送给P0,最后由显示器显示出来。

显示器字形与字段的对应关系如下:

表3.1显示器字形与字段对应关系表

3.5延时程序

(1)说明:

为防止抖动,使键盘识别失误,于是我们运用一个10ms的延时程序使之产生10ms的定时,对键盘再一次进行扫描,检查键盘的状态,当两次扫描到键位上有键按下时CPU才做处理。

此延时程序是通过双重循环结构实现延时的。

其汇编程序如下:

DELAY10MS:

MOVR6,#10

D1:

MOVR7,#248

DJNZR7,$

DJNZR6,D1

RET

其延时的时间计算过程为:

设其晶振频率为6MHZ,则其机器周期为2us,又上述指令均为双周期指令,因而,T=4+(4+10×4)×248+4=10920us≈10ms

(2)流程图

4仿真结果及分析

(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相异或后,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,屏蔽高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”。

接着又转向程序的最开始处继续进行扫描。

观察到显示器中的显示现象如下:

图4.2

同理,当按下第十个键时,

观察到显示器中的显示现象如下:

图4.3

以此类推,当按下最后一个键时,观察到显示器中显示的数码为“F”。

总之,当按下相应的键时,显示器上对应的显示数符“0-F”,从而实现了对键盘的识别。

 

5汇编程序

KEYEQU30H

ORG0000H;入口地址

SJMPSTART

START:

MOVP0,#00H

JIXU:

MOVP1,#0FFH;判第0行是否有键按下

CLRP1.4;将P1.4清零

MOVA,P1

ANLA,#0FH;屏蔽高4位

XRLA,#0FH

JZNOKEY0;A为0,转向NOKEY0

LCALLDELAY10MS;延时,去抖动

MOVA,P1;再确认一次

ANLA,#0FH

XRLA,#0FH

JZNOKEY0;A为0,转向NOKEY0

MOVA,P1;判哪一个键按下

ANLA,#0FH

CJNEA,#0EH,NEXT1

MOVKEY,#0

LJMPOK;转向显示程序

NEXT1:

CJNEA,#0DH,NEXT2

MOVKEY,#1

LJMPOK

NEXT2:

CJNEA,#0BH,NEXT3

MOVKEY,#2

LJMPOK

NEXT3:

CJNEA,#07H,NOKEY0

MOVKEY,#3

LJMPOK

NOKEY0:

MOVP1,#0FFH;判第1行是否有键按下

CLRP1.5;将P1.5清零

MOVA,P1

ANLA,#0FH;屏蔽高4位

XRLA,#0FH

JZNOKEY1;A为0,转向NOKEY1

LCALLDELAY10MS;延时,去抖动

MOVA,P1;再确认一次

ANLA,#0FH

XRLA,#0FH

JZNOKEY1;A为0,转向NOKEY1

MOVA,P1;判哪一个键按下

ANLA,#0FH

CJNEA,#0EH,NEXT5

MOVKEY,#4

LJMPOK

NEXT5:

CJNEA,#0DH,NEXT6

MOVKEY,#5

LJMPOK

NEXT6:

CJNEA,#0BH,NEXT7

MOVKEY,#6

LJMPOK

NEXT7:

CJNEA,#07,NOKEY1

MOVKEY,#7

LJMPOK

NOKEY1:

MOVP1,#0FFH;判第2行是否有键按下

CLRP1.6;将P1.6清零

MOVA,P1

ANLA,#0FH;屏蔽高4位

XRLA,#0FH

JZNOKEY2;A为0,转向NOKEY2

LCALLDELAY10MS;延时,去抖动

MOVA,P1;再确认一次

ANLA,#0FH

XRLA,#0FH

JZNOKEY2;A为0,转向NOKEY2

MOVA,P1;判哪一个键按下

ANLA,#0FH

CJNEA,#0EH,NEXT9

MOVKEY,#8

SJMPOK

NEXT9:

CJNEA,#0DH,NEXT10

MOVKEY,#9

SJMPOK

NEXT10:

CJNEA,#0BH,NEXT11

MOVKEY,#10

SJMPOK

NEXT11:

CJNEA,#07,NOKEY2

MOVKEY,#11

SJMPOK

NOKEY2:

MOVP1,#0FFH;判第2行是否有键按下

CLRP1.7;将P1.6清零

MOVA,#P1

ANLA,#0FH;屏蔽高4位

XRLA,#0FH

JZNEXT16;A为0,转向NEXT16

LCALLDELAY10MS;延时,去抖动

MOVA,P1;再确认一次

ANLA,#0FH

XRLA,#0FH

JZNEXT16;A为0,转向NEXT16

MOVA,P1;判哪一个键按下

ANLA,#0FH

CJNEA,#0EH,NEXT13

MOVKEY,#12

SJMPOK

NEXT13:

CJNEA,#0DH,NEXT14

MOVKEY,#13

SJMPOK

NEXT14:

CJNEA,#0BH,NEXT15

MOVKEY,#14

SJMPOK

NEXT15:

CJNEA,#07H,NEXT16

MOVKEY,#15

SJMPOK

NEXT16:

LJMPJIXU

OK:

MOVA,KEY;查表显示

MOVDPTR,#TABLE

MOVCA,@A+DPTR

MOVP0,A

LJMPJIXU

DELAY10MS:

MOVR6,#10;延时

D1:

MOVR7,#248

DJNZR7,$

DJNZR6,D1

RET

TABLE:

DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H

DB7FH,6FH,77H,7CH,39H,5EH,79H,71H

END

6课程设计的总结与体会

回顾起此次课程设计,感觉受益匪浅,从拿到题目到完成整个编程,从理论到实践,学到很多很多的课堂理论中没学到过的东西,不仅对键盘的识别技术这一章节的知识点有了深刻的认识,而且对这学期开设的单片机这门课程有了更全面的了解,尤其是在学习使用proteus软件片编程和仿真时收获良多。

通过这次单片机课程设计,还使我懂得了实践的重要性。

同时在程序调试的过程中提高自己的发现问题、解决问题、实际动手和独立思考的能力。

这次课程设计能顺利的完成,除了我们的努力外,当然也离不开指导老师申老师的辛勤指导,致使我在设计的过程中学到了很多实用性的知识。

同时,对给过我帮助的所有同学和各位指导老师表示忠心的感谢!

参考文献资料:

[1]张俊谟.单片机中级教程[M].北京:

北京航空航天大学出版,2006

[2].何立民编著.《MCS-51单片机应用系统设计系统配置与接口技术》.

目录

第一章总论1

1.1项目概况1

1.2可行性研究报告编制单位4

1.3承办单位简介4

1.4项目区概况5

1.5可行性研究依据9

1.6可行性研究的范围10

第二章项目建设背景及必要性11

2.1项目建设背景11

2.2项目建设必要性14

第三章项目建设地址及条件17

3.1项目建设地址17

3.2项目建设条件17

第四章工程建设方案22

4.1项目设计依据与原则22

4.2工程规划方案23

4.3工程技术方案25

4.4给排水工程30

4.5供电工程31

4.6采暖及通风35

4.7燃气设计37

第五章环境保护38

5.1环境保护标准38

5.2环境影响初步分析38

5.3施工期环境保护措施39

5.4运营期间环境保护措施41

5.5绿化42

5.6环境影响评价43

第六章节能44

6.1依据标准、法律、法规和规范44

6.2能耗状况和能耗指标分析44

6.3节能措施45

第七章劳动安全卫生消防48

7.1设计依据48

7.2危害因素及危害程度分析48

7.3安全设施及措施48

7.4消防设施50

第八章抗震设防52

8.1编制依据52

8.2建设场地条件52

8.3建筑结构概况与抗震设计54

第九章组织机构与项目管理56

9.1组织机构56

9.2项目管理56

第十章项目建设实施进度59

10.1项目建设期59

10.2项目建设实施规划59

第十一章工程招标60

11.1招标依据60

11.2招标投标的基本原则60

11.3项目概况61

11.4项目提前招标情况62

11.5项目招标内容62

第十二章投资估算与资金措筹65

12.1建设投资估算的范围65

12.2投资估算依据65

12.3投资估算编制内容66

12.4资金筹措70

第十三章效益分析71

13.1项目实施对社会的影响分析71

13.2项目与所在地互适性分析71

13.3社会风险分析72

13.4社会评价结论74

第十四章社会稳定风险评估分析75

14.1社会稳定风险评估因素75

14.2项目建设社会稳定风险分析76

第十五章结论与建议78

15.1研究结论78

15.2建议78

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 语文

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

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