51单片机按键的基本原理与实现

由于人手按按键会发生不可避免的抖动问题,所以消抖就成为不能避免的步骤,

消抖主要有两种方式:1·硬件消抖 2·软件消抖

51单片机按键的基本原理与实现_第1张图片

硬件消抖,说白了也是一种延时的处理方式,感觉还没有软件直接延时来的直接,直观,方便呢!

51单片机按键的基本原理与实现_第2张图片

独立式键盘:直观,容易理解,占用io资源比较多

51单片机按键的基本原理与实现_第3张图片

行列式矩阵键盘,节省io资源,很少的io口,可以做出很多的按键出来

51单片机按键的基本原理与实现_第4张图片

如图搜索导入元器件并连线

51单片机按键的基本原理与实现_第5张图片

编写c代码并编译hex文件

#include"reg52.h"

sbit k=P1^0;
unsigned char dat[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};  // 共阴极数码管取值0到9;
unsigned int num=0, flag=0;

void delay(unsigned int n){
    unsigned int i=0, j=0;
    for(i=0; i 9){
//                num=0;
//        }
//    }
//    }                    // 前面的num加的太快,不符合一一个的加的要求。
    
    if(k==0 && flag==0){   // 如果按键没有按下且标志位为0
        flag=1;                  //  就把标志位设为1
    }
    if(k==1 && flag==1){    // 如果按键按下了 且 标志位为1
        num++;                      // num加1
        flag=0;                     // 标志位设为0
        if(num>9){                  // 如果num大于9了
            num=0;                       // num就等于0,  大于9了就超过了前面的数组dat的取值范围了,只能清0,从头算
        }
    }
}

void seg(){
    P2=dat[num];            //   数码管的显示取数组dat的第num个值
}

void main(){
    while(1){
        key();
        seg();
    }
}

proteus导入hex文件后模拟运行,这样不论你按键安多快多慢,都能保证每次按下数码管加一个数

51单片机按键的基本原理与实现_第6张图片

你可能感兴趣的:(51单片机,51单片机,嵌入式硬件,单片机,proteus,社交电子)