单个机械按键的定时扫描去抖方法(代码)

MicroPython相关代码、库、软件、工具
回复
头像
shaoziyang
帖子: 3919
注册时间: 2019年 10月 21日 13:48

单个机械按键的定时扫描去抖方法(代码)

#1

帖子 shaoziyang »

原帖作者:microCPyE 于 2018-6-28

去抖原理:

当扫描到按键位置变化后,判断变化后的状态保持时间是否达到按键动作判断时间(通常为30~40毫秒以上,或根据当前需要调整),若达到该时间则判断为按钮按下,然后再判断按钮是否弹起,若弹起则触发事件,调用相应的函数或执行相关的程序。如果不在按钮弹起后再调用程序,则会一直连续不停地调用程序,时间间隔为按键按下判断时间。

Code: Select all

# 开发环境:Debian9/64bit,EPS8266 V1.9.3

from machine import Pin, Timer

# 全局变量
butLab = 0    # 按钮扫描记次
staLab = 0    # 状态标志字,范围0-2

# 按钮扫描与触发事件相关参数
button = Pin(2, Pin.IN, Pin.PULL_UP)   # 按键引脚
SER  = 7        # 单次触发:保持7次以上扫描触发单次触发事件。
teg  = 0        # 触发电平,0为低电平,1为高电平,默认为低电平触发。

tmBut = Timer(-1)

'''*************************************************************************
* 功   能:单个机械按键去抖
* 说   明:按键单次触发,默认下降沿触发,根据按键电路不同有所不同。
* 输入参数:
          _pin 按键使用引脚
* 输出参数:None
* 返 回 值:True
**************************************************************************'''
def butOnoff(_pin):
    global butLab, staLab, teg
    butLab = (butLab * int(not(_pin.value() ^ teg)))+int(not(_pin.value() ^ teg))    # 当按键当前状态与需要监测的状态一致时,butLab+1,否则butLab = 0,采用的是同或原理,若以按键的默认状态为判断标准,则可以使用异或方式。
    if butLab >= SER:
        staLab += 1
        butLab = 0
        teg = int(not (teg))
        if staLab == 2:
            staLab = 0
            # ************************
            # 请在此输入您的处理代码   
            # ************************
    return True

tmBut.init(period=10, mode=Timer.PERIODIC, callback=lambda t:butOnoff(button))

回复

  • 随机主题
    回复总数
    阅读次数
    最新文章