您的位置 首页 主动

KEIL 同一工程中的多文件处理

首先,我们需要一个新文档,这个文档的建立有两种方法(以delay1s函数为例)。第一种,在工程目录下建立一个delay1stxt然后将其改名为dela

首要,咱们需求一个新文档,这个文档的树立有两种办法(以delay1s函数为例)。榜首种,在工程目录下树立一个delay1s.txt然后将其改名为delay1s.h。由于都是同编码的所以不会呈现乱码,然后在工程中将其翻开。第二种办法是直接在工程中新建一个文档,然后保存的时分将姓名保存为delay1s.h即可。假如是需求添加许多文件的话主张运用榜首种办法,这是个人主张。其次,咱们需求编写delay1s.h这个文件的内容,其内容如下:

#ifndef _DELAY1S_H_
#define _DELAY1S_H_
void delay1s();//延时函数
#endif
这个是头文件的界说,作用是声明晰delay1s()函数,由于假如在其他函数中假如咱们需求用到delay1s()函数的话,若不事前声明则在编译的时分会犯错。关于#ifndef……#define……#endif;这个结构大约的意思便是说假如没有界说(宏界说)一个字符串,那么咱们就界说它,然后履行后边的句子,假如界说过了那么就越过不履行任何句子。
关于为什么要运用这么一个界说办法,比方在led_on()函数中咱们调用了delay1s()函数,然后在main()函数中咱们也调用了delay()函数,那么,在led_on()函数中我就就要包括头文件delay1s.h,然后在main()函数中也要包括delay1s.h,若主函数中咱们调用过led_on(),那么在编译的时分,遇到delay1s()和led_on()的时分就会对delay1s.h进行两次解说,那么就会呈现过错。若有以上预处理指令的话,那么在第2次的时分这个_DELAY1S_H_现已被界说过了,那么就不会呈现重复界说的问题。这便是它的作用。可是留意,在编译器进行编译的时分头文件不参加编译。
再次,咱们树立一个led_on.h,起代码内容如下:
#ifndef _LED_ON_H_
#define _LED_ON_H_
void led_on(void);//灯闪耀
#endif
作用同delay1s.h,不理解的话能够再看一下上面的解说。
最终,将咱们上面说的三个函数弥补完好。
在led_on()函数中,咱们用到了51单片机的一些寄存器的界说,所以咱们要包括reg52.h,并且咱们用到了delay1s()函数,所以咱们要包括delay1s.h,故led_on.c文件代码如下:
#include
#include “delay1s.h” //留意这儿没有分号
void led_on(void)
{
P0=0x00;
delay1s();
P0=0xff;
delay1s();
}
Main函数的代码方式如下:
#include
#include “delay1s.h”

#include “led_on.h”
void main()
{
led_on();
delay1s();
led_on();

}
在这个函数中,为了再次阐明一下#ifndef……#define……#endif这个结构的界说,咱们能够把一切的.h文件中的这个结构去掉,然后编译一下看一下作用。
到这儿信任咱们关于这种模块化的写法就有大约的了解了,假如咱们想添加新功用的时分,比方咱们要添加一个流水灯的功用,那么,咱们只需求添加一个led_circle.c和led_circle.h,然后依照上述过程添加进工程即可,程序的其他部分不需求任何改动。明显这是很便利的。其实函数的声明能够运用extern关键字,C语言中默许都是这个类型的,所以能够不必写。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/ziliao/zhudong/259707.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部