当前位置:首页 » 编程语言 » 状态机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函数在被触发的情况下调用运转函数,触发条件有:投币,人进入。

热点内容
pythondict参数 发布:2024-11-26 14:49:41 浏览:105
ubuntu安装linux源码 发布:2024-11-26 14:48:52 浏览:744
百度云解压密码忘记 发布:2024-11-26 14:35:36 浏览:863
最差拟合算法 发布:2024-11-26 14:21:17 浏览:739
指令式编程 发布:2024-11-26 14:16:24 浏览:19
阿里云ftp修改密码 发布:2024-11-26 14:12:11 浏览:617
mt4服务器ip 发布:2024-11-26 13:31:56 浏览:867
虚拟机编译得到bin文件 发布:2024-11-26 13:31:00 浏览:419
javaenumofenum 发布:2024-11-26 13:20:09 浏览:922
脚本中ge 发布:2024-11-26 13:14:24 浏览:376