怎么用c语言写状态机呀?请举例说明

Python09

怎么用c语言写状态机呀?请举例说明,第1张

c语言状态机之前:

1、确定一共有多少种状态,这里的状态有开和关,细分还有say thankyou 和警告

2、确定状态之间的迁移条件

如果按照四种状态:开、关、说谢谢、警告,那么这四种状态之前的迁移条件很明显了

分两个函数:

1、检查是否需要迁移状态;

2、迁移状态.

遍历各种状态检查是否有状态需要发生迁移.一般用一个switch将各种状态列出,然后在各种状态里面用if检查是否需要迁移状态,如果需要迁移,做好标记.

再次遍历各种状态,检查哪些状态做了标记,迁移到新状态,并做相应的操作,比如进入关的时候,做关门动作。

典型的状态机结构:

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:

... ...

}

}

按键控制LED闪烁,状态机就是检测按键,如果没有按下就不闪烁,如果按下就开始闪烁。楼主提的问题就是一个问题。你到底是想问状态机还是想问程序?

“用单片机C语言怎么写用状态机,实现按键控制LED灯闪烁,这个程序”

“用单片机C语言怎么写,用状态机实现,按键控制LED灯闪烁这个程序”

???

在s1s2两个状态下,在相同输入条件下,确定s1s2等价:strcmp(s1,s2)相等时返回0,在C语言里0代表false。

在下面的条件语句中(其中S1个S2表示C语言语句),只有(D)在功能上与其他三个语句不等价。

A、if(a)S1:elseS2

B、if(a==0)S2:elseS1

C、if(a!=0)S1:elseS2

D、if(a==0)S1:elseS2

基本信息

状态机由状态寄存器和组合逻辑电路构成,能够根据控制信号按照预先设定的状态进行状态转移,是协调相关信号动作,完成特定操作的控制中心。状态机分为摩尔(Moore)型状态机和米莉(Mealy)型状态机。

状态机就是状态转移图。举个最简单的例子,人有三个状态:健康,感冒,康复中。触发的条件有淋雨(t1),吃药(t2),打针(t3),休息(t4)。