找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1278|回复: 5
收起左侧

单片机按键有时会不起作用?附程序

[复制链接]
回帖奖励 20 黑币 回复本帖可获得 20 黑币奖励! 每人限 1 次
ID:1079270 发表于 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;  
           }  
问:按键按下有时会不起作用,麻烦大佬解答一下

回复

使用道具 举报

ID:1085316 发表于 2023-6-25 14:40 | 显示全部楼层
你这是轮询检测的,有时不起作用可能性有:
1、你的轮询检测时间太长,比如你200ms检测一次的话,你按下按键的时刻可能还没到按键检测的执行语句,把检测时长缩短试试。
2、程序中缺少防抖语句,在网上搜一下增加按键防抖代码。
3、要不就换成按键外部中断触发,用中断绝对没问题。
回复

使用道具 举报

ID:123289 发表于 2023-6-25 15:42 | 显示全部楼层
按键动作其实还是有点复杂的,初学者会计划不周:
1、按键会有:抖动、短按、长按、按下了、弹起了。
2、响应时机:为方便解说,就以亮灯为响应。
你打算在何时亮灯,按下亮,还是弹起亮?
3、如果按下亮,那么按下未弹起的这段时间,如何应对,例如,按了1分钟,这1分钟内按键信号如何处置?
如果弹起亮,……略,类似。
4、如何界定抖动与连续两N次按下。
处理、规划好以上问题,你的按键就灵了。
回复

使用道具 举报

ID:1079270 发表于 2023-6-25 16:59 | 显示全部楼层
抖动、短按、长按、按下了、弹起了这几种状态我明白,看了金沙滩老师的讲解之后我觉得他的代码有点复杂,不太好理解,就想试试这种简洁一点的,然后就出错了
回复

使用道具 举报

ID:161164 发表于 2023-6-26 09:35 | 显示全部楼层
什么时候不起作用?
Blink_State的作用范围是多少?0~3?还是0~2?
回复

使用道具 举报

ID:1079270 发表于 2023-6-26 10:41 | 显示全部楼层
lkc8210 发表于 2023-6-26 09:35
什么时候不起作用?
Blink_State的作用范围是多少?0~3?还是0~2?

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

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表