while (1)
{
// 检测按键状态
HAL_GPIO_ReadPin(KEY_PORT, KEY_PIN);
if (key_state == 0 && HAL_GPIO_ReadPin(KEY_PORT, KEY_PIN) == GPIO_PIN_SET)
{
// 按键按下
key_press_time = HAL_GetTick();
key_press_count++;
}
else if (key_state == 1 && HAL_GPIO_ReadPin(KEY_PORT, KEY_PIN) == GPIO_PIN_RESET)
{
// 按键释放
key_release_time = HAL_GetTick();
// 判断按键操作类型
if (key_press_time != 0 && key_press_time - key_release_time < 50)
{
// 短按
// 在这里添加短按功能代码
}
else if (key_press_time != 0 && key_press_time - key_release_time >= 50 && key_press_time - key_release_time <= 200)
{
// 长按
// 在这里添加长按功能代码
}
else if (key_press_time != 0 && key_press_time - key_release_time > 200)
{
// 连续按
// 在这里添加连续按功能代码
}
else if (key_press_count >= 2)
{
// 双击
// 在这里添加双击功能代码
}
// 重置按键状态和计数器
key_state = 0;
key_press_count = 0;
}
// 等待按键按下
key_state = 1;
} |