51单片机之模块化编程

一、模块化编程与传统方式编程的区别

传统方式编程 :在这种编程方式中,所有的函数通常都被放置在同一个文件main.c中。当项目中使用的模块较多时,这个文件中会包含大量的代码,导致代码难以组织和管理,也影响了编程者的思路。这种方式缺乏清晰的结构划分,使得代码的可读性和可维护性降低。

模块化编程 :模块化编程则通过将程序分解成多个独立且可互换的模块来提高代码的灵活性、可维护性和复用性。每个模块都包含执行特定功能的所有必要代码,并且可以被独立地开发、测试和维护。模块之间的代码被放在不同的.c文件中,而在.h(头文件)中提供外部可调用函数的声明。其他模块或文件需要使用某个模块的功能时,只需通过#include指令包含相应的头文件即可。这种方式使得代码结构更加清晰,易于管理和维护。

模块化编程在代码结构与组织、代码复用性、代码可读性与可维护性以及团队协作等方面都显著优于传统方式编程。因此,在现代软件开发中,模块化编程已经成为一种广泛采用的编程范式。

二、 模块化编程

2.1 模块化编程框图

2.2 模块化编程注意事项

.c文件:存放的是函数、变量的定义(可运行的代码)

.h文件:可被外部调用的函数、变量的声明

任何自定义的变量、函数在调用前必须有定义或声明(同一个.c)

使用到的自定义函数的.c文件必须添加到工程参与编译

使用到的.h文件必须要存放在编译器可找到的地方(工程文件夹根目录、安装目录、自定义)

三、C预编译

C语言的预编译以#开头,作用是在真正的编译开始之前对代码做一些处理(预编译)。

四、模块化延时函数和数码管

4.1 < >与" "的区别

使用< >包含头文件时,预处理器会在标准库路径中查找该头文件。这些路径通常是由编译器或环境变量指定的,用于存放标准库的头文件。如果你使用的是标准库中的头文件(如stdio.hstdlib.h等),就应该使用尖括号。

使用" "包含头文件时,预处理器会首先在包含当前源文件的目录中查找该头文件,如果未找到,则继续在标准库路径中查找。这允许开发者编写自己的头文件,并且在使用时,可以通过在相同目录下放置头文件来避免指定复杂的路径。如果头文件的名称与标准库中的头文件冲突,使用双引号可以避免潜在的混淆。

总结:

使用尖括号< >主要是为了包含标准库中的头文件。

使用双引号" "可以包含用户自定义的头文件,或者当你想覆盖标准库中的头文件时使用(尽管这种做法不推荐)。

4.2 步骤

1、新建好工程后添加main.c文件,写出基本框架

2.像添加main.c文件一样新建一个Delay.c文件

3.在Delay.c文件中加入Delay函数

4.创建Delay.h文件

5.添加好后左侧任务栏没有出现Delay.h(已经存放在了main.c文件的文件夹内,编译时可以找到),可以将其添加进当前工程目录中 方便管理,此步骤也可以跳过

6.编写Delay.h文件

7.重复上述步骤添加数码管的.c和.h文件

8.这样只需要在main函数中添加上头文件直接调用就好了

相关推荐
Dr.kangder2 小时前
嵌入式面试总结(十五)——异常处理
单片机·面试·职场和发展·系统架构·嵌入式
zlinear数据采集卡4 小时前
D223上位机C#开发实战:从帧解析到波形显示的完整实现
开发语言·arm开发·嵌入式硬件·fpga开发·开源·c#
ACP广源盛139246256734 小时前
蚂蚁百灵 Ling‑3.0‑flash 开源 + 昇腾 0‑Day 原生适配@ACP#GSV9001E 在国产算力矩阵中的机会与落地场景
大数据·人工智能·分布式·单片机·嵌入式硬件
Rocktech_ruixun6 小时前
机器人端侧大模型部署对主板有哪些要求?瑞迅主控板分级方案对比
人工智能·嵌入式硬件·机器人
振南的单片机世界6 小时前
SysTick硬核拆解:既是HAL_Delay的“心跳”,也是RTOS的“节拍器”
arm开发·stm32·单片机·嵌入式硬件
Lzh编程小栈7 小时前
【嵌入式底层】SPI超透彻详解:通信原理、四线结构、四种模式、寄存器底层 + 面试全集
c语言·stm32·单片机·面试·职场和发展
Rocktech_ruixun7 小时前
机器人数据采集能力取决于什么?瑞迅科技RK3588/3576核心板方案深度解析
人工智能·嵌入式硬件·机器人
水果里面有苹果7 小时前
28-DRV8825PWPR步进电机驱动器
单片机
恒锐丰科技韩生8 小时前
率能 SS6625E|3.0~20V 单通道 H 桥直流电机驱动 SOP8 电子锁玩具机器人分享
嵌入式硬件·硬件工程
zlinear数据采集卡8 小时前
D223 ADC数据处理流水线:从原始采样值到工程单位的完整转换链
开发语言·arm开发·嵌入式硬件·fpga开发·开源·c#