在第一次听到状态机这个词的时候,相信我们都有相同的疑问:什么是状态机?用来干嘛的?我们先来看一下有关状态机的定义:“状态机由状态寄存器和组合逻辑电路构成,能够根据控制信号按照预先设定的状态进行状态转移,是协调相关信号动作、完成特定操作的控制中心。有限状态机简写为FSM(Finite State Machine),主要分为2大类:
第一类,若输出只和状态有关而与输入无关,则称为Moore状态机;第二类,输出不仅和状态有关而且和输入有关系,则称为Mealy状态机“。简单的理解就是把一个事物按照设定好的状态运行。
那么在编程的时候为什么会有万能的状态机一说呢?这是因为所有的控制过程都可以看成是一个周期的循环控制过程,在这个周期控制中,我们可以根据不同的信息来决定控制量所处的状态,下面我举两个例子具体分析状态机的应用。
现有一串二进制序列号和为:1000110100111010001111011010101111100010010001110001100111110110000000111111111111, 假如要求我们从这一堆数据检测出里面有多少个1011序列。想类似这种情况,用状态机就可以非常简单的实现了。要想检测1011序列号,那么我们就先要检测到1,接下来就要检测到0,然后又要检测到1,最后要检测到1。也就是说我们要检测到1011,那就必须经过如下5个状态:初始状态(状态0)->检测到1(状态1)-> 检测到10->(状态2)->检测到101(状态3)-> 检测到1011(状态4)->初始状态(状态0).
每个状态必须满足条件后才可进入下一个状态,否则就回到初始状态,在程序中我们只要我们按照这个逻辑来处理就好了。转换关系如下图:
交通信号灯也可以用状态机的原理来实现,因为信号灯的变化状态是有限的,各个状态可以列举出来,状态间切换由计数器决定,比如某个车道现在是黄灯,那5s后就需要切换到另外一种状态了,对应其他车道的信号灯也需要做相应的切换。
大家如对作者的文章感兴趣,可以关注作者,如有不明白的地方,可以私信给作者,下一篇为你讲解使用单片机实现电子密码锁,源码和Proteus仿真电路图也将同时分享给你。