admin 管理员组

文章数量: 887021


2023年12月24日发(作者:github 网站)

单片机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文件)

下;在建其他.c文件(如delay.c、led.c),将它们保存在src文件夹下;最后建.h文件(如delay.h、led.h、common.h),将它们保存在inc文件夹下。

6.添加源文件(.c文件)到工程

具体方法如下图:

先建main.c文件,直接将其保存在工程文件夹(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文件了。

完成上述路径的添加,在编译源文件,就不会出现上面的错误了,这便是一个简单的模块化编程实例。实际中遇到这样一个程序并不需要模块化编程,因为它使编程的流程变得更加复杂了。但模块化编程确实有很大用处,当我们遇到的问题比较复杂时,要编写的程序的量也相对较大,这时模块化编程便是手中的一把利器,它会为你开辟一条宽敞而光明的大道。


本文标签: 编程 模块化 文件 函数 模块