第六章 GPIO输入——按键检测
目录
本章参考资料:《W55MH32中文参考手册》按键检测使用到GPIO外设的基本输入功能。
1 硬件设计

按键机械触点断开、闭合时,由于触点的弹性作用,按键开关不会马上稳定接通或一下子断开, 使用按键时会产生图 按键抖动说明图 中的带波纹信号,需要用软件消抖处理滤波,不方便输入检测。本实验板连接的按键带硬件消抖功能, 见下图:

它利用电容充放电的延时,消除了波纹,从而简化软件的处理,软件只需要直接检测引脚的电平即可。
从按键的原理图可知,这些按键在没有被按下的时候,GPIO引脚的输入状态为低电平(按键所在的电路不通,引脚接地),当按键按下时, GPIO引脚的输入状态为高电平(按键所在的电路导通,引脚接到电源)。只要我们检测引脚的输入电平,即可判断按键是否被按下。
若您使用的实验板按键的连接方式或引脚不一样,只需根据我们的工程修改引脚即可,程序的控制原理相同。
2 软件设计
2.1 按键输入检测方式
按键输入检测方式分为定时扫描和外部中断两种,工作原理和优缺点如下文所示。本篇我们主要讲解用外部中断的方式进行按键输入检测。
2.1.1 按键扫描
工作原理:通过 CPU 定时或不断地读取按键所连接的 GPIO 引脚电平状态,来判断按键是否被按下。比如在一个循环中,反复检测按键对应的引脚是高电平还是低电平 ,若原本是高电平,检测到变为低电平,且经过消抖处理(一般通过延时,比如 5~10ms 再次检测确认)后还是低电平,就认为按键被按下;松开时则相反。像独立按键扫描,就是单独检测每个按键引脚;矩阵按键扫描则是按行或列扫描,通过行列交叉点判断哪个按键动作 。
优点:
- 原理简单易懂,实现起来相对容易,对于初学者友好。
- 可灵活控制扫描频率和时机,在一些对按键检测实时性要求不高,且系统资源较为充裕的场景下,能很好地工作。
缺点:
- 占用 CPU 资源,CPU 需要不断执行扫描程序来检测按键状态,若系统中还有其他任务,会影响整体运行效率。
- 实时性较差,因为是定时或不断扫描,不能及时响应按键动作,存在检测延迟。
2.1.2 外部中断
工作原理:当外部事件发生,比如按键按下使连接到单片机的外部中断引脚上电平发生变化(可配置为上升沿触发、下降沿触发或双边沿触发 ),单片机的中断系统会迫使 CPU 暂停正在执行的程序,转而去执行预先编写好的中断服务程序来处理该事件,处理完后再返回原来中断的地方继续执行原程序 。以按键为例,按键连接到外部中断引脚,按下按键产生电平变化,触发中断请求,CPU 响应后进入中断服务函数处理按键事件。
优点:
- 实时性强,能在外部事件发生的瞬间及时响应,快速处理事件,适用于对实时性要求高的场景,如工业控制中对突发信号的快速响应。
- 节省 CPU 资源,CPU 不需要一直轮询检测按键状态,只有在外部事件触发中断时才会处理相关事务,提高了 CPU 使用效率。
缺点:

最低0.47元/天 解锁文章
268

被折叠的 条评论
为什么被折叠?



