感谢阅读本文,在接下来很长的一段时间里,我将陆续分享项目实战经验。从电源、单片机、晶体管、驱动电路、显示电路、有线通讯、无线通信、传感器、原理图设计、PCB设计、软件设计、上位机等,给新手综合学习的平台,给老司机交流的平台。所有文章来源于项目实战,属于原创。

阅读说明:

1、Keil4 C51工程网址:
https://yunpan.360.cn/surl_yrivR7JxUxu
2、需要一定的C语言基础,才看得懂此文。

一、有限状态机
有限状态机是一种概念思想,把复杂的控制逻辑分解成有限个稳定状态,组成闭环系统,通过事件触发,让状态机按设定的顺序处理事务。
单片机C语言的状态机编程,是利用条件选择语句(switch – case)切换状态,通过函数内部指令改变状态机状态,让程序按设定的顺序执行。

二、应用说明
1、要想使用状态机进行编程,需要将任务分解成有限个稳定状态。
2、举例说明

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

三、编程实例
以LoRa推送为例进行说明。

1、定义有限状态机:

共5个状态,请求数据、推送、验证、待机、唤醒。

2、主函数:

执行有限状态机。

3、执行函数

在执行函数中切换状态机的状态。
五、小结
单片机C语言的状态机编程,是利用条件选择语句(switch
case)切换状态,通过函数内部指令触发状态切换,让程序按设定的顺序执行。
状态机编程涉及的知识点很多,本文只是简要的介绍了下,仅仅起到抛砖引玉的作用,日后设计过程中,需要不断的总结经验,沟通交流,以达到真正的理解,灵活运用。

欢迎加入硬件家园单片机学习群,群号925620931,别具一格的单片机免费教学,以产品为导向,一起做项目。
开源项目,开发工具,技术资料以及更多原创技术文章,请关注微信公众号。
硬件家园 yjjy168168168

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

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

  1. c++ 结构体初始化_单片机C语言 - 基于结构体的面向对象编程技巧

    单片机C语言 - 基于结构体的面向对象编程技巧 一.面向对象 面向对象是软件开发方法,是相对于面向过程来讲的.通过把数据与方法组织为一个整体来看待,从更高的层次来进行系统建模,更贴近事物的自然运行模式 ...

  2. 110报警声+单片机c语言,基于单片机的红外报警系统设计毕业论文.docx

    基于单片机的红外报警系统设计 摘要:随着社会经济的发展,人们生活水平的不断提高,与此同时对人生安全和财产安全提到了一个新的高度,盗窃.入室抢劫等刑事案件的多发使得人们越来越渴望有一个安全生活的空间.传 ...

  3. 电子密码锁课设单片机c语言,基于51单片机的电子密码锁综合课程设计

    5.大容量片内EEPROM,擦写次数10万次以上 EEPROM,擦写次数10万次以上,擦写次数10万次以上 6.ISP/IAP,在系统可编程/在应用可编程,无需编程器/仿真器 7.共8通道10位高速A ...

  4. 万年历设计单片机c语言,基于51单片机的电子万年历的设计

    基于51单片机的电子万年历的设计(论文9400字) 功能要求 1. 万年历能用数码管显示阳历年.月.日.星期.[小]时.分.秒并设置指定时间的闹铃. 2. 数字式温度计要求测温范围-50~100°C, ...

  5. 万年历设计单片机c语言,基于单片机的电子万年历设计(含电路图,Proteus仿真程序)...

    基于单片机的电子万年历设计(含电路图,Proteus仿真程序)(论文11000字,Proteus仿真程序) 摘    要 万年历作为日常生活中重要的时间显示设备,在人们的外出旅游和日常生活中都发挥了重 ...

  6. 水塔水位控制器单片机c语言,基于单片机的水塔水位控制器设计.doc

    基于单片机的水塔水位控制器设计 河南质量工程职业学院 毕业设计 题 目:水塔水位设计 系 别:机电工程系 专业班级:商检技术 班 级: 学生姓名: 指导老师: 设计时间: 2012年3月13 日 河南 ...

  7. 智能小车52单片机c语言,基于单片机的循迹避障智能小车设计文档

    第3章 系统硬件电路设计3.1总体设计 智能小车采用两个前轮和一个万向轮的方式,在前轮的左右两端各安装一个电机驱动,利用电机驱动芯片L293D来控制两个前轮的左右转向和停止,后轮是一个万向轮,有支撑和 ...

  8. 水塔水位控制器单片机c语言,基于51单片机的水塔水位自动控制器的设计

    目   录 1. 项目简介 2. 方案论证 3. 原理及模块分析 4. 经费使用情况 5. 体会和建议 1 .项目简介: 现今社会,自动化装置无所不在,在控制技术需求的推动下,控制理论本身也取得了显著 ...

  9. 单片机c语言编程 时钟加日历转换,单片机C语言电子时钟加日历显示编程

    一. 任务和要求设计制作一个电子表并且能够显示日历,用LED数码管直接显示,并且能够通过按键调整时间.年月日,功能为按第一个键被调整的相应调整区域开始闪烁,第二个键加一,第三个减一,第四个确认,最后一 ...

  10. 时钟电路程序设计c语言,单片机C语言电子时钟加日历显示编程

    一. 任务和要求 设计制作一个电子表并且能够显示日历,用LED数码管直接显示,并且能够通过按键调整时间.年月日,功能为按第一个键被调整的相应调整区域开始闪烁,第二个键加一,第三个减一,第四个确认,最后 ...

最新文章

  1. AI一分钟|腾讯AI绝艺让二子,仍战胜柯洁;Google与腾讯达成专利交叉授权许可协议
  2. PHPCMS V9数据库表结构分析
  3. Python学习笔记(2)-Python执行方式、变量
  4. 3、将对象存储到zookeeper中,然后再拿下来还原
  5. 【Network Security!】Linux中apt-get update和apt-get upgrade命令的区别
  6. jsp 验证码以及验证码局部刷新
  7. Spring5参考指南:JSR 330标准注解
  8. 后端学习 - 设计模式与设计原则
  9. pytorch gather_GCN的简单实现(pytorch)
  10. 揭秘 IPython 的 5 种最佳调试方法
  11. robotframework接口测试初探1
  12. 面向对象的JavaScript-008-Function介绍
  13. yii 获取当前域名_yii2 在域名后面加一个路径作为首页
  14. Bootstrap-CSS全样式
  15. ubuntu 、emacs中使用翻译功能
  16. PDF reference 1.0-1.7 下载(免费)以及PDF结构介绍
  17. linux用sed替换字符,Linux中使用sed命令替换字符串小结
  18. 推荐10款笔者一直在使用的Chrome提效插件
  19. 【报告分享】京东大数据研究院:2020线上农产品消费趋势报告(附下载)
  20. 基于内容的图像检索引擎(以图搜图)

热门文章

  1. matlab串级控制系统设计,SVPWM在串级调速系统中的MATLAB仿真研究
  2. php 自定义字段erp,在SuiteCRM中创建自定义字段类型
  3. 服务器CRT显示不全,CRT显示器显示画面不正常常见原因揭密
  4. golang版微信小程序图片上传,服务器保存
  5. AM5728 + 映美精工业相机图像处理案例
  6. vs201x下正则表达式过滤中文
  7. Linux中查看文件夹大小的命令
  8. 用Python代码实现将exl表格内容,批量写到word里面
  9. Java 堆排序(大根堆及小根堆)
  10. Python:科赫曲线绘制雪花