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);
}
}