Skip to content

独立按键

【独立按键介绍】

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

当前开发板中,按键一端连IO口、一端连GND,按钮没被按下则IO口为高电平,按钮按下后IO口为低电平

控制LED亮灭

#include <REGX52.H>

void main(){
    while(1){
        if(P3_1 == 0){
            P2_0 = 0;
        }else{
            P2_0 = 1;
        }
    }
}

【机械抖动】

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

按键的消抖:

  • 硬件消除,进行过滤
  • 软件消除,延迟20ms左右

控制LED状态

#include <REGX52.H>

void Delayms(unsigned int xms)  //@12.000MHz
{
    unsigned char data i, j;
    while(xms--){
        i = 2;
        j = 239;
        do
        {
            while (--j);
        } while (--i);
    }
}

void main(){
    while(1){
        if(P3_1 == 0){
            Delayms(20);
            while(P3_1 == 0);
            Delayms(20);

            P2_0 = ~P2_0;
        }
    }
}

控制LED显示二进制

#include <REGX52.H>

void Delayms(unsigned int xms)  //@12.000MHz
{
    unsigned char data 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){
            Delayms(20);
            while(P3_1 == 0);
            Delayms(20);

            LEDNum++;
            P2 = ~LEDNum;
        }
    }
}

控制LED移位

#include <REGX52.H>

void main(){
    unsigned char LEDNum = 0;

    P2 = ~0x01;

    while(1){
        if(P3_1 == 0){
            Delayms(20);
            while(P3_1 == 0);
            Delayms(20);

            LEDNum++;
            if(LEDNum >= 8){
                LEDNum = 0;
            }
            P2 = ~(0x01 << LEDNum);
        }
        if(P3_0 == 0){
            Delayms(20);
            while(P3_0 == 0);
            Delayms(20);
            if(LEDNum == 0)
                LEDNum = 8;
            LEDNum--;
            P2 = ~(0x01 << LEDNum);
        }
    }
}