键盘灵敏度

更新时间:2023-03-14 14:24:18 阅读: 评论:0

折帽子-小童话故事

键盘灵敏度
2023年3月14日发(作者:幼儿园安全提示)

学生学号实验课成绩

学生实验报告书

实验课程名称监测控制系统应用

开课学院信息工程学院

指导教师×××

学生姓名×××

学生专业班级×××

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 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图