单片机C语言学习之模块化编程完结篇

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

单片机C语言学习之模块化编程完结篇
单片机C语言学习之模块化编程
单片机模块化编程是针对编写容量较大的程序的一种编程方法,这种编程会更好的管理自己所建的工程文件。

下面是模块化编程的一般步骤:
1.新建工程文件夹(如:C:\模块化编程),具体步骤略。

另外在此文件夹下新建四个文件,分别命名为output、src、inc和listing。

2.新建工程(直接命名为模块化编程并保存在工程文件夹下),具体步骤略。

3.设置Target
Options对话框
在Target窗口下做出如下图1、图2修改与设置。

图1
图2
之后还将做出如下步骤(图3、图4):
图3
图4
4.设置Components对话框
将图6的两个红色箭头处改为图7那样(也可根据个人的情况来命名),如果想新建或删除已有的文件,可以点击1,2位置来进行新建或删除。

图5
之后弹出图6所示的界面。

图6
5.新建源文件(.c文件和.h文件)
先建main.c文件,直接将其保存在工程文件夹(C:\模块化编程)下;在建其他.c文件(如delay.c、led.c),将它们保存在src文件夹下;最后建.h文件(如delay.h、led.h、common.h),将它们保存在inc文件夹下。

6.添加源文件(.c文件)到工程
具体方法如下图:
图8
图9
添加成功后可以看到左栏如下图所示:
图10
图10
那么接下来应该怎样在里面编写源程序就是非常关键的问题了。

.c 文件一般是用来放函数和定义的变量的,如主函数放在main.c中,延时函数放在delay.c中,.h文件是对各个模块的声明,也就是对相应的函数进行封装,在封装的过程中不能包含任何实质性的函数代码。

如用模块化编程来编写一个简单的单向流水灯程序,需要新建main.c、delay.c和led.c三个源文件以及common.h、delay.h和led.h三个.h
文件。

具体代码如下:
//main.c文件
#include
#include"led.h"
//包含该头文件,是因为主函数调用了流水灯函数void main()
{
led_flash();
//调用流水灯函数
}
//delay.c文件
#include"delay.h"
void delay(uintz)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
//led.c文件
#include"led.h"
uchar temp;//定义一个字符型的变量
void led_flash()
{
temp=0xfe;
P1=temp;
while(1)
{
temp=_crol_(temp,1);//循环左移
delay(1000);//延时约1000ms
P1=temp;
}
}
//common.h文件
#ifndef_COMMON_H_
#define_COMMON_H_
typedef unsigned int uint;
//宏定义
typedef unsigned char uchar;
//宏定义
#endif
//delay.h文件
#ifndef_DELAY_H_
#define_DELAY_H_
#include"common.h"
//由于delay.c文件中用到了宏定义uint,所以在这里要包含
common.h
extern void delay(uint z);
#endif
//led.h文件
#ifndef _LED_H_
#define _LED_H_
#include"delay.h"
//包含delay.h是由于led.c文件调用了delay()函数
#include
//在这里包含51头文件是因为led.c中用到了P1口
#include
//包含循环移位的头文件
extern void led_flash();//在头文件中声明函数需冠以extern关键字
#endif
通俗的讲,一个模块化程序里面包含硬件驱动模块和软件功能模块。

比如上面的例子里面led.c文件是用来驱动(可以理解为点亮)LED灯的。

像这样的模块属于硬件驱动模块。

而main.c是用来调用各个子函数的;delay.c是用来延时的。

这些模块没有与之对应的硬件模块,只是起特定的功能,因此它们属于软件功能模块。

当上面所有的工作都做好了之后,我们开始编译,但发现了许多错误,如下图:
图11
出现这些错误的原因是我们没有完成源文件路径的添加,具体添加方法如下:
图12
图13
图14
图15
完成上述路径的添加,在编译源文件,就不会出现上面的错误了,接着便可生成.HEX文件了。

这便是一个简单的模块化编程实例。

实际中遇到这样一个程序并不需要模块化编程,因为它使编程的流程变得更加复杂了。

但模块化编程确实有很大用处,当我们遇到的问题比较复杂时,要编写的程序的量也相对较大,这时模块化编程便是手中的一把利器,它会为你开辟一条宽敞而光明的大道。

相关文档
最新文档