標題: 求分享 stm32f0304FP6單片機按鍵消抖程序 [打印本頁]

作者: sr861126    時間: 2023-3-2 17:38
標題: 求分享 stm32f0304FP6單片機按鍵消抖程序
   stm32 的按鍵程序消抖的發(fā)一下,謝謝大俠

作者: 111111yfyf    時間: 2023-3-2 18:57
u8 KEY_Scan(u8 mode)
{
        static u8 key=1;
        if(key==1&&(K_UP==1||K_DOWN==0||K_LEFT==0||K_RIGHT==0)) //任意一個按鍵按下
        {
                delay_ms(10);  //消抖
                key=0;
                if(K_UP==1)
                {
                        return KEY_UP;
                }
                else if(K_DOWN==0)
                {
                        return KEY_DOWN;
                }
                else if(K_LEFT==0)
                {
                        return KEY_LEFT;
                }
                else
                {
                        return KEY_RIGHT;
                }
        }
        else if(K_UP==0&&K_DOWN==1&&K_LEFT==1&&K_RIGHT==1)    //無按鍵按下
        {
                key=1;
        }
        if(mode==1) //連續(xù)按鍵按下
        {
                key=1;
        }
        return 0;
}

這個嘛

作者: sr861126    時間: 2023-3-2 19:41
111111yfyf 發(fā)表于 2023-3-2 18:57
u8 KEY_Scan(u8 mode)
{
        static u8 key=1;

很卡,用不了
作者: 暖西夏    時間: 2023-3-9 15:21
if(POWER_KEY)//按鍵掃描
                {
                        Key_Count++;
                        if(Key_Count >= 20)
                        {

                        }
                }
作者: 天ノ憶    時間: 2023-3-9 17:03
這也有必要問?但凡去看一下百度一下原理也不至于會在這發(fā)帖問,您是一點腦子都不想動嗎?
作者: 13872888583    時間: 2023-3-10 08:28
sr861126 發(fā)表于 2023-3-2 19:41
很卡,用不了

很卡正常,我一般用中斷。
作者: Hephaestus    時間: 2023-3-10 19:48
用systick中斷來判斷唄。
作者: hzsweet    時間: 2023-3-11 11:25
延時函數(shù)
作者: lkc8210    時間: 2023-3-11 12:03

  1. u8 key_Value = 0;//全局變量,用完置零
  2. void key_Proc()//單鍵短按,1ms中斷內(nèi)運行
  3. {
  4.         static u8 Delay_XD=0; //消抖計數(shù)
  5.         if(!Key_XX)
  6.         {
  7.                 if(!Delay_XD)
  8.                 {
  9.                         key_Value = 1;
  10.                 }
  11.                 Delay_XD = 50;//消抖時間
  12.         }
  13.         else //按鍵抬起
  14.         {
  15.                 if(Delay_XD)Delay_XD--;//消抖
  16.         }
  17. }
復制代碼



作者: Y_G_G    時間: 2023-3-17 20:05
想認真學的,就用狀態(tài)機去消抖
不想認真學的,直接延時,簡單省事
連一個延時代碼都不想自己寫的............
作者: rayin    時間: 2023-3-18 09:32
軟件層面做消抖處理之外, 可以在按鍵與GND之間并聯(lián)一個0.1nF的電容, 本人實測效果更好.
作者: nimrod    時間: 2023-3-19 09:51
判斷兩次讀取,然后中間加delay就行
作者: a399288395    時間: 2023-3-20 11:22
能不用延時就千萬不要用延時;從開始就打好基礎;杜絕任何會堵塞程序的無意義延時;論壇里搜一下;有很多高手寫范例  有用讀按鍵標志位的方法;有用定時掃描的方法;一個按鍵消抖而已;只要搞懂原理了; 51 或者32 都通用;
http://www.torrancerestoration.com/bbs/dpj-133523-1.html




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1