单片机程序模块化编程

更新时间:2023-06-10 15:01:01 阅读量: 实用文档 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

单片机程序模块化编程

程序模块化方法

模块化编程,必然会涉及到多文件编译,也就是工程编译。在这样的一个系统中,往往会有多个C文件,而且每个C文件的作用不尽相同。在我们的C 文件中,由于需要对外提供接口,因此必须有一些函数或者是变量提供给外部其它文件进行调用。

假设我们有一个delay.c文件,此为一个延迟函数

void delayms (unsigned char xms)

{

unsigned char i,j;

for(i=xms;i>0;i--)

for(j=110;j>0;j--);

}

而在我们的另外一个文件中需要调用此函数,那么我们该如何做呢?

头文件的作用正是在此。可以称其为一份接口描述文件。其文件内部不应该包含任何实质性的函数代码。我们可以把这个头文件理解成为一份说明书,说明的内容就是我们的模块对外提供的接口函数或者是接口变量。同时该文件也包含了一些很重要的宏定义以及一些结构体的信息,离开了这些信息,很可能就无法正常使用接口函数或者是接口变量。但是总的原则是:不该让外界知道的信息就不应该出现在头文件里,而外界调用模块内接口函数或者是接口变量所必须的信息就一定要出现在头文件里,否则,外界就无法正确的调用我们提供的接口功能。因而为了让外部函数或者文件调用我们提供的接口功能,就必须包含我们提供的这个接口描述文件----即头文件。同时,我们自身模块也需要包含这份模块头文件(因为其包含了模块源文件中所需要的宏定义或者是结构体),好比我们平常所用的文件都是一式三份一样,模块本身也需要包含这个头文件。

下面我们来定义这个头文件,一般来说,头文件的名字应该与源文件的名字保持一致,这样我们便可以清晰的知道哪个头文件是哪个源文件的描述。

于是便得到了delay.c的头文件delay.h 其内容如下。

#ifndef __DELAY_H__

#define __DELAY_H__

extern void delayms(unsigned char xms);

#endif

这与我们在源文件中定义函数时有点类似。不同的是,在其前面添加了extern 修饰符表明其是一个外部函数,可以被外部其它模块进行调用。

#ifndef __DELAY_H__

#define __DELAY_H__

……

#endif

这是头文件的编写格式,__DELAY_H__这个是头文件的名

单片机程序模块化编程

字,必须大写,中间的横线不能少。一般来说,头文件的名字应该与源文件的名字保持一致,这样我们便可以清晰的知道哪个头文件是哪个源文件的描述。

我们以让3个LED灯闪亮,芯片型号AT89C51为例介绍:1,打开keil软件中建立多个工程。(如图)

2.

单片机程序模块化编程

3.

4.

单片机程序模块化编程

5.

6.

单片机程序模块化编程

7.

8.

单片机程序模块化编程

9.

XX.c为源文件,XX.h为头文件10.单击左侧Target。

单片机程序模块化编程

下面就开始具体写程序。

单片机程序模块化编程

11.我们先来写一个LED1.h这个头文件。

我们要调用的就是LED.h这个头文件下的void display1();这个函数。

再写LED1.c这个源文件。LED1.c文件就是void display1()这个函数的功能描述。

这个程序中,我们调用了#include<reg51.h>,#include"led1.h" #include"delay.h"这三个头文件。注意:是自己编写的头文件要用引号。

12.再依次编写LED2.h,LED2.c,LED3.h,LED3.c,DELAY.c

单片机程序模块化编程

DELAY.h。

单片机程序模块化编程

单片机程序模块化编程

程序写完了,在编译之前

单片机程序模块化编程

单片机程序模块化编程

单片机程序模块化编程

单片机程序模块化编程

再次编译。

单片机程序模块化编程

如果你还嫌不够整洁,我们还可以把所有的源文件和头文件放在一个文件夹中。

单片机程序模块化编程

再次编译:

出现各种错误,原因是我们把delay和LED这两个函数放在了新的文件夹中,错误是正常的。下面就来改错:

单片机程序模块化编程

单片机程序模块化编程

单片机程序模块化编程

添加完后出现:

单片机程序模块化编程

本文来源:https://www.bwwdw.com/article/8b51.html

Top