按键消抖总是消不干净,请问有没有好的方法?就用的最普通的按键

2019-07-21 00:26发布

[mw_shl_code=c,true]void EXTI0_IRQHandler(void)
{
        delay_ms(10);//消抖
        if(WK_UP==0)                  //清零按键
        {               
                         count1=0;//所有数置零
                         count2=0;//所有数置零
                         bushuge=0;//所有数置零
                   bushushi=0;//所有数置零
                         mbushushi=0;//所有数置零
                         mbushuge=0;//所有数置零
                countz=count1*10+count2;//所有数置零
                bushu=bushushi*10+bushuge;//所有数置零
                mbushu=mbushushi*10+mbushuge;//所有数置零
                        printf("%d ",countz);//打印到串口
        }
        EXTI_ClearITPendingBit(EXTI_Line0); //清除LINE0上的中断标志位  
}[/mw_shl_code]
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
13条回答
TinyBoy
1楼-- · 2019-07-21 04:01
 精彩回答 2  元偷偷看……
BMN李
2楼-- · 2019-07-21 09:15
本帖最后由 BMN李 于 2016-1-7 15:09 编辑

[mw_shl_code=c,true]void EXTI0_IRQHandler(void)
{
    //增加判断
    if(WK_UP == 0)       //清零按键
    {
        //增加延时
        delay_ms(20);//消抖
        if(WK_UP == 0)       //清零按键
        {
            count1 = 0; //所有数置零
            count2 = 0; //所有数置零
            bushuge = 0; //所有数置零
            bushushi = 0; //所有数置零
            mbushushi = 0; //所有数置零
            mbushuge = 0; //所有数置零
            countz = count1 * 10 + count2; //所有数置零
            bushu = bushushi * 10 + bushuge; //所有数置零
            mbushu = mbushushi * 10 + mbushuge; //所有数置零
            printf("%d ", countz); //打印到串口
        }
    }
    EXTI_ClearITPendingBit(EXTI_Line0); //清除LINE0上的中断标志位
}[/mw_shl_code]
1201yuge
3楼-- · 2019-07-21 13:45
 精彩回答 2  元偷偷看……
1201yuge
4楼-- · 2019-07-21 18:28
没有使用过外部中断作为按键检测的,你可以试试直接扫描的方式,或者在定时器中断中扫描按键也是不错的选择
864384664
5楼-- · 2019-07-21 23:13
1201yuge 发表于 2016-1-7 15:11
没有使用过外部中断作为按键检测的,你可以试试直接扫描的方式,或者在定时器中断中扫描按键也是不错的选择

那钱荣大小如何选择呢?能讲一下为什么加电容吗
864384664
6楼-- · 2019-07-22 05:11
BMN李 发表于 2016-1-7 15:06
[mw_shl_code=c,true]void EXTI0_IRQHandler(void)
{
    //增加判断

谢谢,我试一下

一周热门 更多>