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

来源:本站
导读:目前正在解读《KEIL 同一工程中的多文件处理》的相关信息,《KEIL 同一工程中的多文件处理》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《KEIL 同一工程中的多文件处理》的详细说明。
简介:本文详细介绍了在KEIL同一工程中进行多文件处理的方法。

首先,我们需要一个新文档,这个文档的建立有两种方法(以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进行两次解释,那么就会出现错误。若有以上预处理命令的话,那么在第二次的时候这个_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 <reg52.h>

#include “delay1s.h” //注意这里没有分号

void led_on(void)

{

P0=0x00;

delay1s();

P0=0xff;

delay1s();

}

Main函数的代码形式如下:

#include <reg52.h>

#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语言中默认都是这个类型的,所以可以不用写。

提醒:《KEIL 同一工程中的多文件处理》最后刷新时间 2024-03-14 01:03:00,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《KEIL 同一工程中的多文件处理》该内容的真实性请自行鉴别。