5-模块化编程
1.定义
模块化编程:把各个模块的代码放在不同的.c文件里,在.h文件里提供外部可调用函数的声明,其它.c文件想使用其中的代码时,只需要#include "XXX.h"文件即可。使用模块化编程可极大的提高代码的可阅读性、可维护性、可移植性等
2.注意事项
.c文件:函数、变量的定义
.h文件:可被外部调用的函数、变量的声明
任何自定义的变量、函数在调用前必须有定义或声明(同一个.c)
使用到的自定义函数的.c文件必须添加到工程参与编译
使用到的.h文件必须要放在编译器可寻找到的地方(工程文件夹根目录、安装目录、自定义)
3.C语言预编译
C语言的预编译以#开头,作用是在真正的编译开始之前,对代码做一些处理(预编译)
预编译 | 意义 |
---|---|
#include <REGX52.H> | 把REGX52.H文件的内容搬到此处 |
#define PI 3.14 | 定义PI,将PI替换为3.14 |
#define ABC | 定义ABC |
#ifndef XX_H | 如果没有定义__XX_H__ |
#endif | 与#ifndef,#if匹配,组成“括号” |
此外还有#ifdef,#if,#else,#elif,#undef等
4.实例
把原本的Delay函数以及数码管显示函数都各自编写成一个新的.c文件,并且创建一个相应的.h文件,main文件就可以通过引用这个.h文件来引用其中的函数
Delay.c
void Delay(unsigned int xms) { unsigned char i, j; while(xms--) { i = 2; j = 199; do { while (--j); } while (--i); } }
Nixie.c
#include <STC89C5xRC.H> #include "Delay.h" unsigned char NixieTable[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F}; void Nixie(unsigned char location,number) { switch(location) { case 1:P24=1;P23=1;P22=1;break; case 2:P24=1;P23=1;P22=0;break; case 3:P24=1;P23=0;P22=1;break; case 4:P24=1;P23=0;P22=0;break; case 5:P24=0;P23=1;P22=1;break; case 6:P24=0;P23=1;P22=0;break; case 7:P24=0;P23=0;P22=1;break; case 8:P24=0;P23=0;P22=0;break; } P0=NixieTable[number]; Delay(1); P0=0x00; }
Delay.h文件
#ifndef __DELAY_H__//如果没有定义DELAY,就定义 #define __DELAY_H__ void Delay(unsigned int xms); #endif
Nixie.h文件
#ifndef __NIXIE_H__ #define __NIXIE_H__ void Nixie(unsigned char location,number); #endif
mian.c文件
#include <STC89C5xRC.H> #include "Delay.h" #include "Nixie.h" void main() { while(1) { Nixie(1,1); Nixie(2,2); Nixie(3,3); // P27=0; // Delay(500); // P27=1; // Delay(500); } }
本文作者:Jinx8823
本文链接:https://www.cnblogs.com/Jinx8823/p/17937140
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!