概述
#include <stdio.h>
//利用Switch编写状态机
//警告:单片机中编写程序时,printf("n")应当删去
/*
* Name : void Cal_Back_Function_1/2/3/4(void)
*
* Function : 不同状态的执行函数
*
* brief : 下面是定义了四个不同的执行函数,只需要在其中填入相应的函数操作;
*
*
*/
void Cal_Back_Function_1(void)
{
printf("状态1所要执行的操作n");
}
void Cal_Back_Function_2(void)
{
printf("状态2所要执行的操作n");
}
void Cal_Back_Function_3(void)
{
printf("状态3所要执行的操作n");
}
void Cal_Back_Function_4(void)
{
printf("状态4所要执行的操作n");
}
/*
* Name : Handle_Function(void *p(void))
*
* Function : 状态机执行函数
*
* brief : 利用回调函数的方式传入参数(含糊)
*
*
*/
void Handle_Function(void (*p)(void) )
{
(*p)();
}
void main()
{
int State=1;
while(1)
{
switch(State)
{
case 1:
printf("this is 状态1n");
Handle_Function(Cal_Back_Function_1);
State=2;
break;
case 2:
printf("this is 状态2n");
Handle_Function(Cal_Back_Function_2);
State=3;
break;
case 3:
printf("this is 状态3n");
Handle_Function(Cal_Back_Function_4);
State=4;
break;
case 4:
printf("this is 状态4n");
Handle_Function(Cal_Back_Function_4);
State=1;
printf("n");
printf("n");
break;
}
}
}
用户只需要在相应的回调函数添加相应的功能即可,再使用Handle_Function(),在主函数中调用即可。
特别提醒:单片机中编写程序时,printf("n")应当删去 。
方法二:利用if-else编写状态机
#include <stdio.h>
//利用if-else 编写状态机 ,Cur_State 记录状态;
int Cur_State; //状态情况
int main(void)
{
Cur_State=0;
while(1)
{
if( Cur_State==0)
{
printf("这是状态一n");
Cur_State=1;
}
else if(Cur_State==1)
{
printf("这是状态二n");
Cur_State=2;
}
else if(Cur_State==2)
{
printf("这是状态三n");
Cur_State=3;
}
else if(Cur_State=3)
{
printf("这是状态四n");
Cur_State=0;
}
}
return 0;
}
运行结果:
后续我会继续补充更加精炼的状态机写法;欢迎大佬指点一二;
最后
以上就是贪玩麦片为你收集整理的C语言—Switch编写单片机状态机程序的全部内容,希望文章能够帮你解决C语言—Switch编写单片机状态机程序所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复