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

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

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

拿大家熟知的按键控制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;
}

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

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

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

相关推荐
CODECOLLECT3 小时前
京元 I62D Windows PDA 技术拆解:Windows 10 IoT 兼容 + 硬解码模块,如何降低工业软件迁移成本?
stm32·单片机·嵌入式硬件
BackCatK Chen3 小时前
STM32+FreeRTOS:嵌入式开发的黄金搭档,未来十年就靠它了!
stm32·单片机·嵌入式硬件·freertos·低功耗·rtdbs·工业控制
全栈游侠6 小时前
STM32F103XX 02-电源与备份寄存器
stm32·单片机·嵌入式硬件
Lsir10110_6 小时前
【Linux】中断 —— 操作系统的运行基石
linux·运维·嵌入式硬件
深圳市九鼎创展科技8 小时前
瑞芯微 RK3399 开发板 X3399 评测:高性能 ARM 平台的多面手
linux·arm开发·人工智能·单片机·嵌入式硬件·边缘计算
辰哥单片机设计8 小时前
STM32项目分享:车辆防盗报警系统
stm32·单片机·嵌入式硬件
小龙报10 小时前
【51单片机】从 0 到 1 玩转 51 蜂鸣器:分清有源无源,轻松驱动它奏响新年旋律
c语言·数据结构·c++·stm32·单片机·嵌入式硬件·51单片机
范纹杉想快点毕业10 小时前
嵌入式与单片机开发核心学习指南——从思维转变到第一性原理的深度实践
单片机·嵌入式硬件
Industio_触觉智能10 小时前
瑞芯微RK3566开发板规格书,详细参数配置,型号EVB3566-V1,基于RK3566核心板SOM3566邮票孔封装
嵌入式硬件·开发板·rk3568·rk3566·核心板·瑞芯微
czwxkn10 小时前
4STM32(stdl)TIM定时器
stm32·单片机·嵌入式硬件