计算机按键去抖动的方式,键盘去抖动原则和方法

本文介绍了单片机中常见的按键抖动问题及其解决方案,包括硬件去抖和软件去抖方法。硬件去抖通常使用触发器或单稳态电路,而软件去抖则通过延时程序来避免抖动影响。通过一个实验展示了如何在单片机程序中实现按键去抖动,以确保按键操作的准确性。修改后的程序在按键按下和释放时分别加入延时,确保了对按键状态的正确读取。
摘要由CSDN通过智能技术生成

常用的去抖动方法有两种,即硬件方法和软件方法,两种方式的去抖效果相近,硬件去抖动的方法很多,主要用触发器或单稳态电路构成消抖电路。另外,由于软件去抖比较方便,不用增加额外的硬件开销,所以一般场合都采用软件去抖。单片机中常用软件去抖动法,软件法其实也很简单,就是在单片机获得端口为低电平的信息后,不是立即认定按键已被按下,而是延时10ms或更长一些时间后再次检测该端口,如果仍为低,说明此键的确被按下了,这实际上是避开了按键按下时的抖动时间,而在检测到按键释放后端口为高电平时,再延时50ms,消除后沿的抖动,然后再对按键进行处理,不过一般情况下,通常不对按键释放的后沿进行处理,实践证明也能满足日常的要求。如图8-3所示为按键抖动现象和硬件去抖动电路。

fedaa34718ff6efa0bd498ff13fe03c5.png图8-3 按键抖动现象和硬件去抖动电路

下面通过一个实验来验证一下,实验程序如下:

ORG 0000H ;

AJMP START ;

ORG 0030H ;

START:MOV SP,5FH ;

MOV P1,#0FFH ;

MOV P3,#0FFH ;

L1:JNB P3.4,L2 ;按下按键开关取反一次P1.0 灯亮,再按一次灯灭

JNB P3.5,L3 ;按下按键开关取反一次P1.1 灯亮,再按一次灯灭

LJMP L1 ;

L2:CPL P1.0 ;

LJMP L1 ;

L3:CPL P1.1 ;

LJMP L1 ;

END

把这个程序下载到单片机会发现,当按下相应的按键时,并不是像想象中的按一下灯亮再按一下就灯灭,而是有时灵有时不灵,为什么会这样呢?原来当按了一次按键,可是单片机却早已执行了好多次,如果执行的次数是奇数,那么结果相符;如果执行的次数是偶数,结果相反。为了使CPU能正确地读出端口的状态,对每一次按键只作一次响应就必须考虑如何去除按键的抖动。下面把前面的程序进行修改,实现按键的去抖动:

ORG 0000H;

AJMP START;

ORG 0030H;

START:MOV SP,#5FH;

MOV P1,#0FFH;

MOV P3,#0FFH;

L1:JB P3.4,L2;P3.4为1时不做处理,转P3.5 否则说明有键按下

LCALL D10mS;调用延时程序去除抖动

JB P3.4,L1;P3.4为0,说明此键确实被按下了

CPL P1.0;取反P1.0

L3:JNB P3.4,L3;直到P3.4释放后转去判断第二个键

L2:JB P3.5,L1;P3.5为1,返回继续处理P3.4,否则说明有键按下

LCALL D10mS;调用延时程序去除抖动

JB P3.5,L2;P3.5为0,说明此键确实被按下了

CPL P1.1;取反P1.1

L4:JNB P3.5,L4;直到P3.5释放为止

LJMP L1;返回

D10mS:MOV R7,#50;延时的时间一般为5~20ms

D1:MOV R6,#100;

D2:DJNZ R6,D2;

DJNZ R7,D1;

RET;

END

把这段程序写入单片机查看结果,与预测相符,这就是独立式按键去抖动的基本方法,不过这个程序在实际应用中并没有多大的意义,因为如果按键数量比较多,程序就会变得很长,因为这里采用了直接寻址的方式,如果把键值放入一个表格中,再通过查表程序来判断到底是哪个按键被按下,然后处理相应的程序就会很简单,读者可尝试实现。

举报/反馈

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值