5-模块化编程

发布时间 2023-12-31 00:48:13作者: Jinx8823

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