独立按键的使用(2)

上一节的按键的使用中,效果是按下键亮,弹起后又灭,无法保持状态,下面的实现按下弹起后,实现一次切换;

#include <reg52.h>



sbit LED = P0^2;  //控制引脚

sbit Key = P0^0;  //按键



void main(void)

{

    LED = 0;                   //初始亮

    while (1)

    {

        if (!Key)              //如果按下

        {

          LED = !LED;        //切换LED状态

        }

    }

}

测试后发现,按键按下弹起的时间间隔不同,效果也不同,有时会出现按下弹起后状态并没有改,这是因为,虽然按下了键也弹起了,但是当程序顺序执行到 if (!Key) 时,可能键已经是按下后的弹起状态,造成抖”动“,为了更好的实现一次按键按下弹起只切换一次LED的状态,代码修改如下:

#include <reg52.h>



sbit LED = P0^2;  //控制引脚

sbit Key = P0^0;  //按键



void delay(unsigned int t);



void main(void)

{

    LED = 0;                   //初始亮

    while (1)

    {

        if (!Key)               //如果按下

        {

            delay(1500);       //延时去抖 一般10-20ms

            if (!Key)           //如果还处于按下状态,说明是有效的

            {

                while (!Key);  //如果一直是按下,等待弹起,注意这要有";"

                LED = !LED;       //弹起后切换LED状态

            }

        }

    }

}



void delay(unsigned t)

{

    while(--t);

}

这是使用软件防抖,另外还可以在硬件电路上设计防抖,以后再学习。

你可能感兴趣的:(使用)