diff --git a/Power_Pico/BSP/KEY/key.c b/Power_Pico/BSP/KEY/key.c index 69bb6ce..f73dc44 100644 --- a/Power_Pico/BSP/KEY/key.c +++ b/Power_Pico/BSP/KEY/key.c @@ -1,4 +1,5 @@ #include "key.h" +#include "cmsis_os.h" void Key_Port_Init(void) { @@ -8,29 +9,54 @@ void Key_Port_Init(void) __HAL_RCC_GPIOA_CLK_ENABLE(); /*Configure GPIO pin : PA0 */ - GPIO_InitStruct.Pin = KEY1_PIN; + GPIO_InitStruct.Pin = KEYB_PIN | KEYY_PIN | KEYL_PIN | KEYR_PIN | KEYN_PIN; GPIO_InitStruct.Mode = GPIO_MODE_INPUT; GPIO_InitStruct.Pull = GPIO_PULLUP; - HAL_GPIO_Init(KEY1_PORT, &GPIO_InitStruct); + HAL_GPIO_Init(KEYB_PORT, &GPIO_InitStruct); } +// mode: 0 - sigle press, 1 - long press uint8_t KeyScan(uint8_t mode) { static uint8_t key_up = 1; - uint8_t keyvalue=0; - if(mode) key_up = 1; - if( key_up && (!KEY1)) + static uint8_t key_down = 0; + uint8_t keyvalue = 0; + + if(mode) { - HAL_Delay(3);//ensure the key is down - if(!KEY1) keyvalue = 1; - if(keyvalue) key_up = 0; + key_up = 1; + key_down = 0; } - else + + if( key_up && (!KEYB || !KEYY || !KEYL || !KEYR || !KEYN) ) { - HAL_Delay(3);//ensure the key is up - if(KEY1) + osDelay(3); // ensure the key pressed + if(!KEYB) + key_down = KEYB_NUM; + else if(!KEYY) + key_down = KEYY_NUM; + else if(!KEYL) + key_down = KEYL_NUM; + else if(!KEYR) + key_down = KEYR_NUM; + else if(!KEYN) + key_down = KEYN_NUM; + if(key_down) + key_up = 0; + } + + // 松开才有效 + if ( key_down && KEYB && KEYY && KEYL && KEYR && KEYN ) + { + osDelay(3);//ensure the key + if(KEYB && KEYY && KEYL && KEYR && KEYN) + { key_up = 1; + keyvalue = key_down; + key_down = 0; + } } + return keyvalue; } diff --git a/Power_Pico/BSP/KEY/key.h b/Power_Pico/BSP/KEY/key.h index 5e7a2d5..54a6ce2 100644 --- a/Power_Pico/BSP/KEY/key.h +++ b/Power_Pico/BSP/KEY/key.h @@ -7,21 +7,42 @@ extern "C" { #include "main.h" -//KEY1 -#define KEY1_PORT GPIOA -#define KEY1_PIN GPIO_PIN_0 -#define KEY1 HAL_GPIO_ReadPin(KEY1_PORT,KEY1_PIN) +// boot, yes, right, left, no +#define KEYB_NUM 1 +#define KEYY_NUM 2 +#define KEYL_NUM 3 +#define KEYR_NUM 4 +#define KEYN_NUM 5 -//KEY2 -#define KEY2 0 +//KEYB +#define KEYB_PORT GPIOA +#define KEYB_PIN GPIO_PIN_0 +#define KEYB HAL_GPIO_ReadPin(KEYB_PORT,KEYB_PIN) + +//KEYY +#define KEYY_PORT GPIOA +#define KEYY_PIN GPIO_PIN_1 +#define KEYY HAL_GPIO_ReadPin(KEYY_PORT,KEYY_PIN) + +//KEYL +#define KEYL_PORT GPIOA +#define KEYL_PIN GPIO_PIN_2 +#define KEYL HAL_GPIO_ReadPin(KEYL_PORT,KEYL_PIN) + +//KEYR +#define KEYR_PORT GPIOA +#define KEYR_PIN GPIO_PIN_3 +#define KEYR HAL_GPIO_ReadPin(KEYR_PORT,KEYR_PIN) + +//KEYN +#define KEYN_PORT GPIOA +#define KEYN_PIN GPIO_PIN_4 +#define KEYN HAL_GPIO_ReadPin(KEYN_PORT,KEYN_PIN) void Key_Port_Init(void); -void Key_Interrupt_Callback(void); uint8_t KeyScan(uint8_t mode); - - #ifdef __cplusplus } #endif