STM32
直播中

人走了

9年用户 939经验值
擅长:制造/封装 光电显示
私信 关注
[问答]

怎么做按键消抖?

大家是怎么做按键消抖的
我是用一定时器做20ms定时,定时到在中断里设专门标志(20ms是否到,初始化为0),在主循环里当按键按下时在判断此标志,为0,就开启定时中断,而后返回主流程,当此标志为1时在执行按键操作
uint32_t BUTTONScan(void)
{
        static u8 key_up = 1;

        if (key_up==1  (BUTTON_GetState(BUTTON1)==0||BUTTON_GetState(BUTTON2)==0
                ||BUTTON_GetState(BUTTON3)==0)) //||BUTTON_GetState(BUTTON4)==0
        {
                        if(keymark !=1)                                                   //keymark为20ms定时到的标志
                        {
                                TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE);//开启定时3通道1中断
                                TIM_Cmd(TIM3, ENABLE);
                          return 0;
                        }
                  else
      {
                                  keyread=1;
                                        key_up=0;
                                        keymark=0;
                                        TIM_ITConfig(TIM3,TIM_IT_Update,DISABLE);//定时3中断关
                                        TIM_Cmd(TIM3, DISABLE);
                                  if( BUTTON_GetState(BUTTON1)==0)      
                                                {
                                                //        Freq_Low=Freq_Low+1000000;//,Freq_Up_Down
                                                        return 1;
                                          }

                                  else if( BUTTON_GetState(BUTTON2)==0)
                                        {
                                        //        Freq_High=Freq_Low+1000000;
                                                return 2;        
                                        }
                                                        
                                       
                                        else if( BUTTON_GetState(BUTTON3)==0)
                                                {
                                                //        Freq_Up_Down=Freq_Up_Down+100000;
                                                  return 3;
                                                }
                                                               
                                //        else if( BUTTON_GetState(BUTTON4)==0) return 4;
             }        
  }
        else if (BUTTON_GetState(BUTTON1)==1    BUTTON_GetState(BUTTON2)==1
                          BUTTON_GetState(BUTTON3)==1  )//BUTTON_GetState(BUTTON4)==1
        {
                        if(keymark !=1)
                        {
                                TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE);//开启定时3通道1中断
                                TIM_Cmd(TIM3, ENABLE);
                          return 0;
                        }
                         else
      {
                                        key_up=0;
                                        keymark=0;
                                        TIM_ITConfig(TIM3,TIM_IT_Update,DISABLE);//定时3中断关
                                        TIM_Cmd(TIM3, DISABLE);
                 key_up=1;
     return 0;
                        }
        }

}


讲的不清楚,望见谅,总觉得不太好,大家有什么好的消抖程序吗

回帖(1)

李桂珍

2024-4-28 15:41:24
一般先检测键盘是否按下,然后延时10ms在一次检测就行了。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分