能否说明独立式键盘的特点及适用场合,是如何用软件法消除按键的?

古古怪怪嘎嘎嘎丰富


特点

独立键盘的特点是廉价、简单,几乎可以应用在所有需要控制的场景中。

只要按下去会返回的几乎都是独立式键盘,最明显的就是iphone的Home键了,在你按下去之后,它的键盘还会回到最初始的状态,这就是独立式键盘。

除此之外,我们的电脑键盘、遥控键盘这些也是独立键盘。

但是这种键盘不是独立键盘,比如iPhone的静音键,它有两种状态,分别是静音和非静音状态,且不能自己恢复。

电路符号

独立键盘和非独立键盘的电路符号如下:

独立按键的好处是可以反复的施加同一个信号,比如手机的音量键,我们按下去一次,音量增加一点,以此往复。

总之独立按键可以做很多非独立按键不能做的事情。

软件消抖

什么是软件消抖?

我们先看一下独立按键的应用场景

当按键未按下的时候,单片机检测到的是5V电平;

当按键按下时,单片机检测到的是0V;

但是呢,真是的按键按下的时候不是这样的。

我们可以看一下按键在按下的这一瞬间电位的波形。

从波形可以看出,按键并不是按下之后立马变为0V,而是有一个抖动的过程。

如果单片机直接检测,可能会乱动作,这时候应该给单片机加一个延时,比如说在第一次检测到按键按下之后,延时30ms,然后再检测一次,如果此时检测到的还是按下的状态,则说明按键被按下。

至于这个延时是多少,还得具体按键具体分析,如果是做产品要用到软件消抖,一定要拿示波器测试一下抖动的波形,看看抖动的时间到底是多少!


爱上半导体


朋友们好,我是电子及工控技术,我来回答这个问题。键盘作为一种输入设备,它是人机交换的重要入口。通过键盘的机械按键的断开与闭合可以向单片机输入各种命令和数据,这些机械按键可以组成互相独立互不干涉的按键我们叫它独立按键、还有的按键是相互关联的,我们叫它矩阵按键。下面我们根据题目的要求和朋友们聊聊独立按键的这些问题。

独立按键

1、独立按键的结构与工作过程

独立按键从原理图中可以看出它们的按键一端都是与GND接地的,按键的另一端呢?它是与单片机的I/O口连接。若用手按下按键时相对应的I/O口就会被接地端的按键拉成低电平(0V),如果手松开时独立按键所对应的I/O口就会被上拉电阻提升到高电平。就这样单片机通过程序指令实时检测所对应独立按键I/O口的高低电平情况就可以判断出每个I/O口是否被按下了。

第一步是先判断是不是有按键被按下,上面讲了通过检测高低电平就可以判断出有没有按键按下。

第二步是要对按键的抖动进行处理,因为我们常用的按键都是机械式的微动按键,在用手按下或松开的瞬间由于按键的机械结构原因会有大约15毫秒左右的抖动,这样就会在电平的下降沿和上升沿就会出现一系列的抖动波形,这样会对单片机产生误操作,必须要采取消抖动的方法。具体如何操作下面与朋友们分享。

第三步是抖动消除完成后需要再一次判定按键的动作是不是真的被按下,如果这时单片机还是检测到是低电平说明按键确实被按下了,然后就该确定是哪个按键被按下了,这时我们就可以给按键通过程序起个“名字”(键码),然后就可以去执行相应的任务了。

第四步是要回复按键的初始状态,也就是说要判断按键是不是被松开了,因为我们不能一直按着按键不动,需要把手解放出来。最后再把我们所接的按键I/O口恢复到初始的高电平状态。就这样按照这四个方法按键就可以稳定地去“发号施令”了。

2、独立按键的特点

独立按键的特点可以从原理图中看出它们各个按键彼此都是独立的,每个按键输入线的输入电平变化不会相互之间受到受影响的。每一个按键要占用一个独立的I/O口,这种按键所占用单片的端口资源比较多,使用较多按键时会占用较多的单片机端口,一般需要在按键较少的场合用比较合适。

另一个方面,从整个独立按键的组成看它们的结构是很简单的,在编写程序时比较容易编写按键的输入程序,因此这种独立按键配置灵活、结构简单、操作程序很容易实现。

用软件防按键抖动处理的方法


软件的抖动前面我们已经做了简单的介绍,在这里我与朋友们分享一下如何对按键进行防抖动的处理。在按键消抖动的问题上我们一般采用两种方法,一种是软件的消抖动的方法另一种是硬件消抖动的方法。

1、用短暂延时法去消抖动的方法

软件消抖动主要是通过编写程序,通过一定的“算法”来实现。由于这种算法比较多,下面我就介绍两种供朋友们参考一下。第一种就是“入门级”的方法,对于刚学单片机的朋友们较常用的。我们暂且称为“短暂延时法”,其工作过程就是在第一次检测到有按键按下时,我们用一个延时15毫秒左右的子程序把这个前沿抖动的不确定的电平直接“屏蔽”掉,然后再一次确认该电平的状态,如果检测到按键还是闭合的状态说明按键确实按下了,就去执行相应的命令就行了,如果按键不是闭合说明是因为干扰造成的,单片机就无响应。

2、按键连续扫描判断法

第二种方法是我在学单片机时单片机老师给介绍的一种,今天借这个机会给朋友们分享一下,首先在编写程序时我们要用单片机里面的一个定时器作为每2ms产生一次中断并扫描一次按键电平状态存储起来,就这样连续检测 8 次后看看这连续 8 次的按键状态是不是一样的。 检测8 次按键的时间大约在 16ms,如果在 16ms 内按键都是一样的电平就说明按键处于了稳定的状态。就这样每经过 2ms 左移一次,每移动一次就判断当前连续的 8 次按键状态是不是全为高电平(1) 或者全为低电平(0) ,如果是全为高电平(1)则说明是按键弹起了,如果低电平(0)的话则说明按键时处于按下的状态,如果既有高电平(1) 也有低电平(0)就说明按键是处于抖动的时间,不做任何判定。

利用这种软件的方法可以避免通过延时消抖占用单片机执行时间,提过了单片机执行程序的效率,如果有传感器需要采样的话更能突出这个软件防抖动的优势,现在我编写按键防抖动一般都采用这种方法。

用硬件防按键抖动处理的方法

用硬件防按键抖动的方法不是很常见,但是在有的单片机控制场合也会用到。它一也般采用两种方法,一种是采用双稳态消抖动电路,另一种是用滤波消抖动电路。前者主要是用两个与非门构成一个RS触发器来实现的,后者是用RC积分电路具有吸收干扰脉冲的功能来实现的。


这种电路的原理是根据电容两端的电压不能突变来实现的,就是说当按键按下时只要电容C两端的电平的波动不超过非门的开启电压(0.8V),那么门电路的输出就不会变化,只要选择好适当的电容和电阻就可以比较理想地防护按键的抖动了。

矩阵按键

以上我们都是说的独立按键,但是在相当一部分单片机控制电路里由于I/O口的数量限制,当需要较多的按键输入口时都采用了矩阵的按键模式。

如下图原理图所示的那样,如果 KeyOut1 输出一 个低电平(0),那么就相当于KeyOut1是 接地的,这就类似 四个独立按键。此时就必须把 KeyOut2、 KeyOut3、KeyOut4 都置为高电平输出才行,只有这样才能保证与它们相连的三路按键 不会对这一路产生干扰。

这种矩阵电路可以占用较少的I/O口,对于使用按键较多的单片机控制电路中用这种按键方式比较好。以上就是我对这个问题的解答。欢迎朋友们参与讨论,敬请关注电子及工控技术,感谢点赞。


电子及工控技术


单片机系统当中,最常用的外设和人机输入就是按键,按键常分为独立按键,矩阵按键,AD按键等。


什么是独立按键以及特点

一个按键独立占用一个单片机端口,完成高低电平的变化,从而实现各种按键的逻辑判断。

独立按键的特点,区别于AD按键和矩阵键盘,独立按键的逻辑判断简单,硬件设计简单,主要是占用单片机的端口资源。

独立按键的应用场景, 一般来说在按键个数较少,或者按键有多重功能复用时,考虑使用独立按键。

按键的消抖方式

为什么需要消抖,这是因为在按键按下时候,会形成一个简短机械的反复电平抖动,而这种电平的抖动会容易造成误判干扰,所以必须避开,一般有两钟方法。

硬件消抖,在按键并联电容,利用电容对快速变化的电平有滤波作用而消抖。这种方式其实很少用。

软件消抖,在单片机判断时,在按键按下的这个过程中,软件避开抖动电平的区间。一般按键都是使用软件消毒消抖。

独立按键实现长按,短按,连按的实现思路和方法

在很多的初级教学视频当中,常见使用delay函数延时10到 20ms避开抖动,其实这种方式有很大缺陷,不适合批量产品。

原因:单片机执行程序的时候,是使用顺序执行,使用delay消抖,占用了单片机资源,没办法处理其他的任务。也没办法复用按键,对连按,短按,长按,按下起反应,按后起反应进行区分与处理。

按键的思路:

1需要一个能够计时的设备,计算你需要延时消抖的时间时长,这个部分就需要使用定时器。

2,每次按键按下,电平变化,定时器计数变量开始计数,等到时间,按键依旧有效,则触发,如果中途按键电平变化,则计数变量清零,一般这个时间设置为10ms即可。

3,当松开按键,电平回复成正常时,则清除计数变量的值。如下图所示,则是对按键的 按键松开起反应的代码说明,按键松开后,按键状态位值1。

我是科技电小二,一名嵌入式开发工程师,如果您觉得这篇文章对您有所帮助,那么点个赞,并加个关注吧。

科技电小二


机械按键应该十分广泛,去抖是必须的流程

轻触开关在电子产品中的应用是极为广泛的,虽然触摸感应技术已经非常成熟,有着防水、防尘、寿命长的优势,但机械的开关也有着它的优点,机械式的按键手感更好,不易误触发。


轻触开关原理

轻触开关内部有一个窝仔状的金属片,俗称为窝仔片。当用力按下时,窝仔片中心就会与底下的金属触点导通。失去作用力后,窝仔片恢复原状,触点断开。

轻触开关按下和释放的瞬间会出现抖动,特别是按下瞬间,会出现多次连续的、快速的导通和断开的过程,所以刚按下瞬间的导通是不可靠的,如果把这些瞬间导通都当作输入,就会出现误操作。

软件去抖原理

读取按键输入时,需要把导通瞬间的抖动去除,才可以获取到可靠的按键输入。最简单的去抖方法就是延时。比如检测到按键按下时,我们可以延时大约10~50ms(根据按键的特性),再次读取按键的状态,如果还是按下状态,就可以认为是可靠的输入了。

延时去抖是最简单的方法了,但延时过程直接占用MCU的资源,不能运行其它程序,如果其它任务时间要求较高的话,可以想一下其它方法。

程序循环去抖法:第一次检测到按键按下时,只设置一个标志位,程序再次(或者多次)循环回来时,再读取按键状态,如果还是处于按下状态才认为是可靠的输入,否则清除标志位。

定时去抖法:第一次检测到按键按下时,打开一个计时器进行计时,计时器到达20ms后,再读取按键状态,如果还是处于按下状态才认为是可靠的输入。

还可以给按键并联一个小电容,在硬件上进行去抖,但软件去抖还是必不可少的。

欢迎关注@电子产品设计方案,一起享受分享与学习的乐趣!关注我,成为朋友,一起交流一起学习

记得点赞和评论哦!非常感谢!