C模块化编程

此文章是为51单片机编程情景编写的。

对比不同的编程方式:

  • 传统方式编程:所有的函数均放在main.c里,若使用的模块比较多,则一个文件内会有很多的代码,不利于代码的组织和管理,而且很影响编程者的思路。

  • 模块化编程:把各个模块的代码放在不同的.c文件里,在.h文件(头文件)里提供外部可调用函数的声明(相当于接口),其它.c文件想使用其中的代码时,只需要#include "XXX.h"文件即可。使用模块化编程可极大的提高代码的可阅读性、可维护性、可移植性等。

模块化编程示例

C模块化编程及51单片机调试

模块化编程注意事项

  • .c文件存放函数、变量的定义

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

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

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

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

    如果模块化文件存放于源代码根目录下,就不需要再添加Include Paths

C预编译

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

用于对程序的某些部分是否编译来做出选择。既可以选择性编译,又可以减小编译后的程序大小。

通常使用以下结构来防止重复定义:

//如果没有定义__XX_H__
#ifndef __XX_H__

//定义__XX_H__
#define __XX_H__

//code...

//与#ifndef __XX_H__匹配,结束if判断
#endif

也可以使用以下结构指定编译时的自定义部分:

//指定存储设备
#define SDCARD

#ifdef SDCARD
//code...
#endif

ifdef EEPROM
//code...
#endif

//code...

LCD1602调试

使用LCD1602液晶屏作为调试窗口,提供类似printf函数的功能,可实时观察单片机内部数据的变换情况,便于调试和演示。

在开发板上,将LCD1602正向插入此接口即可。

image-20221229220702376

点击此链接下载普中开发板LCD1602驱动代码(来自B站江科大自化协):LCD1602驱动代码 | Mikumikumi 文件站

此处提供的LCD1602代码属于模块化的代码,使用者只需要知道所提供函数的作用和使用方法就可以很容易的使用LCD1602。详细用法请查看源代码注释。