标题: 单片机按键有时会不起作用?附程序 [打印本页]

作者: xnysfh    时间: 2023-6-25 12:48
标题: 单片机按键有时会不起作用?附程序
        if(BLINK_KEY == 0)
           {         
                if(BLINK_Shake == Long_Set_Sak)
                 {
                       if(Blink_State ++ >= 3)        Blink_State = 0;  
                       DataBuffer[0] &= 0xcf;
                       DataBuffer[0] |= (Blink_State << 4);
                       spi_send_en = 1;
                }
                if(BLINK_Shake++ >(Long_Set_Sak + 1))
                BLINK_Shake = Long_Set_Sak +1;




           }
               if(BLINK_KEY)
           {
                BLINK_Shake = 0;  
           }  
问:按键按下有时会不起作用,麻烦大佬解答一下


作者: shuaishuai01    时间: 2023-6-25 14:40
你这是轮询检测的,有时不起作用可能性有:
1、你的轮询检测时间太长,比如你200ms检测一次的话,你按下按键的时刻可能还没到按键检测的执行语句,把检测时长缩短试试。
2、程序中缺少防抖语句,在网上搜一下增加按键防抖代码。
3、要不就换成按键外部中断触发,用中断绝对没问题。
作者: yzwzfyz    时间: 2023-6-25 15:42
按键动作其实还是有点复杂的,初学者会计划不周:
1、按键会有:抖动、短按、长按、按下了、弹起了。
2、响应时机:为方便解说,就以亮灯为响应。
你打算在何时亮灯,按下亮,还是弹起亮?
3、如果按下亮,那么按下未弹起的这段时间,如何应对,例如,按了1分钟,这1分钟内按键信号如何处置?
如果弹起亮,……略,类似。
4、如何界定抖动与连续两N次按下。
处理、规划好以上问题,你的按键就灵了。
作者: xnysfh    时间: 2023-6-25 16:59
抖动、短按、长按、按下了、弹起了这几种状态我明白,看了金沙滩老师的讲解之后我觉得他的代码有点复杂,不太好理解,就想试试这种简洁一点的,然后就出错了
作者: lkc8210    时间: 2023-6-26 09:35
什么时候不起作用?
Blink_State的作用范围是多少?0~3?还是0~2?
作者: xnysfh    时间: 2023-6-26 10:41
lkc8210 发表于 2023-6-26 09:35
什么时候不起作用?
Blink_State的作用范围是多少?0~3?还是0~2?

0~3,就是按下的时候有时会不起作用,随机的




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1