按键消抖思想

按键消抖思想---通过标志位
 

uint8_t u8cnt=0; //按键按下延时计数
bit bitLock=0; //按键自锁标志位
bit bitShortClick=0; //按键短按标志位

/*按键没有被按下时,是高电平,当按键被按下,电位被拉低成低电平。芯片有些引脚内置了上拉电阻,对应引脚开内部上拉*/

void key_scan(void)

{
if(KEY)
{
u8cnt=0;                 //按键没有被按下时,将u8cnt、bitLock置0
bitLock=0;
}
else if(bitLock==0) 
{
u8cnt++;                       //当检测到按键按下时,u8cnt开始自增
if(u8cnt>30)                //按键按下超过30次时,才确定按键被按下
{
bitLock=1;                 //将自锁标志位置1,当松开按键时会被自动清零
bitShortClick=1;         //按键短按标志位置1,表示按键被按下,调用结束后,
                                         需要及时清零,防止一直被触发
}
}

}



也可以在定时器中设计一个标志位,10ms产生一次中断,这个标志位比如叫bit10ms。

然后在主函数中进行调用。

void main(void)

{

        while(1)

       {

              if(bit10ms)

              {

                        bit10ms=0;

                         key_scan();

               }

      }

}

如果这样的话,就需要将上面的u8cnt>30,改成u8cnt>4,就是当按键按下50ms的时候才说明按键被按下,这样的效果会更好。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值