回覆列表
  • 1 # 招財機器人

    #define KEY0_PRES 1

    #define KEY1_PRES 2

    #define KEY2_PRES 3

    #define WKUP_PRES 4

    while(1)//不斷的迴圈掃描

    {

    key=KEY_Scan(0); //得到鍵值

    if(key)

    {

    switch(key)

    {

    case WKUP_PRES: //控制蜂鳴器

    BEEP=!BEEP;

    break;

    case KEY0_PRES: //控制LED0翻轉

    LED0=!LED0;

    break;

    case KEY1_PRES: //控制LED1翻轉

    LED1=!LED1;

    break;

    case KEY2_PRES: //同時控制LED0,LED1翻轉

    LED0=!LED0;

    LED1=!LED1;

    break;

    }

    }

    }

    //按鍵處理函式

    //返回按鍵值

    //mode:0,不支援連續按,1,支援連續按

    //0:沒有任何按鍵按下

    //1:KEY0按下

    //2:KEY1按下

    //3:KEY3按下

    //4:KEUP按下

    //注意此函式有響應優先順序 KEY0>KEY1>KEY2:WK_UP

    u8 KEY_Scan(u8 mode)

    {

    static u8 key_up=1;//按鍵鬆開標誌

    if(mode)key_up=1; //支援連按

    if(key_up&&(KEY0==0||KEY1==0||KEY2==0||WK_UP==1))

    {

    delay_ms(10);//去抖動

    key_up=0;

    if(KEY0==0)return 1;

    else if(KEY1==0)return 2;

    else if(KEY2==0)return 3;

    else if(WK_UP==1)return 4;

    }else if(KEY0==1&&KEY1==1&&KEY2==1&&WK_UP==0)key_up=1;

    return 0;// 無按鍵按下

    }

    說明:對於MCU而言,透過while中的主迴圈不斷呼叫KEY_Scan程式,當掃描到某個按鍵的輸入訊號發生變化時,返回對應的值。

    然後key變數獲取按鍵值,當按鍵值為非0時表示有按鍵值,進入case語句判斷,執行對應的響應動作。其中WKUP_PRES,KEY0_PRES,KEY1_PRES、KEY2_PRES已經在前面進行宏定義。

  • 2 # 悠閒宇宙W1

    首先我不太清楚你的控制邏輯,專案要求以及用哪種語言實現。和你分享一下我的一些經驗。首先按鍵一定要有的是去抖動,另外從邏輯上一定要用並行的,序列測試修改的時候會相對麻煩一些。

  • 中秋節和大豐收的關聯?
  • 男生可以罵女朋友嗎?