首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

STM32按键状态机2——状态简化与增加长按功能

上篇的状态图如下: 由于只检测按下与松开,并具备按键消抖功能,因此用到了如上的4个状态,按下抖动和松开抖动是两个独立的状态,并且这两个抖动的状态,也是可以在多次循环中连续运行的,这个状态机的循环周期设置的为...10ms,当在抖动状态连续检测到某一电平5次后,即认为消抖完成,进入下一个稳定状态。...KS_RELEASE: { //检测到低电平,先进行消抖 if (KEY0 == 0) { g_keyStatus = KS_SHAKE; } } break...如果对于抖动检测的要求不高,也可以只保留按下抖动的逻辑,松开抖动的分支去掉,直接跳到松开状态,可以再次简化状态逻辑。...KS_RELEASE: { //检测到低电平,先进行消抖 if (KEY0 == 0) { g_keyStatus = KS_SHAKE; } } break

55430

STM32按键状态机3——增加双击与功能优化

上篇文章:STM32按键状态机2——状态简化与增加长按功能,介绍了将按键检测增加长按功能,并将按下抖动与松开抖动共用一个抖动状态来表示,其状态图如下: 仔细研究这个状态图,其它还存在一些问题: 短按状态...1.1 状态图修改 修改后的状态图如下,有以下几点需要注意: “确认按下”不是短按触发的条件,需要等松开后,经消抖进入到“等待再次按下”一段时间后(200ms),没有再次被按下,才触发短按事件,这样就解决了本篇开头提到的第...1个问题 “确认按下”不是短按触发的条件,另一个用途是,当此状态继续保持按下状态一段时间后(1s),则会单独触发长按事件,同时进入到“确认长按”状态,这样就解决了本篇开头提到的第2个问题 对于双击事件的检测...(初始状态) case KS_RELEASE: { //检测到低电平,先进行消抖 if (KEY0 == 0) { g_keyStatus = KS_SHAKE;...} } break; //抖动 case KS_SHAKE: { if (KEY0 == 1) { //从松开状态来的抖动 if (KS_RELEASE

1.1K10
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    STM32按键消抖——入门状态机思维

    图中的VT代表按键检测到电平,VT=0即检测到低电平,可能是按键按下,由初始的“稳定松开”状态转为“按下抖动”状态 当持续检测到低电平(VT=0)一段时间后,认为消抖完成,由“按下抖动”状态转为“稳定按下...”状态 在“按下抖动”状态时,在指定的一段时间内,再次检测到高电平(VT=1),说明确实是按钮抖动(比如按键被快速拨动了一下又弹起,或强烈震动导致的按键抖动),则由“按下抖动”状态转为“稳定松开”状态...) 松开抖动状态(KS_RELEASE_SHAKE) 这里使用枚举来定义这4个状态。...) /*按下抖动状态*/ \ STATUS(KS_PRESS) /*稳定按下状态*/ \ STATUS(KS_RELEASE_SHAKE) /*松开抖动状态...; //松开抖动 case KS_RELEASE_SHAKE: { g_DebounceCnt++; //确实是抖动 if (KEY0 == 0) {

    91420

    按键控制LED-ISE操作工具

    因而在闭合及断开的瞬间均伴随有一连串的抖动。 按键抖动会引起一次按键被误读多次。为确保CPU对键的一次闭合仅作一次处理,必须去除键抖动。...大多数的板子直接将按键和主控设备相连接,将带有抖动的波形输入到主控设备内部,由内部进行消抖处理。 单片机一般采用延迟重采样的方式进行消抖。...key_filter(按键消抖模块):将外部输入的带有抖动的波形进行消抖。 edge_check(边沿检测模块):将消抖后的波形进行下降沿检测,并产生对应的脉冲。...本设计共分为四个状态,KEY_OFF(按键释放状态),SHAKE_ON(按键按下时抖动判断状态),KEY_ON(按键按下状态),SHAKE_OFF(按键释放时抖动判断状态)。...按键没有按下时,一直KEY_OFF状态,当按键信号变为低电平时,就转入SHAKE_ON状态,检测低电平的持续时间。

    69820

    FPGA零基础学习:按键控制LED

    因而在闭合及断开的瞬间均伴随有一连串的抖动。 ? 按键抖动会引起一次按键被误读多次。为确保CPU对键的一次闭合仅作一次处理,必须去除键抖动。...大多数的板子直接将按键和主控设备相连接,将带有抖动的波形输入到主控设备内部,由内部进行消抖处理。 单片机一般采用延迟重采样的方式进行消抖。...key_filter(按键消抖模块):将外部输入的带有抖动的波形进行消抖。 edge_check(边沿检测模块):将消抖后的波形进行下降沿检测,并产生对应的脉冲。...本设计共分为四个状态,KEY_OFF(按键释放状态),SHAKE_ON(按键按下时抖动判断状态),KEY_ON(按键按下状态),SHAKE_OFF(按键释放时抖动判断状态)。...按键没有按下时,一直KEY_OFF状态,当按键信号变为低电平时,就转入SHAKE_ON状态,检测低电平的持续时间。

    49011

    FPGA零基础学习:按键控制LED

    因而在闭合及断开的瞬间均伴随有一连串的抖动。 按键抖动会引起一次按键被误读多次。为确保CPU对键的一次闭合仅作一次处理,必须去除键抖动。...大多数的板子直接将按键和主控设备相连接,将带有抖动的波形输入到主控设备内部,由内部进行消抖处理。 单片机一般采用延迟重采样的方式进行消抖。...key_filter(按键消抖模块):将外部输入的带有抖动的波形进行消抖。 edge_check(边沿检测模块):将消抖后的波形进行下降沿检测,并产生对应的脉冲。...本设计共分为四个状态,KEY_OFF(按键释放状态),SHAKE_ON(按键按下时抖动判断状态),KEY_ON(按键按下状态),SHAKE_OFF(按键释放时抖动判断状态)。...按键没有按下时,一直KEY_OFF状态,当按键信号变为低电平时,就转入SHAKE_ON状态,检测低电平的持续时间。

    1.2K00

    Swift 视图抖动扩展一

    要给视图添加一个抖动效果,比如登录时输入框校验出错给出提示之类的~~~反正就是项目中用到了咯。。。...: 2, y: 0)) 这就可以让视图往左变换了,往右就是-2咯,改Y就是上下呗 抖动,抖动肯定是有次数的,我们根据次数来移动视图,每次调用自身扩展修改方向 具体代码我就粘在下面咯,反正也没多少行 //...默认5次 /// - interval: 每次抖动时间 默认0.1秒 /// - offset: 抖动的偏移量 默认2个点 /// - completion...//一个简单的调用,全部使用默认值,抖动完成后不做任何操作 view.shake() 默认是水平抖动,设置抖动方向很简单的 //这样就设置为垂直抖动啦。。。...view.shake(direction: .vertical) 再粘一个完全的调用 label.shake(direction: .horizontal, times: 9, interval: 0.03

    1K10

    通过多项实践,再次学习oracle的listener.ora sqlnet.ora tnsnames.ora三个文件的关联性

    同时,决定是否登录成功的因素还有listener进程处于可用状态,你可以尝试一下,停止listerner服务(停止了listener进程,与listener.ora联系): ?...2 Tnsnames.ora 这个文件类似于unix 的hosts文件,提供的tnsname到主机名或者ip的对应,只有当sqlnet.ora中类似 NAMES.DIRECTORY_PATH...listener监听器进程的配置文件 关于listener进程就不多说了,接受远程对数据库的接入申请并转交给oracle的服务器进程。...所以如果不是使用的远程的连接,listener 进程就不是必需的,同样的如果关闭listener进程并不会影响已经存在的数据库连接。...,及对应的服务器的listener进程的状态。

    1.8K30

    初学前端用代码实现一个网页老虎机游戏

    到这里我们已经实现了数字列表的滚动效果,但是我们只是做了个简单的从1~6的滚动,并没有做到从头开始的效果。简单来说就是滚动得没有像效果图中那么“持久”。...我们可以看到,如果我们将定位只还原到translateY(-136px),那滚动的结果会是5。...游戏机是怎么抖动起来的? 前面可能会复杂一点,这里就我们聊个稍微简单易懂的东西。从效果图中我们可以看出老虎机从开始游戏到游戏快结束时一直是在抖动的,关于这个我也给大家稍微分享一下怎么实现的。 ?...不过要稍微留意一点,我们这里抖动应该也是要可控的,因为老虎机在游戏快结束时会停止抖动。...('machine')[0].classList.add('shake'); } // 移除老虎机抖动效果 function stopShake() { document.getElementsByClassName

    5.4K10
    领券