单片机程序模块化编程方法.docx
- 文档编号:10736727
- 上传时间:2023-02-22
- 格式:DOCX
- 页数:23
- 大小:751.59KB
单片机程序模块化编程方法.docx
《单片机程序模块化编程方法.docx》由会员分享,可在线阅读,更多相关《单片机程序模块化编程方法.docx(23页珍藏版)》请在冰豆网上搜索。
单片机程序模块化编程方法
程序模块化方法
模块化编程,必然会涉及到多文件编译,也就是工程编译。
在这样的一个系统中,往往会有多个C文件,而且每个C文件的作用不尽相同。
在我们的C文件中,由于需要对外提供接口,因此必须有一些函数或者是变量提供给外部其它文件进行调用。
假设我们有一个delay.c文件,此为一个延迟函数
voiddelayms(unsignedcharxms)
{
unsignedchari,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
而在我们的另外一个文件中需要调用此函数,那么我们该如何做呢?
头文件的作用正是在此。
可以称其为一份接口描述文件。
其文件内部不应该包含任何实质性的函数代码。
我们可以把这个头文件理解成为一份说明书,说明的内容就是我们的模块对外提供的接口函数或者是接口变量。
同时该文件也包含了一些很重要的宏定义以及一些结构体的信息,离开了这些信息,很可能就无法正常使用接口函数或者是接口变量。
但是总的原则是:
不该让外界知道的信息就不应该出现在头文件里,而外界调用模块内接口函数或者是接口变量所必须的信息就一定要出现在头文件里,否则,外界就无法正确的调用我们提供的接口功能。
因而为了让外部函数或者文件调用我们提供的接口功能,就必须包含我们提供的这个接口描述文件----即头文件。
同时,我们自身模块也需要包含这份模块头文件(因为其包含了模块源文件中所需要的宏定义或者是结构体),好比我们平常所用的文件都是一式三份一样,模块本身也需要包含这个头文件。
下面我们来定义这个头文件,一般来说,头文件的名字应该与源文件的名字保持一致,这样我们便可以清晰的知道哪个头文件是哪个源文件的描述。
于是便得到了delay.c的头文件delay.h其内容如下。
#ifndef__DELAY_H__
#define__DELAY_H__
externvoiddelayms(unsignedcharxms);
#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这个头文件下的voiddisplay1();这个函数。
再写LED1.c这个源文件。
LED1.c文件就是voiddisplay1()这个
函数的功能描述。
这个程序中,我们调用了#include
#include"delay.h"这三个头文件。
注意:
是自己编写的头文件要用引号。
12.再依次编写LED2.h,LED2.c,LED3.h,LED3.c,DELAY.c
DELAY.h。
程序写完了,在编译之前
再次编译。
如果你还嫌不够整洁,我们还可以把所有的源文件和头文件放在一个文件夹中。
再次编译:
出现各种错误,原因是我们把delay和LED这两个函数放在了新的文件夹中,错误是正常的。
下面就来改错:
添加完后出现:
再次编译就成了:
编译之后:
如果不按上面的操作,结果将是这个样子
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 程序 模块化 编程 方法
![提示](https://static.bdocx.com/images/bang_tan.gif)