学生学号实验课成绩
学生实验报告书
实验课程名称监测控制系统应用
开课学院信息工程学院
指导教师×××
学生姓名×××
学生专业班级×××
2015--2016学年第2学期
实验课程名称:监测控制系统应用
实验项目名称键盘接口电路的设计与实现实验成绩
实验者专业班级组别
同组者实验日期
一、实验目的、意义:
〔1〕键盘是微机应用系统中必不可少的输入设备,掌握键盘电路硬件和软件的设计技巧
〔2〕学会设计出满足各种需要、适应各种场合的键盘电路。
二、实验内容:
(1)设计8个按键的独立键盘和4×4矩阵键盘的硬件电路和软件
(2)按键识别上分别采用查询法和中断方式
(3)在开发板上搭建电路,设计好的程序编译后写入开发板中,检验相应键盘的性能。
具体任务是:
〔1〕分别设计出独立键盘和4×4矩阵键盘的硬件电路和软件,并且这两种键盘又分别采用查
询式和中断方式识别按键,即设计4种键盘;
〔2〕选择开发板上的LED显示器或LED灯或其他作为检验键盘是否有效的输出设备,设计出
完整的带检验电路的键盘实验电路系统〔4套〕。
〔3〕用proteous仿真电路,保证设计的正确性;
〔4〕基于开发板完成实物制作;
三、探究内容:
〔1〕键盘设计需要考虑那些问题〔按键识别、消抖、键值〕
〔2〕键盘硬件电路的设计方法
〔3〕键盘软件设计方法〔软件实现哪些功能〕
〔4〕比较独立键盘和矩阵键盘的特点
〔5〕比较查询法和中断法识别按键性能上的不同
基于以上探究内容,进行本次实验的设计
四、实验设计:
1、键盘接口的基本任务:
〔1〕判断是否有键按下
〔2〕确定按键的键值
〔3〕消除开关抖动,防止一次键重复读入
〔4〕无论按键时间长短,只读取一次数据
2、独立键盘设计:
单片机控制系统中,往往只需要几个功能键,此时,可采用独立式按键结构。
独立式按键是直接用I/O口线构成的单个按键电路,其特点是每个按键单独占用一根I/O
口线,每个按键的工作不会影响其它I/O口线的状态。独立式按键的典型应用如图1所示。
独立式按键电路配置灵活,软件结构简单,但每个按键必须占用一根I/O口线,因此,在按键
较多时,I/O口线浪费较大,不宜采用。
图1独立键盘电路连接
a、查询式
电路连接如图2所示,P0与开关相连,P1与数码管相连用于显示。
如何实现键盘的设计?
先逐位查询每根I/O口线的输入状态,如某一根I/O口线输入为低电平,则可确认该I/O
口线所对应的按键已按下,然后,再转向该键的功能处理程序。
通过设计一个合适的延时程序来消除开关抖动,防止一次键重复读入,并且,保证无论按
键时间长短,只读取一次数据。
图2独立键盘查询电路
程序如下:
org0000h
START:MOVA,#0FFH;
MOVP0,A;置P1口为输入状态
MOVA,P0;键状态输入
JNBACC.0,K0;检测0号键是否按下,按下转
JNBACC.1,K1;检测1号键是否按下,按下转
JNBACC.2,K2;检测2号键是否按下,按下转
JNBACC.3,K3;检测3号键是否按下,按下转
JNBACC.4,K4;检测4号键是否按下,按下转
JNBACC.5,K5;检测5号键是否按下,按下转
JNBACC.6,K6;检测6号键是否按下,按下转
JNBACC.7,K7;检测7号键是否按下,按下转
JMPSTART
K0:ACALLDAY1
mova,p0
JNBACC.0,PROM0
JMPPROM0
K1:ACALLDAY1
mova,p0
JNBACC.1,START
JMPPROM1
k2:ACALLDAY1
mova,p0
JNBACC.2,START
JMPPROM2
k3:ACALLDAY1
mova,p0
JBACC.3,START
JMPPROM3
k4:ACALLDAY1
mova,p0
JNBACC.4,START
JMPPROM4
k5:ACALLDAY1
mova,p0
JNBACC.5,START
JMPPROM5
k6:ACALLDAY1
mova,p0
JNBACC.6,START
JMPPROM6
k7:ACALLDAY1
mova,p0
JNBACC.7,START
JMPPROM7
PROM0:MOVDPTR,#TAB
MOVA,#00H
MOVCA,@A+DPTR
MOVP1,A
ACALLDAY2
JMPSTART
prom1:
MOVDPTR,#TAB
MOVA,#01H
MOVCA,@A+DPTR
MOVP1,A
ACALLDAY2
JMPSTART
prom2:
MOVDPTR,#TAB
MOVA,#02H
MOVCA,@A+DPTR
MOVP1,A
LCALLDAY2
JMPSTART
prom3:
MOVDPTR,#TAB
MOVA,#03H
MOVCA,@A+DPTR
MOVP1,A
LCALLDAY2
JMPSTART
prom4:
MOVDPTR,#TAB
MOVA,#04H
MOVCA,@A+DPTR
MOVP1,A
ACALLDAY2
JMPSTART
prom5:
MOVDPTR,#TAB
MOVA,#05H
MOVCA,@A+DPTR
MOVP1,A
ACALLDAY2
JMPSTART
prom6:
MOVDPTR,#TAB
MOVA,#06H
MOVCA,@A+DPTR
MOVP1,A
ACALLDAY2
JMPSTART
prom7:
MOVDPTR,#TAB
MOVA,#07H
MOVCA,@A+DPTR
MOVP1,A
ACALLDAY2
JMPSTART
DAY1:MOVR0,#0AH
DL2:MOVR1,#0FFH
DL1:
DJNZR1,DL1
DJNZR0,DL2
RET
DAY2:MOVR4,#0FFH
ACALLDAY1
DL00:MOVR5,#0FFH
ACALLDAY1
DL11:DJNZR5,DL11
DJNZR4,DL00
RET
TAB:DB0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H;共阳数码管
END
b、中断式
与独立键盘的查询式电路基本相同,不同的是,中断式的P0端8个口通过一个8输入与
门相连,输出接至P3.2。当有按键按下时,P3.2会从高电平变为低电平,从而转去中断子程序
执行按键后的显示。
图3独立键盘中断式电路
程序如下:
org0000h
JMPMAIN
org0003h
JMPINTV0
ORG0030H
;主程序
MAIN:MOVp0,#0FFH
SETBIT0
SETBEX0
SETBEA
MOVA,#3FH
MOVP1,A
HERE:SJMPHERE
;中断子程序
INTV0:ACALLDAY1
JBP3.2,HERE
JNBACC.0,K0;检测0号键是否按下,按下转
JNBACC.1,K1;检测1号键是否按下,按下转
JNBACC.2,K2;检测2号键是否按下,按下转
JNBACC.3,K3;检测3号键是否按下,按下转
JNBACC.4,K4;检测4号键是否按下,按下转
JNBACC.5,K5;检测5号键是否按下,按下转
JNBACC.6,K6;检测6号键是否按下,按下转
JNBACC.7,K7;检测7号键是否按下,按下转
JMPHERE
K0:
MOVDPTR,#TAB
MOVA,#00H
MOVCA,@A+DPTR
MOVP1,A
ACALLDAY2
RETI
K1:
MOVDPTR,#TAB
MOVA,#01H
MOVCA,@A+DPTR
MOVP1,A
ACALLDAY2
RETI
K2:
MOVDPTR,#TAB
MOVA,#02H
MOVCA,@A+DPTR
MOVP1,A
ACALLDAY2
RETI
K3:
MOVDPTR,#TAB
MOVA,#03H
MOVCA,@A+DPTR
MOVP1,A
ACALLDAY2
RETI
K4:
MOVDPTR,#TAB
MOVA,#04H
MOVCA,@A+DPTR
MOVP1,A
ACALLDAY2
RETI
K5:
MOVDPTR,#TAB
MOVA,#05H
MOVCA,@A+DPTR
MOVP1,A
ACALLDAY2
RETI
K6:
MOVDPTR,#TAB
MOVA,#06H
MOVCA,@A+DPTR
MOVP1,A
ACALLDAY2
RETI
K7:
MOVDPTR,#TAB
MOVA,#07H
MOVCA,@A+DPTR
MOVP1,A
ACALLDAY2
RETI
DAY1:;延时子程序
MOVR0,#0AH
DL2:MOVR1,#0FFH
DL1:DJNZR1,DL1
DJNZR0,DL2
RET
DAY2:
MOVR4,#0FFH
ACALLDAY1
DL00:MOVR5,#0FFH
ACALLDAY1
DL11:DJNZR5,DL11
DJNZR4,DL00
RET
TAB:DB0f9H,0a4H,0b0H,99H,092H,82H,0f8H,80H
END
3、矩阵键盘设计:
矩阵式键盘中,行、列线分别连接到按键开关的两端,行线通过上拉电阻接到+5V上。当
无键按下时,行线处于高电平状态;当有键按下时,行、列线将导通,此时,行线电平将由与
此行线相连的列线电平决定。
a、查询式:
P0.输入线,列输出线,P0与数码管相连。对每个键的编码值进行编码,对应按键按下时
数码管要显示的值送入该编码键地址。
程序如下:
ORG0000H
MOVA,#0C0H
MOVR1,#0EEH
MOV@R1,A
MOVA,#0F9H
MOVR1,#0DEH
MOV@R1,A
MOVA,#0A4H
MOVR1,#0BEH
MOV@R1,A
MOVA,#0B0H
MOV07EH,A
MOVA,#99H
MOVR1,#0EDH
MOV@R1,A
MOVA,#92H
MOVR1,#0DDH
MOV@R1,A
MOVA,#82H
MOVR1,#0BDH
MOV@R1,A
MOVA,#0F8H
MOVR1,#07DH
MOV@R1,A
MOVA,#80H
MOVR1,#0EBH
MOV@R1,A
MOVA,#90H
MOVR1,#0DBH
MOV@R1,A
MOVA,#88H
MOVR1,#0BBH
MOV@R1,A
MOVA,#83H
MOVR1,#07BH
MOV@R1,A
MOVA,#0C6H
MOVR1,#0E7H
MOV@R1,A
MOVA,#0A1H
MOVR1,#0D7H
MOV@R1,A
MOVA,#86H
MOVR1,#0B7H
MOV@R1,A
MOVA,#8EH
MOV077H,A
TEST:
ACALLDAY
MOVP0,#0F0H
MOVA,P0
ANLA,#0F0H
CJNEA,#0F0H,HAVE
SJMPTEST
HAVE:
MOVA,#0FEH
NEXT:
MOVB,A
MOVP0,A
READ:
MOVA,P0
ANLA,#0F0H
CJNEA,#0F0H,YES
MOVA,B
RLA
CJNEA,#0EFH,NEXT
YES:
ACALLDAY
AREAD:
MOVA,P0
ANLA,#0F0H
MOVR2,A
MOVA,B
ANLA,#0FH
ORLA,R2;键编码
YES1:
MOVR0,A
MOVP1,@R0
ACALLDAY
JMPTEST
DAY:MOVR0,#0FFH
DL2:MOVR1,#0FFH
DL1:
NOP
NOP
DJNZR1,DL1
DJNZR0,DL2
RET
END
b、中断式:
设计原理:电脑应用系统工作时,并不经常需要键输入。但无论是查询工作方式还是定时
扫描工作方式,CPU经常处于空扫描状态。为了提高CPU的效率,可采用中断工作方式。这
种工作方式是当键盘上有键按下时,向CPU发一个中断请求信号,CPU响应中断后,在中断
服务程序中扫描键盘,执行键功能程序。
程序如下:
#include
unsignedcharcode
table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,
0x71};
voidyanshi()//延时子程序
{
unsignedcharx;
for(x=0;x<250;x++);
}
intshibie()//扫描识别子程序
{
unsignedcharx=0xef,y;
intn,m;
for(n=0;n<4;n++)
{
P0=x;//在这里P0高四位的电平如果影响了P0的低四位这里采集器就会撤销中断。
y=(~P0)&0x0f;
switch(y)
{
ca0x01:{m=0;return(m*4+n);}
ca0x02:{m=1;return(m*4+n);}
ca0x04:{m=2;return(m*4+n);}
ca0x08:{m=3;return(m*4+n);}
}
x=(x<<1)+1;
}
}
voidzd()interrupt0
{
unsignedchari;
yanshi();
P0=0x0f;
if(P0==0x0f)gotolab;//如果条件成立,说明是抖动产生的中断,应当回避。跳转
i=shibie();
P1=table[i];
P0=0x0f;//这里会引起P0低四位的一个向上沿从而导致程序不稳定最终失控的中断
信号。
lab:;//跳转标志,直接跳过中断程序内容,直接到尾部
}
voidmain()
{
EA=1;
EX0=1;
IT0=1;
P1=0x00;
P0=0x0f;
while(1);
}
五、实验内容:
1、在KEIL中建立project,分别输入源程序,编译成功后,生成.HEX文件。
2、在PROTEUS中搭建电路,将对应的.HEX文件导入仿真电路中,进行仿真。
3、观察仿真现象,调整延时时间长短,观察现象,检验四种键盘的性能。
A独立键盘查询式:
(1)按下一个键,数码管显示对应的数字。
(2)当某按键一直按下〔按下时间很长〕时,数码管显示对应数字。
〔3〕当按下键的速度非常快时,数码管未显示对应的数字
原因分析:程序中的消抖程序延时过长
采取措施:将延时程序的延时时间变短
〔3〕以正常手速按下键,数码管正确显示,减少消抖时间,继续按键实验,最后确定,
消抖时间为5~10ms合适
B独立键盘中断方式:
与独立键盘查询式检验类似,最后确定其合适的消抖时间为5~10ms,与独立键盘查询式
现象相比,中断式的反应时间更短,即,在相同的条件下,当按键按下时,中断式的键盘显示
更快一些,反应更灵敏。
C矩阵键盘查询式:
与独立键盘查询式检验类似,每个键按下,数码管都显示对应的值,最后确定其合适的消
抖时间为5~10ms
D矩阵键盘中断式:
与矩阵键盘查询式检验类似,最后确定其合适的消抖时间为5~10ms,与矩阵键盘查询式
现象相比,中断式的反应时间更短,即,在相同的条件下,当按键按下时,中断式的键盘显示
更快一些,反应更灵敏。
4、将最后的.HEX文件导入实物中,进行实物演示,观察现象。
改变消抖时间,观察按键的灵敏度,确定最终的最合适消抖时间,与仿真类似。
六、结果分析及研究结论:
从仿真现象和实物调试现象中,可以得出以下结论:
(1)独立键盘和矩阵键盘的特点:
a.独立按键:一个按键占用单独的一个I/O口,编程简单,但是浪费IO口,毕竟单片机系统
的IO资源很有限
b.矩阵键盘:为了节省I/O口,通常将按键排列成矩阵形式,每条水平线和垂直线在交叉处
不直接连通,而是通过一个按键加以连接。其编程复杂,但是节省IO口
〔2〕查询法和中断法识别按键性能上的不同
a.查询方式主要由编写的程序进行查询状态来获取数据的;
b.中断方式主要是通过系统本身的硬件机制再通过自己编写的中断服务函数做出相应操作的;
c.实时性上的区别:中断处理很及时,只要发生这个时间久会执行对应操作,而查询等到查
询状态之后才会做出相应操作。
d.中断的主要优势在程序较复杂的情况下和对实时性要求高的情况下更明显。
〔3〕设计需要考虑那些问题〔按键识别、消抖、键值〕
a.在设计键盘的时候,要消除开关抖动,防止一次键重复读入
b.在设计键盘的时候,要保证无论按键时间长短,只读取一次数据
七、收获:
〔1〕通过本次实验,我掌握了键盘电路硬件和软件设计的基本方法与技巧
〔2〕通过本次实验,我学会了独立设计出满足各种需要、适应各种场合的键盘电路。
〔3〕通过本次实验,我明白了,实物调试的重要性,光纸上谈兵是远远不够的,应多动手,
多动脑,在实战中学习,在实战中进步。
本文发布于:2023-03-14 14:24:16,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/fanwen/zuowen/1678775058248275.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:键盘灵敏度.doc
本文 PDF 下载地址:键盘灵敏度.pdf
留言与评论(共有 0 条评论) |