有限状态机概念
switch
、
case
或者
if
、
else
)切换状态,通过改变状态机状态,让程序按设定的顺序执行。
应用举例
if (定时器 >= 10ms) //10ms是典型消抖时间
{
switch (按键状态)
{
case 按键弹起状态:
if (IO读取为低电平) 按键状态=前沿抖动;
break;
case 前沿抖动状态:
if (IO读取为低电平) 按键状态=按键按下;
break;
case 按键按下状态:
if (IO读取为高电平) 按键状态=后沿抖动;
break;
case 后沿抖动状态:
if (IO读取为高电平) 按键状态=按键弹起;
break;
default:按键状态=按键弹起;
}
}
状态机编程建议
typedef enum {
state_1=1,
state_2,
state_3
}State;
typedef enum{
event_1=1,
event_2,
event_3,
event_4,
event_5
}Event;
typedef struct {
State curState; //当前状态
Event eventId; //事件
State nextState; //下一个状态
Action action; //动作功能
}StateEvent;
State
和
Event
,并赋予相应的动作功能,整体的基本流程如下:
当前状态->有事件触发->跳到下一个状态->具体的动作功能
免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!