什么是状态机编程和模块化编程

今天我听别人说什么是状态机编程这个和我们的模块话编程有什么联系

比如我们这里举出一个很简单的例子

拿大家熟知的按键控制LED灯来说吧

这个正好满足模块化和状态机编程

我们可以把LED和按键分模块来使用,在keil里面我们会封装成为

Led.c,Key.c,Led.h,Key.h

之后对他们分别进行初始化,这里我使用标准库来给大家做演示

Led.c

cpp 复制代码
#include "stm32f10x.h"
#include "Led.h"
void LedInit(){
	RCC_AHBPeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
	GPIO_InitTypeDef Led;
	Led.GPIO_Mode=GPIO_Mode_Out_PP;
	Led.GPIO_Pin=GPIO_Pin_0;
	Led.GPIO_Speed=GPIO_Speed_50MHz;
	GPIO_Init(GPIOA,&Led);
    // 初始化之后让灯亮
    GPIO_ResetBits(GPIOA,GPIO_Pin_0);
}
void LedOFF(){
	GPIO_SetBits(GPIOA,GPIO_Pin_0);
}
void LedON(){
	GPIO_ResetBits(GPIOA,GPIO_Pin_0);
}

可以看出这个就是Led的三种状态

初始化,灯亮,灯灭这三种状态

Key.c

cpp 复制代码
#include "stm32f10x.h"
#include "Key.h"
void KeyInit(){
	RCC_AHBPeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
	GPIO_InitTypeDef Key;
	Key.GPIO_Mode=GPIO_Mode_IPU;
	Key.GPIO_Pin=GPIO_Pin_1;
	Key.GPIO_Speed=GPIO_Speed_50MHz;
	GPIO_Init(GPIOA,&Key);
    
}
bool KeyPress(){
    bool KeyPress=False;
    if (GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_1) == 0){
        delay_ms(20);
        while (GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_1) == 0);
        delay_ms(20);
        KeyPress=Ture;
    }
    return KeyPress;
}

这把按下按键和按键初始化这两个状态给分开

但这两个是分别是两个模块

这就是我对模块化编程和状态机编程的简单理解欢迎批评指正

相关推荐
HRTOS28 分钟前
HRTOS 4.0 实测:8051 中断响应延迟与中断嵌套性能测试
单片机·嵌入式硬件·51单片机
NendoZen28 分钟前
万用板焊接LM2940实现5V电源模块
单片机·嵌入式硬件
FPGA小徐29 分钟前
硬件面试真题:运放滞回比较器波形分析
单片机·嵌入式硬件·pcb
沐欣工作室_lvyiyi1 小时前
基于单片机的智能婴儿摇篮控制系统设计(论文+源码)
单片机·嵌入式硬件·物联网·数据库设计·物联网毕业设计·智能婴儿摇篮
霖霖7141 小时前
【ESP32笔记】ESP中的分区表
笔记·单片机·mcu·物联网
狂奔v蜗牛1 小时前
电子保险丝(eFuse)电路
嵌入式硬件
木由里予1 小时前
3D NAND 闪存的可靠性
开发语言·嵌入式硬件
亿道电子Emdoor1 小时前
【Arm】访问陷阱简介
arm开发·单片机·mcu
ouynagda2 小时前
iMX6ull Linux 嵌入式驱动开发笔记(LCD / ADXL345 / SPI 子系统)
linux·arm开发·驱动开发·笔记·嵌入式硬件
传感器与混合集成电路2 小时前
LIFM1 LIFM2 LIFM3多路IF转换模块量程输出频率精度等级选型
嵌入式硬件