C51--05---模块化编程(分类管理思想)
一、模块化编程
1、模块化编程的指导思想----分类管理的思想:
把不同功能的实现代码放在不同的模块里,方便代码的组织和管理;能够极大提高代码的可阅读性、可维护性、可移植性。 之前案例中的延时函数、数码管显示模块都可以看做驱动代码。
2、模块化编程的实现
把不同模块的实现代码 放在 ".c" 文件中,在 ".h" 文件中提供接口(可调用函数的外部声明),
其他 ".c"文件想要调用该模块的代码时,只需要在头部声明 ' include "xxx.h " '即可。
3、模块化编程的注意事项
.c: 函数 变量的定义
.h: 函数 变量的声明(可被外部调用的)(接口)
- 自定义的变量必须提前定义,自定义的函数必须提前声明
- 任何被使用(调用)到的.c文件必须参加工程的编译
- .h文件要放在编译器能够找到的文件目录之下,一般都是放在工程中与.c平级的目录中 为了方便管理
二、模块化实现的前预知识----C预编译
在真正的编译开始之前,对代码进行预处理 ,通常以#开头
#ifndef #define #endif 实现代码的可选化精简 在进行定义之前可以先进行判断 比如烧录模式 USB SD的选择 可以使用预编译 实现对代码的解锁
目的:只编译一次 防止重复包含
比如在.h文件中 加上#ifndef #define判断 这样只有第一次才会进行定义

三、实操案例
将 数码管显示功能代码 进行模块化
注:#include <xxx> 在安装目录里面寻找文件
#include "xxx" 在工程目录中寻找文件

(1) main.c
点击查看代码
#include <REGX52.H>
#include "NixieDisplay.h"
void main()
{
while(1)
{
NixieDisplay(1,1);
NixieDisplay(2,9);
NixieDisplay(3,5);
}
}
(2) NixieDisplay.c
点击查看代码
#include <REGX52.H>
#include "Delay.h"
unsigned char NixieNumber[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71,0x00};
void NixieDisplay(unsigned int loc,num)
{
switch(loc)
{
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=NixieNumber[num];
Delay(1);
P0=0x00;
}
(3) NixieDisplay.h
点击查看代码
#ifndef _NIXIEDISPLAY_H_
#define _NIXIEDISPLAY_H_
void NixieDisplay(unsigned int loc,num);
#endif
(4) Delay.c
点击查看代码
void Delay(unsigned int xms)
{
unsigned char i, j;
while(xms--)
{
i = 12;
j = 169;
do
{
while (--j);
} while (--i);
}
}
(5) Delay.h
点击查看代码
#ifndef _DELAY_H
#define _DELAY_H_
void Delay(unsigned int xms);
#endif
浙公网安备 33010602011771号