如何深入理解“有限状态机”的设计思想?

如何深入理解“有限状态机”的设计思想?

程序设计和数字电路设计中都经常会用到“有限状态机”的设计思想。

在嵌入式软件开发中,状态机编程是一个十分重要的编程思想,它也是嵌入式开发中一个常用的编程框架。掌握了状态机编程思想,可以更加逻辑清晰的实现复杂的业务逻辑功能。

1状态机思想

状态机,或称有限状态机FSM(Finite State Machine),是一种重要的编程思想。

状态机有3要素:状态、事件与响应

·状态:系统处在什么状态?

·事件:发生了什么事?

·响应:此状态下发生了这样的事,系统要如何处理?

状态机编程前,首先要根据需要实现的功能,整理出一个对应的状态转换图(状态机图),然后就可以根据这个状态转换图,套用状态机编程模板,实现对应是状态机代码了。

状态机编程主要有 3种方法:switch-case法、表格驱动法、函数指针法,本篇先介绍最简单也最易理解的switch-case法。

2状态机实例

下面以按键消抖功能,来介绍switch-case法的状态机编程思路。

2.1按钮消抖状态转换图

状态机机编程前,首先要明确的对应功能的状态机需要几个状态,本例的按键功能,只检测最基础的按下与松开状态(暂不实现长按、双击等状态),并增加对应的按钮去抖功能,因此,需要用到4个状态:

·稳定松开状态

·按下抖动状态

·稳定按下状态

·松开抖动状态

对应的状态转换图如下:

25191dd9ab509f069e199d7d9f4fb62d.jpeg

由于按键通常处于松开状态,这里让状态机的初始化状态为松开状态,然后在这4个状态中来回切换。

图中的VT代表按键检测到电平,VT=0即检测到低电平,可能是按键按下,由初始的“稳定松开”状态转为“按下抖动”状态

当持续检测到低电平(V

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 单片机是一种微控制器,它集成了处理器、存储器、输入/输出接口等功能。 思想上,单片机编程包括对输入信号的读取、对输出信号的控制、对中间运算结果的存储等。 示例代码: ``` #include <stdio.h> int main() { int input_signal; int output_signal; int intermediate_result; // 读取输入信号 input_signal = get_input(); // 进行运算 intermediate_result = process(input_signal); // 控制输出信号 output_signal = control_output(intermediate_result); return 0; } ``` 在这个简单的示例代码中,单片机读取输入信号,进行运算得到中间结果,最后控制输出信号。 ### 回答2: 单片机的思想代码示例主要包括初始化和具体功能实现两部分。 首先是初始化部分,主要用于设置单片机的工作环境。首先要设置时钟源和时钟分频器,以确保单片机按照预定频率运行。然后需要设置IO口的方向和初始状态,以便控制外部设备。接下来是中断的初始化,包括开启中断、设置中断优先级和中断触发条件等。最后可以设置其他一些系统相关的初始化,比如模块的使能和设置工作模式等。 其次是具体功能实现部分,这部分代码是根据实际需求来编写的。假设我们要实现一个控制LED灯亮灭的功能,可以通过控制IO口的高低电平来实现。首先要定义一个变量来存储IO口的地址,然后在设置IO口为输出模式后,可以通过改变变量的值来控制LED灯的亮灭。比如将变量赋值为1,就可以使IO口输出高电平,LED灯亮起;将变量赋值为0,就可以使IO口输出低电平,LED灯熄灭。 在具体功能实现部分还可以包括其他的操作,比如延时、蜂鸣器发声等。延时可以通过循环计数实现,比如设定一个计数器,每次计数加1,当计数达到一定值时进行下一步操作。蜂鸣器发声可以通过PWM(脉宽调制)来实现,通过改变占空比来控制频率和音量。 综上所述,单片机的思想代码示例包括初始化和具体功能实现两部分,通过合理设置和编写代码,可以实现各种各样的功能。 ### 回答3: 单片机是一种微型计算机,它能通过执行预先编写的代码来实现特定的功能。单片机的代码可以分为思想代码和示例代码两种类型。 思想代码主要包括算法和逻辑部分的设计,用来描述解决问题的思路和具体实现的步骤。这些代码通常是高级语言编写的,如C语言或汇编语言。思想代码的编写需要对问题有深入的理解和分析,以确定需要实现的功能、所需的输入和输出以及数据的处理方式。在设计思想代码时,需要考虑到单片机的硬件资源和限制,以确保代码能够在单片机上正确地运行。 示例代码则是基于思想代码编写的具体实现代码,它包含了具体的语法和指令,用来指导单片机的操作。示例代码通常是低级语言编写的,如汇编语言或机器语言。示例代码可以直接在单片机上运行,实现预定的功能。示例代码可以通过调用各种库函数和指令,来操作单片机的硬件资源,如输入输出引脚、定时器和串口等。示例代码的编写需要根据单片机的具体型号和功能进行适当的调整和配置,以充分发挥单片机的性能和功能。 思想代码和示例代码是单片机编程的两个重要组成部分。思想代码描述了解决问题的思路和实现的具体步骤,而示例代码则是具体的实现代码,指导单片机的操作。两者密切合作,相互依赖,共同完成对单片机功能的实现。通过编写思想代码和示例代码,可以充分利用单片机的资源和功能,实现各种实际应用场景中的需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值