有限狀態機概念
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
,并賦予相應的動作功能,整體的基本流程如下: 當前狀態->有事件觸發->跳到下一個狀態->具體的動作功能
來源:頭條-嵌入式在左C語言在右
鏈接:https://www.toutiao.com/i6843028812112855564/
版權歸原作者所有,如有侵權,請聯系刪除。
免責聲明:本文內容由21ic獲得授權后發布,版權歸原作者所有,本平臺僅提供信息存儲服務。文章僅代表作者個人觀點,不代表本平臺立場,如有問題,請聯系我們,謝謝!