51单片机 - 独立按键


轻触按键

01_51单片机 - 独立按键

一、独立按键控制LED亮灭

独立按键

  • 轻触按键:相当于是一种电子开关,按下时开关接通,松开时开关断开,实现原理是通过轻触按键内部的金属弹片受力弹动来实现接通和断开。

独立按键原理图

C51数据运算

C51基本语句

代码

#include <REGX52.H>

void main()
{
    while(1)
    {
        if(P3_1==0 || P3_0==0)    //如果K1按键或K2按键按下
        {
            P2_0=0;        //LED1输出0,点亮
        }
        else
        {
            P2_0=1;        //LED1输出1,熄灭
        }
    }
}

测试

二、独立按键控制LED状态独立

按键的抖动

  • 对于机械开关,当机械触点断开、闭合时,由于机械触点的弹性作用,一个开关在闭合时不会马上稳定地接通,在断开时也不会一下子断开,所以在开关闭合及断开的瞬间会伴随一连串的抖动。

代码

#include <REGX52.H>

void Delay(unsigned int xms)
{
    unsigned char i, j;
    while(xms)
    {
        i = 2;
        j = 239;
        do
        {
            while (--j);
        } while (--i);
        xms--;
    }
}

void main()
{
    while(1)
    {
        if(P3_1==0)  //如果K1按键按下
        {
            Delay(20);  //延时消抖
            while(P3_1==0);    //松手检测
            Delay(20);   //延时消抖
             
            P2_0 = ~P2_0;   //LED1取反
        }
    }
}

测试

三、独立按键控制LED显示二进制

代码

#include <REGX52.H>

void Delay(unsigned int xms)
{
    unsigned char i, j;
    while(xms--)
    {
        i = 2;
        j = 239;
        do
        {
            while (--j);
        } while (--i);
    }
}

void main()
{
    unsigned char LEDNum=0;
    while(1)
    {
        if(P3_1==0)            //如果K1按键按下
        {
            Delay(20);        //延时消抖
            while(P3_1==0);    //松手检测
            Delay(20);        //延时消抖
            
            LEDNum++;        //变量自增
            P2=~LEDNum;        //变量取反输出给LED
        }
    }
}

测试

四、独立按键控制LED移位

代码

#include <REGX52.H>
void Delay(unsigned int xms);

unsigned char LEDNum;

void main()
{
    P2=~0x01;                //上电默认LED1点亮
    while(1)
    {
        if(P3_1==0)            //如果K1按键按下
        {
            Delay(20);
            while(P3_1==0);
            Delay(20);
            
            LEDNum++;        //LEDNum自增
            if(LEDNum>=8)    //限制LEDNum自增范围
                LEDNum=0;
            P2=~(0x01<<LEDNum);    //LED的第LEDNum位点亮
        }
        if(P3_0==0)            //如果K2按键按下
        {
            Delay(20);
            while(P3_0==0);
            Delay(20);
            
            if(LEDNum==0)    //LEDNum减到0后变为7
                LEDNum=7;
            else            //LEDNum未减到0,自减
                LEDNum--;
            P2=~(0x01<<LEDNum);    //LED的第LEDNum位点亮
        }
    }
}

void Delay(unsigned int xms)
{
    unsigned char i, j;
    while(xms--)
    {
        i = 2;
        j = 239;
        do
        {
            while (--j);
        } while (--i);
    }
}

测试

按下移位

声明:三二一的一的二|版权所有,违者必究|如未注明,均为原创|本网站采用BY-NC-SA协议进行授权

转载:转载请注明原文链接 - 51单片机 - 独立按键


三二一的一的二