當前位置:首頁 » 編程語言 » 狀態機c語言

狀態機c語言

發布時間: 2024-07-06 10:04:19

Ⅰ 如何用c語言實現:a,b,c三個事件,依次進行,每到a時就執行事件1,再到b,再執行事件1,再c,再事件1.

典型的狀態機結構,可以去網上找找有關的資料,大概的結構像這樣

enum { state_A, state_B, state_C } state = state_A;

while(1)
{
switch ( state )
{
case state_A:
if ( event_A ) // 這里也可以用switch
{
action_1(); // 在某狀態下發生某事件執行某個動作,並轉入下個狀態
state = state_B;
}
else if ( event_B )
{

}
else
{

}
break;
case state_B:
... ...
}

}

根據你的問題補充,可以這樣劃分狀態
准備輪詢1號機,等待1號機應答(已經輪詢1號機,但1號機未應答),准備輪詢2號機,等待2號機應答,准備輪詢3號機,等待3號機應答,
或者分成3個狀態加一個標志,
輪詢1號機,輪詢2號機,輪詢3號機,加一個有無應答標志,
其實這兩種分法沒有本質區別。
程序框架大概的樣子是這樣
switch ( state )
case 准備輪詢1號機:
發送輪詢1號機的命令
state = 等待1號機的應答;
break;
case 等待1號機的應答;
判斷1號機的應答狀態,可能是正確、錯誤、超時,分別處理,並設置狀態
正確:
state = 准備輪詢2號機
錯誤:
state = 准備輪詢1號機,重試
超時:
state = 准備輪詢1號機,重試,具體做什麼可以很靈活

Ⅱ 用單片機C語言怎麼寫用狀態機實現按鍵控制LED燈閃爍這個程序

#include<STC12C52.H>

#defineucharunsignedchar

#defineuintunsignedint

sbitkey=P1^2;

sbitp1_6=P1^6;

voiddelay(uchardelay_time)

{

ucharn;

uintm;

for(n=0;n<delay_time;n++)

{

for(m=0;m<10000;m++);

}

}

voidkeyscan()

{

if(key==0)

{

delay(5);

if(key==0)

while(!key)

{

p1_6=0;

delay(20);

p1_6=1;

delay(20);

}

}

}

voidmain()

{

WDT_CONTR=0x3C;

while(1)

{

keyscan();

WDT_CONTR=0x3C;

}

}

這個功能可以用中斷來實現,當然,現在我寫的這個也可以實現。由於你用的晶振頻率不知道,所以你自己修改一下延時時間,再把頭文件改一下,就可以了,我試驗了,可以實現改功能。

Ⅲ C語言 狀態機代碼 怎麼寫

剛好前段時間寫了一個簡單協議的狀態機,代碼就不寫了,說一下大概吧
1、確定一共有多少種狀態,這里的狀態有開和關,細分還有say thankyou 和警告
2、確定狀態之間的遷移條件

如果按照四種狀態:開、關、說謝謝、警告,那麼這四種狀態之前的遷移條件很明顯了

分兩個函數:1、檢查是否需要遷移狀態;2、遷移狀態。
遍歷各種狀態檢查是否有狀態需要發生遷移。一般用一個switch將各種狀態列出,然後在各種狀態裡面用if檢查是否需要遷移狀態,如果需要遷移,做好標記。
再次遍歷各種狀態,檢查哪些狀態做了標記,遷移到新狀態,並做相應的操作,比如進入關的時候,做關門動作

剛才忘記說了,還有一個運轉狀態機函數,main函數在被觸發的情況下調用運轉函數,觸發條件有:投幣,人進入。

熱點內容
阿里雲伺服器修改埠 發布:2024-11-26 12:18:21 瀏覽:9
網路存儲器哪個好 發布:2024-11-26 12:03:34 瀏覽:938
crabgame怎麼換伺服器 發布:2024-11-26 12:01:26 瀏覽:250
打開一百兆cad不卡要什麼配置 發布:2024-11-26 11:54:17 瀏覽:616
qq為什麼密碼修改好了就進不去 發布:2024-11-26 11:37:05 瀏覽:383
電容為啥耐壓越大存儲量越小 發布:2024-11-26 11:31:52 瀏覽:190
天然氣車載儲氣瓶泄露處置腳本 發布:2024-11-26 11:17:36 瀏覽:255
換ip的伺服器 發布:2024-11-26 11:17:29 瀏覽:76
容器平台怎麼看配置 發布:2024-11-26 11:06:09 瀏覽:941
qq的xml源碼 發布:2024-11-26 11:04:05 瀏覽:705