模块化
传统方式编程:所有的函数均放在 main.c
里,若使用的模块比较多,则一个文件内会有很多的代码,不利于代码的组织和管理,而且很影响编程者的思路。
模块化编程:把各个模块的代码放在不同的 .c
文件里,在.h
文件里提供外部可调用函数的声明,其它 .c
文件想使用其中的代码时,只需要 #include "XXX.h"
文件即可。使用模块化编程可极大的提高代码的可阅读性、可维护性、可移植性等。
模块化编程框图
模块化编程注意事项
- .c文件:函数、变量的定义
- .h文件:可被外部调用的函数、变量的声明
- 任何自定义的变量、函数在调用前必须有定义或声明(同一个.c)
- 使用到的自定义函数的.c文件必须添加到工程参与编译
- 使用到的.h文件必须要放在编译器可寻找到的地方(工程文件夹根目录、安装目录、自定义)
C预编译
C语言的预编译以#开头,作用是在真正的编译开始之前,对代码做一些处理(预编译)。
此外还有 #ifdef、#if、#else、#elif、#undef
等。
将Delay方法模块化
Delay.h
#ifndef __DELAY_H__
#define __DELAY_H__
void Delay(int num);
#endif
Delay.c
void Delay(int num) //@12.000MHz
{
int x;
for (x = 0; x < num; x++)
{
unsigned char i, j;
i = 2;
j = 239;
do
{
while (--j);
} while (--i);
}
}
将数码管显示模块化
Nixie.h
#ifndef __NIXIE_H__
#define __NIXIE_H__
void Nixie(char location, num);
#endif
Nixie.c
#include <REGX52.H>
#include "Delay.h"
char NumArray[] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
void Nixie(char location, num)
{
switch (location)
{
case 1:
P2_4 = 1;P2_3 = 1;P2_2 = 1;
break;
case 2:
P2_4 = 1;P2_3 = 1;P2_2 = 0;
break;
case 3:
P2_4 = 1;P2_3 = 0;P2_2 = 1;
break;
case 4:
P2_4 = 1;P2_3 = 0;P2_2 = 0;
break;
case 5:
P2_4 = 0;P2_3 = 1;P2_2 = 1;
break;
case 6:
P2_4 = 0;P2_3 = 1;P2_2 = 0;
break;
case 7:
P2_4 = 0;P2_3 = 0;P2_2 = 1;
break;
case 8:
P2_4 = 0;P2_3 = 0;P2_2 = 0;
break;
}
P0 = NumArray[num];
// 消除阴影
Delay(1);
P0 = 0x00;
}
main 主程序
#include <REGX52.H>
#include "Delay.h"
#include "Nixie.h"
void main()
{
int index = 0;
while(1)
{
Nixie(1, 1);
Nixie(2, 2);
Nixie(3, 3);
}
}