有限狀態(tài)機概念
switch
、
case
或者
if
、
else
)切換狀態(tài),通過改變狀態(tài)機狀態(tài),讓程序按設(shè)定的順序執(zhí)行。
應(yīng)用舉例
if?(定時器?>=?10ms)?//10ms是典型消抖時間
{
???switch?(按鍵狀態(tài))
???{
?????case?按鍵彈起狀態(tài):
??????if?(IO讀取為低電平)?按鍵狀態(tài)=前沿抖動;?
?????break;
?????case?前沿抖動狀態(tài):
??????if?(IO讀取為低電平)?按鍵狀態(tài)=按鍵按下;?
?????break;
?????case?按鍵按下狀態(tài):
??????if?(IO讀取為高電平)?按鍵狀態(tài)=后沿抖動;?
?????break;
?????case?后沿抖動狀態(tài):
??????if?(IO讀取為高電平)?按鍵狀態(tài)=按鍵彈起;?
?????break;
default:按鍵狀態(tài)=按鍵彈起;
???}
}
狀態(tài)機編程建議
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;??????//當(dāng)前狀態(tài)
??Event?eventId;??????//事件
??State?nextState;???//下一個狀態(tài)
??Action?action;?????//動作功能
}StateEvent;
State
和
Event
,并賦予相應(yīng)的動作功能,整體的基本流程如下:
當(dāng)前狀態(tài)->有事件觸發(fā)->跳到下一個狀態(tài)->具體的動作功能
來源:頭條-嵌入式在左C語言在右
鏈接:https://www.toutiao.com/i6843028812112855564/
版權(quán)歸原作者所有,如有侵權(quán),請聯(lián)系刪除。
免責(zé)聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺僅提供信息存儲服務(wù)。文章僅代表作者個人觀點,不代表本平臺立場,如有問題,請聯(lián)系我們,謝謝!