? ? ? ? 之前的课程内容,小编带领大家学习了按键的基本知识,那么这节课,小编就带领大家来继续深挖下,按键的布局种类和识别方式。
? ? ? ? 按键的布局可以分为独立式和矩阵式,
????????上一节讲到智能电路(2)之按键模块-CSDN博客,就是独立式,这种方式结构简单,编码逻辑清晰。缺点也是非常明显的,就是占用的GPIO的资源较多,一个按键就需要占用一个引脚,主控芯片的引脚数量式有限的。
? ? ? ? 矩阵式布局,很好的解决了上述问题,矩阵键盘的原理是通过在行和列之间建立一个矩阵连接来实现的。每个按键都被分配给矩阵中的一个行和一个列,这意味着你可以通过扫描每个行和列的交点来确定哪个按键正在被按下。对于16个按键的矩阵键盘,需要4行和4列的矩阵来表示,因此只需要8个引脚就可扫描这个矩阵。与独立按键不同,矩阵键盘按键,它两端都是IO口。
????????
? ? ? ? 每种主控芯片的部分引脚式支持事件触发方式的:上升沿触发、下降沿触发、低电平触发和高电平触发。我们通过将按键的输出端接入到这些支持事件触发的引脚上即可,当按键按下的时候就会触发事件,我们在事件函数里面写业务代码即可。
? ? ? ? 但是带事件触发方式的引脚的资源比较有限,可以留着重要的业务来触发事件使用,针对按键的识别,我们有其他更好的方式。
? ? ? ? 针对独立按键和矩阵键盘,扫描方式也是不同。
????????单片机硬件按键有接电源和接地两种接发,我们通过程序判断当前引脚电平的高低来判断按键按下/放开。
? ? ? ? 我们知道机械按键在按下和弹起时,会因为产生抖动,出现高低电平快速变化,因此我们必须进行消抖处理。常用的消抖方法有两种:电容消抖和软件消抖
①电容消抖,利用电容的放电延时,采用并联电容法,使两端电压平缓变化,直至电容充放电到达一定电压阀值时,单片机才能读取到电平变化。
②延时消抖,通过增加延时来二次判断按键是否被按下
if(switch == 0)//判断switch按键按下时
{
Delay_ms(20);//延时消抖
if(switch == 0)//再次判断switch按键按下
{
while(!switch);
//请将按键功能写在下面
}
}
????????我们可以代码设置输入端口为低电平,输出端口为上拉输入,如下图:
????????此时这个按键就与独立按键基本相同,以检测下面黄色按键为例讲解其扫描原理。
????????R2C3:首先先将输入端R1-R4的电平分别设置为1011,再将输出端C1-C4输出模式设置为上拉输入,那么当检测到输出端C3为低电平时,表示按键R2C3被按下。同理,当检测到C1\C2\C4为低电平时,表示按键R2C1\R2C2\R2C4被按下。
????????R3C2:首先先将输入端R1-R4的电平分别设置为1101,再将输出端C1-C4输出模式设置为上拉输入,那么当检测到输出端C2为低电平时,表示按键R3C2被按下。同理,当检测到C1\C3\C4为低电平时,表示按键R2C1\R2C3\R2C4被按下,其它按键与此相似。