一、按键介绍
1、按键是一种电子开关,使用的时候,只要轻轻的按下我们的这个按钮,按钮就可以使这个开关导通。
2、当松开这个手的时候,我们的这个开关,就断开开发板上使用的这个按键,它的内部结构,我们可以看到左图右图这一块,就是我们的这个按键的一个内部的一个结构图。
3、这个,是我们的一个开发板上使用的这种按键,然后,看一下这个按键上面有四个角,这个角被这个挡住了。
(1)然后呢,我们可以从这个结构图当中可以看到,这两个角距离相对于这两个角的距离,要长一点,那对应到我们这个图当中就相当于一角和三角以及二角和四角,
(2)这个时候,初始是导通的,也就是说这两个角在你用按键不按下的时候,这两个角就是连接在一起的,你用万用表去测量它的导通性的时候,这两个角是连接在一起导通的。然后这两个角,三角和四角也就是这两个短的,三角和四角这两个短的,它是不导通的,也就是说你当按键没按下的时候,这两个角是不导通的,你按下的时候,它这个就导通了。
(3)所以呢,当我们要使用按键来控制一些我们的外部设备的时候,那这个充当开关的这个功能,就相当于我们的三角和四角,或者我们的一角和二角,这里就相当于一个开关,它初始情况不导通,那当按键按下的时候,这里就导通了一角和二角也导通。
(4)所以我们这里连接到假设这里有一个电源5V进来,然后连接到我们外部的一个风电机,我们电机另一端接GND,当我们按键按下的时候,这个5V就流到我们的电机这里来,然后呢,电机就有电,就进行工作,当我们松开的时候,这个电源,5V就进来,它这里是断开的,所以它流不进来,所以电机它不会转,所以类似一个开关的一个功能,这是我们的一个按键。
4、通常,我们的这个按键所使用的开关,都是一些机械的弹性开关,当我们的这个机械触点断开的时候或者是闭合的时候,因为这里的一个开关机械开关闭合或者是断开的时候,这个电压信号,我们可以看一下,这是理想的一个波形,理想的一个波形假设。
5、将我们的按键,这里接到我们的一个单片机管脚,另一端接到我们的GND,假设,然后,当我们的按键按下的时候,我们是不是理想状况下,这个管脚就变成了低电平了,这是一个理想的一个变电平。
6、然后呢,当我们的按键松开的时候,是不是这里就断开这个VCC,这个管脚这里通常有个下上拉,有个上拉电阻,所以它默认是VCC,也就是高电平,当按下的时候变成低电平,那松开的时候,这里是断开的,它由这个上拉电阻,把它拉高,所以这里又变成了高电平,所以这是一个理想的波形。
7、但实际上是不是这种波形呢,不是的,因为我们的这种机械开关,它里面会有一个抖动的情况,那我们来看一下实际的这种波形,当我们的按键没有按下,它默认是高电平,假设我们有上拉电阻,当我们按键按下的时候,这里呢会存在一个抖动,抖动过程之后,才会进入一个稳定的一个闭合状态,也就是说,当我们的按键按下的时候,刚开始它会有一个抖动的过程,抖动了一段时间之后,才变成低电平,变成低电平。同理,当我们按键松开的时候,它也是会有一个抖动,抖动一段时间之后,又变成了高电平,由我们的这个上拉电阻把它拉高,这才是我们的实际的一个波形。
8、这个抖动对我们后续有什么影响,我们能不能直接就是不管这个抖动产生的影响,不行的,这个抖动它的影响会比较严重,尤其是对于一些控制的设备,假设我对这个按键,低电平有效,按键按下的时候,我对单片机是输入,是低电平。
9、那我的程序在判断按键按下的时候,我假设我的程序是这样,比如说我这里连接的是IO口,IO口,那如果等于低电平,那我操作我的机台执行功能,但是这里有个抖动,抖动,那这里你按下的时候可能这里已经变成了低电平,然后这个器材执行,然后它又变成了高电平,然后又变成了低电平,又执行了一次,也就是说我们在按键按下的时候这个抖动有可能会让我们机台执行多次,这种情况,那同理这种释放也是一样的,尤其是在我们使用按键来统计我们按键按下的次数的时候,这个影响更为明显,因为你按键按下它这个抖动的过程中,有可能我们的程序如果是不对这个抖动处理的话,那你有可能对这个低电平的这个次数,有可能是多次的触发,多次的触发。
9、假设这个图里,我们认为是低电平,它累计一次按键按下,然后到了这里抖动,又累计一次,这样就实际上有了两次了,等到最后一次稳定又有三次,但实际上我们希望等到的是我们按键按下一次就是一次。而不是这里统计的三次,所以这个抖动我们是需要滤除掉的。怎么去滤除,首先我们要了解这个抖动的大概时间是多少,根据实际经验,这个抖动通常是5到10毫秒的一个范围,所以呢,如果把这个抖动的这一块时间,通过我们的延时滤除掉这一块,那到了稳定的时候,我再判断按键按下,是不是可以把这一块给滤除掉,同理,释放也是一样,那这样一来,我们怎么操作,假设同样回到我们刚才的这个例子。
10、如果我IO=0,然后执行,如果我们前面不进行滤波,不进行把这个抖动消除,那我就执行我们的功能,这样是不可以的,刚才我们已经解释了,但是现在我们要消除这个抖动怎么办,根据它的抖动的时间范围,它是5到10毫秒,那我就延时个10毫秒,我这里就有个delay。假设延时个10毫秒,这是10毫秒,延时了10毫秒之后,到了下面这一块,我继续判断,判断这个IO是不是等于零,那这个delay这一块是不是相当于把这一块的抖动给滤除掉了,因为我这里又进行了判断,前面这一块就不做其他的功能,只是一个延时,把这一块给忽略掉,然后再判断这个稳定的闭合状态,如果这一次确实是等于低电平,也就是说确实是按键按下了,那我再执行对应的功能,所以,通过这个delay就可以对这个抖动给消除掉。那么通常我们在使用按键的时候,我们通常都是前期判断按键,按下了再做处理,处理完之后,我们后面的释放,可能一般都不会去管它,当然你要去处理这一块,我们可以通过一个While循环,我们等待这个高电平,我们就退出。
11、像这里,如果不是高电平,那就不退出,不退出我们就认为按键还是处于按下的一个状态,当然这一块,我们也不用去处理,因为我检测到了这里,我就进行操作了,操作一次,后面就不管了,等待下一次按下,我又继续操作,这是我们的一个抖动的一个处理,刚才我们使用的是软件的一个消抖,这称为软件消抖,软件消抖的一个方法。所以在使用按键的时候,通常我们都要使用这种软件消抖。当然除了软件消抖,还有硬件消抖。
12、那么硬件消抖,顾名思义,它要增加额外的一些硬件,硬件电路比如说通过RC的一个电路,我在这个按键的一端,比如说我连到这个CPU的时候,我在这里接一个电阻,再接一个电容等等在串两级或者是一级都可以,然后再输入我们的IO口,那这里呢,这个电容RC就相当于一个充放电,当我按下的时候,我对这个电容充电,充电完成,然后再返回到这一块,就相当于这一块利用了充电的一个时间,把它给滤除掉,然后到了真正稳定的时间才传输给这个单片机的IO口。是这么一个电路。
13、当然网上还有各种各样比较经典的一些硬件消抖的一些电路,那么硬件消抖,顾名思义,它就要增加一些硬件,那对于如果说是在你的产品当中应用的按键数量比较多的话,那你一个按键要增加这种硬件的一个消抖电路,那它的一个电路的一个PCB占用的面积就比较大,而且你的成本也会增加,所以在实际的应用开放当中,我们通常采用的是软件的一个消抖方法,如果对于一些工业产品,可能会增加一些硬件的一个消抖方法,再配合软件消抖达到一个更好的效果。
二、硬件设计
1、
2、A2到A4使用了四个按键K1到K4,然后A5到A7使用的K1到K8总共八个按键,它们的使用方法是完全一样的,所以你会使用这四个按键的某一个,其他的按键使用都是完全一样,下面我们就来看一下,上面的这个A2到A4的四个按键电路我们可以看到,它是绑定到我们的IO口上面,绑定到我们的IO口,所以它是固定的,比如我们的K1按键,它是连接在P3.1管脚,所以你不能定义其他的管脚,因为它的硬件连接已经固定,无法更改。K2它是连到P30,K3连到P32,K4连接到P33,那么K3和K4的管脚P32,P33,这两个管脚又可以作为外部的一个中断的一个管脚。所以我们学习外部中断的时候,依然可以使用K3按键和K4按键。这是我们的四个按键的介绍。
另一端呢,是连接到GND,也就是我们刚才介绍的,当我们的按键按下的时候,这个GND是不是低电平,低电平这里就是连接在一起了。所以对应的管脚就会得到一个低电平。如果按键不按下,那么默认管脚就是高电平,因为它有上拉电阻,所以大家在识别这个按键的时候有没有按下的时候,那我们可以判断它是否等于低电平。
3、下面这个是我们的A5到A7的这个按键的一个电路,那从这张图我们可以看到,K1到K8,它是连接到这个端子排针上面JPI,因为我们介绍过A5到A7的板子,它的各个模块都是独立,我们要是用这个按键的话,就需要我们人为的把这个按键的一个管脚连接到我们的单片机任何一个管脚来进行一个实验的程序的一个编写,那么为了跟我们的教程配合兼容的话,那我们可以K1,K2,K3,K4也可以连接到P31,P30,P32和P33这么一个管脚,所以呢,你在做独立按键实验的时候,可以直接将我们的第一个K1连接到我们的P30,后面也是如此。这四个按键就跟我们的A2到A4的这个板子的一个程序就兼容了。那至于后面的四个按键,那你自己可以定义了。所以你要是用这个按键,你掌握一个它的一个软件的编写就可以了。
三、软件设计
1、本章所要实现的功能是:通过开发板上的独立按键K1控制D1指示灯亮灭。
2、