[应用相关] 按键的滤波问题求教

[复制链接]
711|10
 楼主| sourceInsight 发表于 2016-11-30 20:17 | 显示全部楼层 |阅读模式
stm32芯片,Port 4.5 口是按键,按一下按键,翻转LED灯 P1.1口,我的做法如下,但是总是会出现按键按了,但是LED不翻转的情况,请问大家,按键滤波用什么方法好?
按键采用外部中断的方式进行翻转LED灯
#pragma vector = PORT4_VECTOR;
__interrupt void PORT4_ISR(void)
{

        wait(100);//*delay 100ms
        
        btn_flag ^= 1;
        if (btn_flag == 0)
        {
                GPIO_toggleOutputOnPin(GPIO_PORT_P1, GPIO_PIN0);
        }

        GPIO_clearInterrupt(GPIO_PORT_P4, GPIO_PIN5);

}
handleMessage 发表于 2016-11-30 20:25 | 显示全部楼层
if(!btn_flag)比较好,能不能看看寄存器里的值吧。。
zhouhuanの 发表于 2016-11-30 20:27 | 显示全部楼层
判断按键是否按下----延迟十几个ms左右----再次判断按键是否按下,如果按下,进行操作,否则,不进行操作; 然后等待按键释放。
wanglaojii 发表于 2016-11-30 20:31 | 显示全部楼层
需要注意等待按键释放的时候加个超时处理。
laozhongyi 发表于 2016-11-30 20:33 | 显示全部楼层
这个不建议使用中断来处理。另外如果对程序时间有要求的话,用定时器来计时延迟。
Edisons 发表于 2016-11-30 20:38 | 显示全部楼层
不要在中断里延时那么久阿。
需要延时的话就用定时器
_gege 发表于 2016-11-30 20:41 | 显示全部楼层
推荐用定时器定时1ms,或者10ms。你的低功耗怎么配置的?
Mozarts 发表于 2016-11-30 20:46 | 显示全部楼层
进中断,关中断,翻转,开中断……不用延时的。
Listate 发表于 2016-11-30 20:48 | 显示全部楼层
一般都是用延时消抖的吧。。。。
在路上的程序猿 发表于 2016-11-30 21:50 | 显示全部楼层
或许按键有抖动的问题吧,记得要消抖。
黑夜之狼 发表于 2016-12-1 14:02 | 显示全部楼层
你用delay来做肯定效果不太好,可以尝试用定时器来扫描按键,不阻塞,消抖效果又好
您需要登录后才可以回帖 登录 | 注册

本版积分规则

138

主题

1619

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部