按键控制

学习过程跟随up主@海创电子

  在这之前,我们先看看开发板当中,有关按键的原理图部分。

按键动作过程

  当按键按下时,由于各个按键的另一端接地,单片机的管脚会接受到一个低电平信号。

  理想情况下,在未按下按钮时,电平信号为高电平,而在按键按下之后,电平信号由高电平变为低电平。

  而在实际情况下,当按钮按下时,会在高电平与低电平之间产生高低电平的交替现象,这一现象称之为抖动。在抖动现象结束后才会呈现出稳定的低电平,随着按键抬起时抖动现象再次出现,直至现象结束后回到高电平状态。

实现按键动作

按键动作流程

  如果要实现按键动作,需要先检测到低电平动作,检测到低电平动作之后,使用延时函数延时5ms。这里延时5ms是因为抖动现象开始到结束时间一般为5ms,延时过后相当于跳过抖动。之后再次检测是否为低电平,若为低电平则执行相应动作。

  “去抖”操作除了用软件可以实现,在硬件上也可以实现,这里讲的是使用软件去抖的方式。

程序实现——用按钮控制LED灯的亮灭

  这里控制LED的按钮是常见的按键开关,动作只有单纯的按下和弹起两种。这里我们选用if类型语句作逻辑判断。

“if”语句

while(1)
{
if(KEY == 0)
{
delay(5); //延时5ms
if(KEY == 0)
{
LED=~LED; //LED取反操作
}
while(!KEY); //判断按键是否松开
}
}

  “while(!KEY);”语句起到了判断按键状态的作用。若按键未释放,则KEY=0,那么!KEY=1,while语句就一直处于循环状态。同理,当按键松开时则跳出while语句循环。