神奇树叶 发表于 2019-9-30 18:19

按键消抖

#include <reg52.h>
sbit LED1 = P0^0;
sbit LED2 = P0^1;
sbit LED3 = P0^2;
sbit LED4 = P0^3;

sbit KEY1 = P2^0;
sbit KEY2 = P2^1;
sbit KEY3 = P2^2;
sbit KEY4 = P2^3;

void delay();
void main()
{
    bit keybuf = 1;//按键值暂存,临时保存按键的扫描值
    bit backup = 1;//按键值备份,保存前一次的扫描值


while (1)
    {
      keybuf = KEY4;            //把当前扫描值暂存
      if (keybuf != backup)   //当前值与前次值不相等说明此时按键有动作
      {
            delay();            //延时大约10ms
            if (keybuf == KEY4)   //判断扫描值有没有发生改变,即按键抖动
            {
                if (backup == 0)//如果前次值为0,则说明当前是弹起动作
                {
                  
                  P0 =~P0;//计数值显示到数码管上
                }
                backup = keybuf;//更新备份为当前值,以备进行下次比较
            }
      }
    }
}
//软件延时函数,延时约10ms
void delay()
{
    unsigned int i = 1000;

    while (i--);
}

yangxf0120 发表于 2019-9-30 19:36

谢谢分享按键消抖

luchonghui74 发表于 2019-10-1 08:27

感谢分享,谢谢了啦!!

mj8abcd 发表于 2019-10-1 16:25

h09721 发表于 2020-2-17 08:55

xhc281358765 发表于 2020-2-17 18:04

xiexie

h09721 发表于 2020-2-19 09:59

页: [1]
查看完整版本: 按键消抖