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

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条回答
BMN李
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]

一周热门 更多>