目录
独立按键
轻触按键,相当于是一种电子开关,按下时开关接通,松开时开关断开,实现原理是通过轻触按键内部的金属弹片受力谭东来实现接通和断开。独立按键模块开发原理图如下,注意P31和P30分别控制的是K1和K2!!
今天的主要任务就是通过对独立按键进行编程,可以通过轻触按键以达到控制LED的功能。
今日任务一:独立按键控制LED的亮灭
思路分析:此任务拟使用K1按钮来控制LED,所以我们就需要对P3_1寄存器进行赋值,当P3_1==0时,表示此按键被按下,LED亮,当P3_1!=0时,就表示按键没有被按下,LED灭,意思就是长按灯亮,不按灯灭。所以我们可以通过if语句来作判断,于此同时还需要加上一个while循环将其包裹,以至于可以重复判断,其代码如下所示:
#include <REGX52.H>
void main()
{
while(1)
{
if(P3_1==0)
{
P2_0=0;
}
else
{
P2_0=1;
}
}
}
任务一还是比较容易实现的。
今日任务二: 独立按键控制LED的状态
思路分析:有了任务一的基础,我想通过轻触一下来控制LED的状态应该很容易了吧,同样通过if语句就可以实现了,只是需要判断一下K1按键是否被按下即可以及是否松开就可以了,那如何判断按键是否松开了呢?可以通过一个空while语句来实现,如果检测到K1按键一直被按下,就将程序阻断,松开后才能进行下一步操作,由于是控制LED灯的亮灭,每次操作只需要将P_2取反就行,所以就有了以下的代码:
#include <REGX52.H>
void main()
{
while(1)
{
if(P3_1==0)
{
while(P3_1==0);//阻断 判断按键有没有松开
P2_0=~P2_0;
}
}
}
下载到板子上面之后,确实实现了我们需要的功能,但是这样真的完美吗?
下面补充一点按键的抖动的知识:对于机械开关,当机械触点断开、闭合时,由于机械触点的弹性作用,一个开关在闭合时不会马上稳定地接通,在断开时也不会一下子断开,所以在开关闭合及断开的瞬间会伴随一连串的抖动,大概如下图所示:
其抖动时间很短,大概只要5-10ms,所以我们刚刚的我们看到实验现象是正常的,这是因为人眼分辨不出来。需要延时20ms