2025-08-05 16:06:46 +08:00
|
|
|
#include "key.h"
|
2025-08-12 18:44:02 +08:00
|
|
|
#include "cmsis_os.h"
|
2025-08-05 16:06:46 +08:00
|
|
|
|
|
|
|
|
void Key_Port_Init(void)
|
|
|
|
|
{
|
|
|
|
|
GPIO_InitTypeDef GPIO_InitStruct = {0};
|
|
|
|
|
|
|
|
|
|
/* GPIO Ports Clock Enable */
|
|
|
|
|
__HAL_RCC_GPIOA_CLK_ENABLE();
|
|
|
|
|
|
|
|
|
|
/*Configure GPIO pin : PA0 */
|
2025-08-12 18:44:02 +08:00
|
|
|
GPIO_InitStruct.Pin = KEYB_PIN | KEYY_PIN | KEYL_PIN | KEYR_PIN | KEYN_PIN;
|
2025-08-05 16:06:46 +08:00
|
|
|
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
|
|
|
|
|
GPIO_InitStruct.Pull = GPIO_PULLUP;
|
2025-08-12 18:44:02 +08:00
|
|
|
HAL_GPIO_Init(KEYB_PORT, &GPIO_InitStruct);
|
2025-08-05 16:06:46 +08:00
|
|
|
}
|
|
|
|
|
|
2025-08-12 18:44:02 +08:00
|
|
|
// mode: 0 - sigle press, 1 - long press
|
2025-08-05 16:06:46 +08:00
|
|
|
uint8_t KeyScan(uint8_t mode)
|
|
|
|
|
{
|
|
|
|
|
static uint8_t key_up = 1;
|
2025-08-12 18:44:02 +08:00
|
|
|
static uint8_t key_down = 0;
|
|
|
|
|
uint8_t keyvalue = 0;
|
|
|
|
|
|
|
|
|
|
if(mode)
|
|
|
|
|
{
|
|
|
|
|
key_up = 1;
|
|
|
|
|
key_down = 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if( key_up && (!KEYB || !KEYY || !KEYL || !KEYR || !KEYN) )
|
2025-08-05 16:06:46 +08:00
|
|
|
{
|
2025-08-12 18:44:02 +08:00
|
|
|
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;
|
2025-08-05 16:06:46 +08:00
|
|
|
}
|
2025-08-12 18:44:02 +08:00
|
|
|
|
|
|
|
|
// 松开才有效
|
|
|
|
|
if ( key_down && KEYB && KEYY && KEYL && KEYR && KEYN )
|
2025-08-05 16:06:46 +08:00
|
|
|
{
|
2025-08-12 18:44:02 +08:00
|
|
|
osDelay(3);//ensure the key
|
|
|
|
|
if(KEYB && KEYY && KEYL && KEYR && KEYN)
|
|
|
|
|
{
|
2025-08-05 16:06:46 +08:00
|
|
|
key_up = 1;
|
2025-08-12 18:44:02 +08:00
|
|
|
keyvalue = key_down;
|
|
|
|
|
key_down = 0;
|
|
|
|
|
}
|
2025-08-05 16:06:46 +08:00
|
|
|
}
|
2025-08-12 18:44:02 +08:00
|
|
|
|
2025-08-05 16:06:46 +08:00
|
|
|
return keyvalue;
|
|
|
|
|
}
|
|
|
|
|
|