按鍵可以用按鍵掃描的方法和外部中斷的方法。
外部中斷看前面,個人推薦使用外部中斷更好。
其余情況可以用按鍵掃描,這里只講按鍵掃描的方法。
先在main.h中定義按鍵名稱
#define KEY0 HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_5) //KEY0按鍵PC5 #define KEY1 HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_15) //KEY1按鍵PA15 #define WK_UP HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0) //WKUP按鍵PA0 #define KEY0_PRES 1 //KEY0 #define KEY1_PRES 2 //KEY1 #define WKUP_PRES 3 //WK_UP
在main.c中定義按鍵掃描函數
int KEY_Scan(int mode) { static int key_up=1;//按鍵按松開標志 if(mode) key_up=1; //支持連按 if(key_up&&(KEY0==0||KEY1==0||WK_UP==1)) { HAL_Delay(10);//去抖動 key_up=0; if(KEY0==0)return KEY0_PRES; else if(KEY1==0)return KEY1_PRES; else if(WK_UP==1)return WKUP_PRES; }else if(KEY0==1&&KEY1==1&&WK_UP==0)key_up=1; return 0;// 無按鍵按下 }
最后在main.c中的while循環中添加:
key = KEY_Scan(0); //得到鍵值 switch(key) { case KEY0_PRES: .... break; ... ... }
即可。
I will make a difference.