【51单片机】4-模块化编程

一、简述模块化编程的必要性

       大多数的编程学习者一开始接触和学习到的程序很小,代码量很少,甚至只有几十行。对于这样短小的程序进行模块化设计不是完全必要的。但是随着学习的深入,代码量的增加,将所有的代码都放在同一个.C文件中的做法越发使得程序结构混乱,虽然可以运行,但是可读性、可移植性变差。即使是自己写的程序,时间长以后对程序的阅读和修改也要花一些时间。模块化编程使得程序的组织结构更加富有层次感,立体感和降低程序的耦合度。

       在大规模程序开发中,一个程序由很多个模块组成,很可能,这些模块的编写任务被分配到不同的人。几乎所有商用程序都必须使用模块化程序设计理念。在程序的设计过程中各个开发者分工合作,分别完成某一模块特定的功能,减少开发时间等。

       传统方式编程:所有的函数均放在main.c里,若使用的模块比较多,则一个文件内会有很多的代码,不利于代码的组织和管理,而且很影响编程者的思路。

       模块化编程:把各个模块的代码放在不同的.c文件里,在.h文件里提供外部可调用函数的声明,其它.c文件想使用其中的代码时,只需要#include "XXX.h"文件即可。使用模块化编程可极大的提高代码的可阅读性、可维护性、可移植性等。如下图所示模块化编程案例

二、模块化实现步骤

      以LED流水灯功能为例设计模块化编程,首先看到原始的工程文件,下图所示。

       接下来使用上面这个程序设计模块化编程。

       1、创建项目文件夹

       新建一个项目文件夹,命名为“项目2-模块化编程”。在该文件夹中在新建四个文件夹,分别命名为“Project”、“Output”、“Listing”、“Source”,下图所示。

       打开keil 软件,新建工程命名为“模块化编程”,保存到“Project”文件夹中,下图所示。

       2、新建.c和.h文件

       点击新建文件按钮分别新建三个文件“main.c”、“delay.c”、“delay.h”,保存到“Source”文件夹中,点开该文件夹可以看到三个文件,下图所示。

       对于每一个模块都有相应的.c文件和.h文件,为了阅读调试方便,原则上.c文件和.h文件同名,如delay.c和delay.h。

       3、添加“main.c”和“delay.c”文件

       把“main.c”和“delay.c”添加到“Source Group 1”中,添加之后的效果,下图所示。

       4、建立“main.c”文件模板

       编写运行程序的模板,点击“Translate”按钮或者“Ctrl+F7”,把<reg51.h>头文件包含进“main.c”中,下图所示。

       5、打开“reg51.h”文件制作“delay.h”文件

       该步骤主要查看“reg51.h”头文件的格式,打开之后可以看到两个红框代码,分别在头文件开头和结尾,把这三行代码复制并粘贴到“delay.h”中,并把“#ifndef __REG51_H__”改成“#ifndef __DELAY_H__”,“#define __REG51_H__”改成“#define __DELAY_H__”,下图所示。

       注意:其他代码不要修改

       6、完善“delay.c”和“delay.h”代码

       “delay.c”文件:用来函数定义

       “delay.h”文件:用来函数声明

       把原来的延时函数定义部分放在“delay.c”文件中,函数声明部分放在“delay.h”文件中,并在“delay.c”文件中引用“delay.h”头文件,选中“delay.c”文件,点击“Translate”按钮或者“Ctrl+F7”,可以看到延时函数的头文件在“delay.c”文件中包含,后下图所示。

       假如有两个不同源文件需要调用DelayMs(unsigned int ms) 这个函数,他们分别都通过#include “delay.h”把这个头文件包含了进去。在第一个源文件进行编译时候,由于没有定义过delay.h,因此#ifndef__DELAY_H__条件成立,于是定义_DELAY_H_ 并将下面的声明包含进去。在第二个文件编译时候,由于第一个文件包含时候,已经将_DELAY_H_定义过了。因此#ifndef__DELAY_H__不成立,整个头文件内容就没有被包含。假设没有这样的条件编译语句,那么两个文件都包含了DelayMs(unsigned int ms); 就会引起重复包含的错误。所以在.h文件中,为了防止出现错误都进行防重复包含。

       7、完善“main.c”文件

       结合之前流水灯程序,把需要的文件复制粘贴到该文件中,点击“Translate”按钮或者“Ctrl+F7”,可以看到下图所示。

       8、设置“Output”和“Listing”文件夹路径

       设置完毕后把下图红框选中,并点击“OK”按钮,可以“Rebuild”整个项目,下图所示。

       模块化编程在后面案例中都会使用,可以提高代码可读性、可维护性、复用性、开发高效。

模块化编程

  • 20
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值