单片机模块化编程(二)再探
又有几天没有跟大家见面啦,真真是有点极为想念呢。在上一帖中,我向大家简单的讲解了使用单片机模块化编程给我们带来的好处。而在现实工作场合,不论是“攻城狮”们还是“程序猿”们,也不论是软件设计还是硬件设计,模块化的概念也是大家经常或者说是必须使用的思维了。下面针对大家的51单片机课程的学习,详细给大家讲讲如何将模块化编程这一概念运用到单片机实战当中去。还是以大家非常之熟悉的流水灯为例进行讲解吧。(版主下文中开启严肃教学模式,上课大家不要讲话,上厕所和有问题的请先举手示意。)
(一)怎样使用模块化编程建立工程
下面以实现一个简单的LED流水灯作为实例进行详细讲解。我们都知道,要想实现简单的LED流水灯(这里使用延时函数,而不使用定时器中断法),我们必须要有以下函数:延时函数、LED初始化函数、和LED流水灯实现函数,这三大类函数。那么,我们怎样以模块的形式来使用这些函数呢。下文中作者采用了图文并茂的形式进行分析,这真真是极好的~
(二)LED流水灯例程
1、首先使用Keil uVision新建工程,这里我采用的是Keil uVision4
![](http://uphotos.eepw.com.cn/zhuzhaokun1987/pics/ca41e06b401c89b5e2520e7f8f3066d2.png)
![](http://uphotos.eepw.com.cn/zhuwei0710/pics/b151e84e595dd1b2d95180e261e41424.jpg)
2、保存创建的工程
![](http://uphotos.eepw.com.cn/zhuwei0710/pics/1c285c2292b3075129edfd8a2085f322.jpg)
3、选择所使用的芯片
![](http://uphotos.eepw.com.cn/zhuwei0710/pics/f1b66fff8337f6d7516c54daaed64656.jpg)
4、点击ok后,在弹出的对话框中选择“否”
![](http://uphotos.eepw.com.cn/zhuwei0710/pics/93b97fec4360e30b26dc780b73907958.jpg)
5、新建文件,用以编辑函数和头文件
![](http://uphotos.eepw.com.cn/zhuwei0710/pics/a138c64eeafaae121c5332751522deb8.jpg)
6、将新建的这些文件分别重命名并保存
![](http://uphotos.eepw.com.cn/zhuwei0710/pics/a9adbc066c40c77cb457bcbc81fb3fbf.jpg)
7、将xxx.C的文件添加到工作组中。
![](http://uphotos.eepw.com.cn/zhuwei0710/pics/0d03de7d91ed51ae5f100f337c7b7527.jpg)
8、当完成以上步奏之后,我们就可以进行具体的函数编写了。对于如何编写一个.C的C语言文件和一个.h的头文件,下面我来具体说明。首先以主函数main.c为例。如下图:
![](http://uphotos.eepw.com.cn/zhuwei0710/pics/60da34896561fa2a2192701e0621972e.jpg)
我们可以看到,这个流水灯的主函数main.c如果用模块化编程的方法来实现的话,干净整洁了很多。少了我们常见的相关的延时函数delay();以及对uint和uchar的宏定义。且在主函数中,直接使用了LED_init();和LED_display();这两个函数。而我们知道,要想在主函数中使用一个子函数,必须得在主函数的前面对这几个子函数进行声明,可是本段代码中并没有出现相关的语句。取而代之的是,在程序段第二行,多了一句#include “LED.h”,这一句话又有什么样的特殊功能呢?下面让我们来研究一下LED.c和LED.h的庐山真面目。
9、LED.c和LED.h的编写
![](http://uphotos.eepw.com.cn/zhuwei0710/pics/4a640edbf50a6690f07f42d469db6f57.jpg)
![](http://uphotos.eepw.com.cn/zhuwei0710/pics/9607a50b1d1b4210c87d56c8b44f2c88.jpg)
从LED.c这个C文件中,我们可以看出具体对LED_init();和LED_display();函数如何实现,在这个文件中有着具体的描述。那么问题来了~~LED.c和main.c之间是怎样产生联系的呢?换句话说,当我们在另外一个文件中需要调用其他文件当中的某个函数的时候,那么我们该如何做呢?要想搞清楚这个问题,是时候请出LED.h这位大神了。一般来讲xxx.h格式的文件为头文件,头文件提供了程序内函数被其他函数所调用的接口。我们也可以把他称为一份“接口描述文件”。
![](https://webstorage.eepw.com.cn/images/2014/m/wx.png)
加入微信
获取电子行业最新资讯
搜索微信公众号:EEPW
或用微信扫描左侧二维码