状态机检测按键代码加注释
时间: 2023-06-18 08:02:55 浏览: 109
状态机检测按键(源码)
以下是一个状态机检测按键的代码,已经加上注释说明每个部分的作用和流程。
```c
// 定义按键状态
#define KEY_UP 0
#define KEY_DOWN 1
// 定义按键的状态和计数器
uint8_t key_state = KEY_UP;
uint16_t key_cnt = 0;
// 检测按键状态的函数
void check_key(void)
{
// 获取按键的状态
uint8_t cur_key_state = get_key_state();
// 检测按键状态变化
if(cur_key_state != key_state)
{
// 如果按键状态变为按下
if(cur_key_state == KEY_DOWN)
{
// 计数器归零
key_cnt = 0;
// 设置按键状态为按下
key_state = KEY_DOWN;
}
// 如果按键状态变为弹起
else
{
// 计数器归零
key_cnt = 0;
// 设置按键状态为弹起
key_state = KEY_UP;
}
}
// 如果按键状态未变化
else
{
// 如果按键一直处于按下状态
if(key_state == KEY_DOWN)
{
// 计数器加一
key_cnt++;
// 如果计数器达到设定值,说明按键被长按
if(key_cnt > LONG_PRESS_CNT)
{
// 触发长按事件
trigger_long_press_event();
// 计数器归零
key_cnt = 0;
}
}
}
}
```
注释中已经解释了每个部分的作用,这个代码使用状态机来检测按键状态,可以实现简单的按键功能。
阅读全文