单片机C语言 -- 基于条件选择的状态机编程技巧

发布时间:2020-02-26 阅读量:1327 来源: 我爱方案网 作者:

【编者按】单片机C语言的状态机编程,是利用条件选择语句(switch case)切换状态,通过函数内部指令触发状态切换,让程序按设定的顺序执行。 


阅读说明:


1、Keil4 C51工程网址:httpsyunpan.360.cnsurl_yrivR7JxUxu

2、需要一定的C语言基础,才看得懂此文。


一、有限状态


有限状态机是一种概念思想,把复杂的控制逻辑分解成有限个稳定状态,组成闭环系统,通过事件触发,让状态机按设定的顺序处理事务。


单片机C语言的状态机编程,是利用条件选择语句(switch -- case)切换状态,通过函数内部指令改变状态机状态,让程序按设定的顺序执行。


二、应用说明


1、要想使用状态机进行编程,需要将任务分解成有限个稳定状态


2、举例说明


按钮按键典型的动作图.png


上图为按钮按键典型的动作图,可以提取为四个状态,分别为状态1 = 按键起状态、状态2 = 按键不稳定状态1、状态3 = 按键按下状态、状态4 = 按键不稳定状态2。


有限状态机实现如下:

 有限状态机实现.png

 三、编程实例


以LoRa推送为例进行说明。


1、定义有限状态机: 共5个状态,请求数据、推送、验证、待机、唤醒。

 

1、定义有限状态机.png

  

2、主函数执行有限状态机

主函数.png

3、执行函数:在执行函数中切换状态机的状态

执行函数.png

五、小结


单片机C语言的状态机编程,是利用条件选择语句(switch case)切换状态,通过函数内部指令触发状态切换,让程序按设定的顺序执行。 

  

状态机编程涉及的知识点很多,本文只是简要的介绍了下,仅仅起到抛砖引玉的作用,日后设计过程中,需要不断的总结经验,沟通交流,以达到真正的理解,灵活运用。

 

开源项目,开发工具,技术资料以及更多原创技术文章,请关注微信公众号:硬件家园(yjjy168168168

 

作者:刘杰,专注软硬件技术10年,全职提供技术开发与技术服务、生产支持等。

相关资讯
核心对比!无源晶振与有源晶振在结构和工作原理的本质区别

无源晶振与有源晶振是电子系统中两种根本性的时钟元件,其核心区别在于是否内置振荡电路。晶振结构上的本质差异,直接决定了两者在应用场景、设计复杂度和成本上的不同。

温度稳定性对RTC晶振的计时误差影响与分析

RTC(实时时钟)电路广泛采用音叉型32.768kHz晶振作为时基源,但其频率稳定性对温度变化极为敏感。温度偏离常温基准(通常为25℃)时,频率会产生显著漂移,且偏离越远漂移越大。

从参数到实践!剖析有源晶振的频率稳定度、老化率及正确接线方案

有源晶振作为晶振的核心类别,凭借其内部集成振荡电路的独特设计,无需依赖外部电路即可独立工作,在电子设备中扮演着关键角色。本文将系统解析有源晶振的核心参数、电路设计及引脚接法,重点阐述其频率稳定度、老化率等关键指标,并结合实际电路图与引脚定义,帮助大家全面掌握有源晶振的应用要点,避免因接线错误导致器件失效。

如何对抗晶振老化?深入生产工艺与终端应用的防老化指南

晶振老化是影响其长期频率稳定性的核心因素,主要表现为输出频率随时间的缓慢漂移。无论是晶体谐振器还是晶体振荡器,在生产过程中均需经过针对性的防老化处理,但二者的工艺路径与耗时存在显著差异。

无源晶振YSX321SL应用于高精度HUD平视显示系统YXC3225

在现代汽车行业中,HUD平视显示系统正日益成为驾驶员的得力助手,为驾驶员提供实时导航、车辆信息和警示等功能,使驾驶更加安全和便捷。在HUD平视显示系统中,高精度的晶振是确保系统稳定运行的关键要素。YSX321SL是一款优质的3225无源晶振,拥有多项卓越特性,使其成为HUD平视显示系统的首选。