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

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

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

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

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

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

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

相关推荐
FreakStudio11 天前
W55MH32L-EVB 上手测评:硬件 TCP/IP 加持的以太网单片机,MicroPython 零门槛开发
python·单片机·嵌入式·大学生·面向对象·并行计算·电子diy·电子计算机
✎ ﹏梦醒͜ღ҉繁华落℘16 天前
单片机基础知识---stm32单片机的优先级
stm32·单片机·mongodb
u1521096484916 天前
S.S.Audio PRO A2音频隔离器
嵌入式硬件·音视频·实时音视频·视频编解码·视频
zd84510150016 天前
RS485 总线详解
单片机·嵌入式硬件
半条-咸鱼16 天前
【STM32】I2C协议原理、HAL读写与OLED显示操作
嵌入式硬件·c·信息与通信
wohoo_wangzi16 天前
苏州晟雅泰电子:关于W25Q128JVSIQ这个芯片物料的参数,规格及应用领域
嵌入式硬件
✎ ﹏梦醒͜ღ҉繁华落℘16 天前
编程基础 --高内聚,低耦合
c语言·单片机
科芯创展16 天前
1A,1MHz,30VIN,XZ4115,降压恒流LED驱动芯片
单片机·嵌入式硬件
集芯微电科技有限公司16 天前
四通道2A输出集成功率电感降压模块专为紧凑型方案设计
人工智能·单片机·嵌入式硬件·生成对抗网络·计算机外设
踏着七彩祥云的小丑16 天前
嵌入式测试学习第 37 天:异常场景测试:断电、拔插、干扰、非法指令
单片机·嵌入式硬件·学习