按键
基本概念
在单片机系统中,按键是最基础的人机交互元件,它通过简单的机械或电容触控方式,将用户的操作指令转化为电信号,为单片机提供精准的输入控制。按键的种类是比较丰富的,包含机械按键(实体按压)、薄膜按键(轻触式)、电容式按键(非接触感应)等,适配不同场景需求。
轻触按键由于微动开关的特性以及体积小、质量轻的优势在家用电器方面得到了广泛的应用,比如电视机按键、电脑按键、光驱按键、键盘按键、显示器按键、照明按键等,按键属于最常用的人机交互方式。
工作原理
轻触按键只要轻轻的按下按键就可以开关接通,松开时就断开连接,实现原理主要是通过轻触按键内部的金属弹片受力弹动来实现接通和断开的。
按键通过内部金属弹片实现通断,按下时触点闭合,松开后断开。机械触点动作会伴随5ms-20ms的抖动,单片机可以通过扫描或中断方式检测按键状态,实现“按下→检测→响应”的闭环逻辑。
电路分析
拓展
使用2个IO口实现3个按键的检测,并独立绘制出相关电路,并解释电路原理。
输入模式
程序设计
消抖处理
按键消抖通常的按键所用开关为机械弹性开关,当机械触点断开、闭合时,由于机械触点的弹性作用,一个按键开关在闭合时不会马上稳定地接通,在断开时也不会一下子断开。
因而在闭合及断开的瞬间均伴随有一连串的抖动,为了不产生这种现象而作的措施就是按键消抖。
消抖处理的方案可以分为硬件消抖和软件消抖,硬件消抖可以使用RS触发器或者RC积分电路,如果采用方案,则会导致硬件电路的设计变得复杂。
软件消抖指的是利用程序进行消抖处理,最常用的一种方案就是延时消抖,当用户按下按键时,先让CPU进行延时,当延时时间到达后,机械弹片已经稳定,此时再让CPU读取IO口的电平状态,可以提高程序的可靠性。
一般软件的延时时间选择在5ms~10ms左右时比较合理的,如果延时太长时间,会导致程序的实时性下降。
软件模拟
软件延时的一种方案是利用循环实现,比如在循环中让变量的值不断递减,达到一个时间差,这种方案有一个弊端:很难把握时间,所以利用逻辑分析仪可以进行程序调试。
硬件接线
程序设计
信号捕获
用定时器
利用MCU的定时器资源实现,但是该方案也有弊端:写代码较为复杂,并且需要使用MCU的定时器外设。
拓展方案
延时消抖其实仅仅是一种相对简单且非常基础的处理方案,在实际的应用场景中,通常会采用更加复杂和灵活的方式来实现按键的检测功能。
一般来说,工程师们更倾向于设计基于状态机的程序来完成按键扫描的任务。通过构建一个专门的状态机(switch),可以实现对按键行为的精确检测,例如单击、双击、长按、短按等多种复杂的按键操作。
状态机的优势在于能够根据按键的不同状态进行逻辑判断,并按照预设的规则逐一处理各种输入情况,从而确保按键检测的准确性和可靠性。这种方法不仅能够有效应对按键抖动的问题,还可以扩展支持更多高级功能,满足多样化的应用需求。

浙公网安备 33010602011771号