打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
单片机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 unsignedchar 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 voidled_flash();//在头文件中声明函数需冠以extern关键字

#endif

通俗的讲,一个模块化程序里面包含硬件驱动模块和软件功能模块。比如上面的例子里面led.c文件是用来驱动(可以理解为点亮)LED灯的。像这样的模块属于硬件驱动模块。而main.c是用来调用各个子函数的;delay.c是用来延时的。这些模块没有与之对应的硬件模块,只是起特定的功能,因此它们属于软件功能模块。

当上面所有的工作都做好了之后,我们开始编译,但发现了许多错误,如下图:

图11

出现这些错误的原因是我们没有完成源文件路径的添加,具体添加方法如下:

图12
图13
图14
图15

完成上述路径的添加,在编译源文件,就不会出现上面的错误了,接着便可生成.HEX文件了。

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

 

 

 

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
模块化编程
单片机的模块化编程
详论单片机固件模块化架构设计(精华)
读书日志:代码大全之第六章
推荐一篇软件编程极佳的文章,值得读一读
资深单片机工程师讲单片机的模块化编程
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服