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

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

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

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

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

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判别是否有键按下程序

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

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

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

3.3识别哪个键按下程序

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

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

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

3.4显示程序

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

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

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

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

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

3.5延时程序

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

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

其汇编程序如下:

DELAY10MS:

MOVR6,#10

D1:

MOVR7,#248

DJNZR7,$

DJNZR6,D1

RET

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

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

4)×

248+4=10920us≈10ms

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

JZNOKEY0;

判哪一个键按下

CJNEA,#0EH,NEXT1

MOVKEY,#0

LJMPOK;

转向显示程序

NEXT1:

CJNEA,#0DH,NEXT2

MOVKEY,#1

LJMPOK

NEXT2:

CJNEA,#0BH,NEXT3

MOVKEY,#2

NEXT3:

CJNEA,#07H,NOKEY0

MOVKEY,#3

NOKEY0:

MOVP1,#0FFH;

判第1行是否有键按下

CLRP1.5;

将P1.5清零

ANLA,#0FH;

JZNOKEY1;

A为0,转向NOKEY1

LCALLDELAY10MS;

延时,去抖动

JZNOKEY1;

CJNEA,#0EH,NEXT5

MOVKEY,#4

NEXT5:

CJNEA,#0DH,NEXT6

MOVKEY,#5

NEXT6:

CJNEA,#0BH,NEXT7

MOVKEY,#6

NEXT7:

CJNEA,#07,NOKEY1

MOVKEY,#7

NOKEY1:

MOVP1,#0FFH;

判第2行是否有键按下

CLRP1.6;

将P1.6清零

JZNOKEY2;

A为0,转向NOKEY2

CJNEA,#0EH,NEXT9

MOVKEY,#8

SJMPOK

NEXT9:

CJNEA,#0DH,NEXT10

MOVKEY,#9

NEXT10:

CJNEA,#0BH,NEXT11

MOVKEY,#10

NEXT11:

CJNEA,#07,NOKEY2

MOVKEY,#11

NOKEY2:

CLRP1.7;

MOVA,#P1

JZNEXT16;

A为0,转向NEXT16

CJNEA,#0EH,NEXT13

MOVKEY,#12

NEXT13:

CJNEA,#0DH,NEXT14

MOVKEY,#13

NEXT14:

CJNEA,#0BH,NEXT15

MOVKEY,#14

NEXT15:

CJNEA,#07H,NEXT16

MOVKEY,#15

NEXT16:

LJMPJIXU

OK:

MOVA,KEY;

查表显示

MOVDPTR,#TABLE

MOVCA,@A+DPTR

MOVP0,A

MOVR6,#10;

延时

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单片机应用系统设计系统配置与接口技术》.

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

当前位置:首页 > 自然科学 > 物理

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

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