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
posted @ 2025-01-08 15:52  Mirco1218  阅读(121)  评论(0)    收藏  举报