- 1、本文档共4页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
模块化程序写法
模块化程序写法:
因为以后编写程序的复杂性,模块化程序编写势在必行,这里总结了网上有关模块化程序写法的相关经验。
在使用KEIL的时候,我们习惯上在一个 .c的文件中把自己要写的东西按照自己思路的顺序进行顺序书写,这样是很普遍的写法。当程序比较短的时候,比如几十行或者一百多行,是没有什么问题的。一个程序下来几百行是很正常的事情。当把自己写的程序交给别人来看的时候,别人往往会看得云里雾里现在来介绍一种在KEIL中C语言的模块写法。这样的写法其实也是很好用的,一些稍长的程序中经常见到。手头积累了一定量的模块,在完成一个新的系统时候,只需要根据上层功能需求,在底层模块的支持下,可以很快方便的完成。而不需要从头到尾再一砖一瓦的重新编写。藉此,也可以看出模块化编程的一个好处,就是可重复利用率高。
这样,我们先建立三个.c的文件,分别命名为main.c、delay.c和led_on.c,并在建立文件的时候尽量做到看到文件名即能看出程序的功能,这样的话比较直观,不容易混乱。然后将这三个文件都添加进工程。在delay.c中我们加入如下代码:
void delay () {unsigned int m,n; for(m=1000 ;m0; m--) for(n=20; n0; n--);
}
在led_on.c这个文件中我们加入如下代码:
void led_on(){
P0=0x00; delay1s(); P0=0xff; delay();
}
然后在main.c函数中我们添加如下代码:
void main() {
led_on();
}
这个程序的功能简单得很,就是实现LED的闪烁。下面问题来了,就是如何将这三个C文件关联起来。
其实在单个.文件的程序中,我们在写程序的时候第一件事就是写上#include reg52.h,这句话的作用是把头文件包含进来。你可以打开reg52.h ,看一下里面的内容,里面包含了关于51单片机的一些定义,如果在这个文件中有遗漏的东西,还可以使用命令sfr来在C文件中定义。如在STC89C52 中实用扩展RAM的时候会用到一个寄存器,你可以添加到这个文件中或者在C文件中用sfr定义。进一步想一下,一个包含命令可以把一个文件包含进来,那么用不同的头文件包含不就可以把更多的文件包含进来了吗?是不是有点思路了?
下面,我们讨论一下如何将三个c文件关联起来。
在单文档的程序中,我们使用#include这个命令将单片机的头文件与我们的程序关联起来。同理我们也将以头文件的形式把我们建立的源程序关联起来。
首先,我们需要一个新文档,这个文档的建立有两种方法(以delay函数为例)。第一种,在工程目录下建立一个delay.txt然后将其改名为dela.h。因为都是同编码的,所以不会出现乱码。然后在工程中将其打开。第二种方法是直接在工程中新建一个文档,然后保存的时候将名字保存为delay.h即可。如果是需要添加很多文件的话建议使用第一种方法,这是个人建议。
其次,我们需要编写delay.h这个文件的内容,其内容如下:
#ifndef _DELAY_H_
#define _DELAY_H_void delay ();//延时函数
#endif
这个是头文件的定义,作用是声明了delay ()函数,因为如果在别的函数中如果我们需要用到delay()函数的话,若不事先声明则在编译的时候会出错。对于#ifndef……#define……#endif;这个结构大概的意思就是说如果没有定义(宏定义)一个字符串,那么我们就定义它,然后执行后面的语句,如果定义过了那么就跳过不执行任何语句。
关于为什么要使用这么一个定义方法,比如在led_on()函数中我们调用了delay()函数,然后在main()函数中我们也调用了delay()函数,那么,在led_on()函数中我就要包含头文件delay.h,然后在main()函数中也要包含delay.h,若主函数中我们调用过led_on(),那么在编译的时候,遇到delay()和led_on()的时候就会对delay.h进行两次解释,那么就会出现错误。若有以上预处理命令的话,那么在第二次的时候这个_DELAY_H_已经被定义过了,那么就不会出现重复定义的问题。这就是它的作用。但是注意,在编译器进行编译的时候头文件不参与编译。
再次,我们建立一个led_on.h,起代码内容如下:
#ifndef _LED_ON_H_
#define _LED_ON_H_
void led_on(); //灯闪烁
#endif
作用同delay.h,不理解的话可以再看一下上面的解释。
最后,将我们上次说的三个函数补充完整。
在led_on()函数中,我们用到了51单片机的一些寄存器的定义,所
您可能关注的文档
- 田____字____格.doc
- 现代教育技术在小学科学教学中的探索.doc
- ]实际问题与一元一次不等式教学设计.doc
- 软件开发-项目详细设计规格说明书.doc
- 语文计划5.doc
- 2012汕头各区最后一题压轴模拟训练.doc
- 诚信的班会.ppt
- GRE阅读资料之文科.docx
- 2011年底最新个人年度总结.docx
- 高一复习学案-05-直线与圆.doc
- 新高考生物二轮复习讲练测第6讲 遗传的分子基础(检测) (原卷版).docx
- 新高考生物二轮复习讲练测第12讲 生物与环境(检测)(原卷版).docx
- 新高考生物二轮复习讲练测第3讲 酶和ATP(检测)(原卷版).docx
- 新高考生物二轮复习讲练测第9讲 神经调节与体液调节(检测)(原卷版).docx
- 新高考生物二轮复习讲练测第11讲 植物生命活动的调节(讲练)(原卷版).docx
- 新高考生物二轮复习讲练测第8讲 生物的变异、育种与进化(检测)(原卷版).docx
- 新高考生物二轮复习讲练测第5讲 细胞的分裂、分化、衰老和死亡(讲练)(原卷版).docx
- 新高考生物二轮复习讲练测第5讲 细胞的分裂、分化、衰老和死亡(检测)(原卷版).docx
- 新高考生物二轮复习讲练测第12讲 生物与环境(讲练)(原卷版).docx
- 新高考生物二轮复习讲练测第11讲 植物生命活动的调节(检测)(原卷版).docx
文档评论(0)