软件去抖动检测到按键按下后资料_第1页
软件去抖动检测到按键按下后资料_第2页
软件去抖动检测到按键按下后资料_第3页
软件去抖动检测到按键按下后资料_第4页
软件去抖动检测到按键按下后资料_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

软件去抖动检测到按键按下后

独立连接式键盘连接图如右图所示。当没有键被按下时,所有的数据输入线都为高电平;当有任意一个键被按下时,与之相连的数据输入线将变为低电平;通过相应指令,可以判断是否有键按下。2.矩阵连接式键盘

键按矩阵排列,各键处于矩阵行/列的结点处,CPU通过对连在行(列)的I/O线送已知电平的信号,然后读取列(行)线的状态信息。逐线扫描,得出键码。其特点是键多时占用I/O口线少,硬件资源利用合理,但判键速度慢。适用场合:多用于设置数字键,适用于键数多的场合。

4行4列矩阵式键盘连接图如右图所示。这种键盘适合采取动态扫描的方式进行识别。扫描方式:低电平扫描(回送线必须被上拉为高电平)、高电平扫描(回送线需被下拉为低电平)。右图中给出了低电平扫描的电路。3.薄膜开关特点:不需要进行导线与开关间的焊接,结构简单、体积小、防尘、防水、防有害气体侵蚀、寿命长、可靠性高。应用:与按键式键盘类似,多个薄膜开关也可按照独立式或矩阵式设计内部电路,其原理与普通键盘相同。

按键开关去抖动问题

*键盘的抖动时间一般为5~10ms,抖动现象会引起CPU对一次键操作进行多次处理,从而可能产生错误。⑴硬件去抖动

消除抖动不良后果的方法:其中RC滤波电路去抖动电路简单实用,效果较好。⑵软件去抖动检测到按键按下后,执行延时10ms子程序后再确认该键是否确实按下,消除抖动影响。

(1)开关状态的可靠输入。必须消除键抖动。可以采用硬件和软件两种方法,硬件方法就是在按键输入通道上添加去抖动电路;软件方法则采用延迟10~20ms

(2)键盘状态的监测方法——中断方式还是查询方式。

(3)键盘编码方法。

(4)键盘控制程序的编制。。

6.1.3键盘接口

功能:对键盘上所按下的键进行识别。分类:

(1)编码键盘:采用专用的编码/译码器件,被按下的键由该器件译码输出相应的键码/键值。其特点是增加了硬件开销,编码固定,但编程简单。适用于规模大的键盘。

6.1.2使用键盘时必须解决的问题

(2)非编码键盘:采用软件编/译码的方式,通过扫描,对每个被按下的键判别输出相应的键码/键值。其特点是不增加硬件开销,编码灵活,但编程较复杂,占CPU时间。适用于小规模的键盘,特别是单片机系统。键盘。1.键盘接口的工作原理

对于矩阵式键盘,如上页图所示,键盘的行线X0~X3通过电阻接+5V,当键盘上没有键闭合时,所有的扫描线和回送线都断开,无论扫描线处于何种状态,回送线都呈高电平。当键盘上某一键闭合时,则该键所对应的扫描线和回送线被短路,可以确定,变为低电平的回送线与扫描线相交处的键闭合。

CPU对键盘扫描的方式:程序控制的随机方式(CPU空闲时扫描键盘)、定时控制方式(定时扫描键盘)、中断方式。

CPU对键盘上闭合键的键号确定方法:根据扫描线和回送线的状态计算求得,或根据行线和列线的状态查表求得。

2.键输入程序的设计方法

(1)判断键盘上是否有键闭合;(2)消除键的机械抖动;(3)确定闭合键的物理位置;(4)得到闭合键的编号;(5)确保CPU对键的一次闭合只做一次处理3.键盘接口方式(1)独立式键盘接口(静态方式)特点:结构简单,每个按键接单片机的一条I/O线,通过对输入线的查询,可以识别每个按键的状态。[例题]

在MCS-51单片机系统中,设计一个含8个按键的独立式键盘。解:在MCS-51中,含8个按键的独立式键盘的线路连接如下页图所示,8个按键经上拉电阻拉高后分别接到MCS-51单片机P1口的8条I/O线上(P1.0~P1.7)。

在无键按下的情况下,P1.0~P1.7线上输入均为高电平。当有键按下时,与被按键相连的I/O线将得到低电平输入,其他位按键的输入线上仍维持高电平输入。

P1口8条I/O线经与非门74LS30实现逻辑与非后,再经过1个非门74LS04进行信号变换,然后接至MCS-51的引脚上,可通过中断的方式处理键盘。在中断服务程序中,先延时20ms消除键抖动,再对各键进行查询,找到所按键,并转到相应的处理程序中去。

CLOSE: JNB ACC.7,KEY7 ;查询7号键

JNB ACC.6,KEY6 ;查询6号键

JNB ACC.5,KEY5 ;查询5号键

JNB ACC.4,KEY4 ;查询4号键

JNB ACC.3,KEY3 ;查询3号键

JNB ACC.2,KEY2 ;查询2号键

JNB ACC.1,KEY1 ;查询1号键

JNB ACC.0,KEY0 ;查询0号键

INT0: RETIKEY7: …… ;7号键处理程序

KEY71: MOV A,P1 ;再读P1口各引脚

JNBACC.7,FUNC71 ;确认键是否释放

RETIKEY6: …… ;其他键处理程序

…… D20: …… ;20ms延时子程序

…… END

主程序如下:

ORG 0000H LJMP MAIN ORG 0003H ;外部中断0中断服务入口地址

LJMP INT ;转中断服务

ORG 0100H MAIN: SETB EA ;开总中断允许

SETB EX0 ;开INT0中断

SETB IT0 ;下降沿有效

……中断服务程序清单如下:

INTI CALL D20 ;延时去抖动

MOV P1,#0FFH ;P1口送全1值(准双向口原因)

MOV A,P1 ;读P1口各引脚

CJNE A,#0FFH,CLOSE ;验证是否确实有键闭合

AJMP INT0 ;无键按下(按键时间过短)则退 ;出中断(2)矩阵式键盘接口——行反转法

矩阵式键盘按键识别方法有行反转法和扫描法等。行反转法需要两个双向I/O口分别接行、列线。步骤如下:

(1)由行线输出全“0”,读入列线,判有无键按下。(2)若有键按下,再将读入的列列线输出,读进行线的值。(3)第一步读进的列线值与第二步读进的行线值运算,从而得到代表此键的唯一的特征值。行反转法因输入与输出线反过来用而得名。优点是判键速度快,两次即可。[例题]请为8051微处理器设计一个由4行4列键阵构成的键盘。解:4×4矩阵键盘的线路连接如下页图所示。其中P2口的低4位作为输出线。P1口的低4位作为输入线,输入线通过74LS21进行逻辑相与后作为8051的一个外部中断源输入。当有键按下时就将引起中断。中断服务程序要对所按的键进行判别。

(1)查询闭合键的位置子程序KEYR

KEYR子程序用以确定每组线中哪一位为0,是否有多个0。在调用前,应将读某组线的数据存入累加器A中。KEYR子程序返回时,某组线中0的位置(0~3)保存在R3中。按键闭合引起中断后,执行中断服务程序。表2-5工作寄存器组选择控制表KEYR子程序如下:

KEYR: CJNE A,#0FEH,TESTP11 ;测试P1.0 MOV R3,#0 ;P1.0=0,说明被按键的输入线为P1.0 LJMP FINISH ;返回

TESTP11: CJNE A,#0FDH,TESTP12 ;测试P1.1 MOV R3,#1 LJMP FINISHTESTP12: CJNE A,#0FBH,TESTP13 ;测试P1.2 MOV R3,#2 LJMP FINISHTESTP13: CJNE A,#0F7H,FINISH ;测试P1.3 MOV R3,#3FINISH: RET

(2)中断服务程序

中断服务程序开始部分应利用软件延时消除键抖动,然后再对所按的键做出处理。中断服务程序如下:

ORG1000H INT11:LCALLDELAY ;延时去抖动

MOV A,P1 ;读输入线

ANL A,#0FH ;判断是否有键闭合

CJNE A,#0FH,TEST ;有键闭合,转判断按键程序

RETI ;无键闭合,返回

TEST:MOV B,A ;暂存

LCALL KEYR ;调用读取子程序

MOV 40H,R3 ;暂存在40H单元

MOV P2,#0FFH ;输出线写1 MOV P1,B ;输入线写入数据

MOV A,P2 ;读输出线

LCALL KEYR ;调用读取子程序

XCH A,R3 SWAP A ORL 40H,A ;得按键特征值

RETI

中断程序结束后,键的特征值存放在40H单元中。此键的输出线号位于40H单元的高4位,其输入线号位于低4位。此后,根据40H单元的内容去查表,得到相应键的代码,可进行显示或其他处理。(3)去抖动的延时子程序DELAY

利用CPU的空闲方式,通过定时器T1实现延时,T1必须预先置初值,以得到需要的延迟时间。设晶振频率为6MHz,欲延时20ms,定时时间为:(216-TC)×6/12=20×103μs,初值:TC=25536=63C0H。程序如下:

DELAY: MOV TOMD,#11H ;方式1定时

MOV TL1,#0C0H ;定时器1定时初值

MOV TH1,#63H SETB EA ;开中断

SETB ET1 ;开定时器1中断

SETB PT1 ;定时器1为高级中断(因被键盘中断调用)

SETB TR1 ;启动定时器

ORL PCON,#1 ;启动空闲方式,实际CPU在此处等待

CLR TR1;以下四条指令只有在延时后,定时器被唤醒,才能执行

CLR PT1 CLR ET1 RET END (4)通过串行口扩展键盘接口

MCS-51系列单片机的串行口与串/并转换芯片配合(如串入并出芯片74LS164)可以扩展键盘。[例题]

利用MCS-51的串行口与串/并转换芯片配合,扩展2行8列的键盘接口,键号为0~15。要求给出其硬件连接和键盘查询子程序。解:串口与串/并转换芯片配合扩展键盘的线路连接如下图所示。

其中,P1.0和P1.1作为行线。键盘的编码为:P1.0线上的8个键分别为00H+(00H~07H),P1.1线上的8个键分别为08H+(00H~07H)。扫描线(00H~07H)的具体值存放在R4中。程序采取查询方式读取键号,并且考虑了键的抖动问题。DLY1是延时子程序。

程序如下:

ORG1000H SERKEY:MOVSCON,#00H ;设置串行口

MOVA,#00H ;键盘初始化,送00H到列线上

LCALLVARTO ;发送数据

CHK:JNBP1.0,CHK0 ;检查是否有键按下

JNBP1.1,CHK0 ;检查是否有键按下

AJMPCHK ;无键按下,继续查找

CHK0:LCALLDLY1 ;调用10ms延时子程序,去抖

JNBP1.0,CHEN ;确实有键按下,转CHEN JNBP1.1,CHEN AJMPCHK ;无键按下,继续查找

CHEN:MOVR2,#0FEH ;首列扫描字送R2,查键号,最低位为0 MOVR4,#00H ;首列偏移值送R4

CHKN:MOVA,R2 ;发送列扫描字

LCALLVARTO JB P1.0,CH1 ;检查P1.0有无键按下;若无,转CH1 MOVA,#0 ;第一行首列值送A,00H+(R4)

AJMPCKEY ;转求键号

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论