单片机编程头文件相关问题

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1. Reg51.h是头文件,是对单片机的特殊寄存器的定义。#include

#include “REG51.h”有区别。使用< > 包含头文件时,编译线进入到软件安装文件夹处开始搜索这个头文件,使用“”包含头文件时,编译先进入当前工程所在文件夹处开始搜索头文件。

#ifndef _REG51_H

#define _REG51_H

2.#ifndef 标示1 //判断“标示1”是否定义,如果被定义了则返回假,如果没有被定义则返回真。

/*********************************/

语句1 #ifndef 标示1

语句2 #define 标示1

语句3 #endif

语句4 ……

语句5 ……

这段代码意思是:如果标示1没有被定义,则重定义标示1,即执行语句2、语句3、语句4、语句5……

备注:#ifndef和#endif要一起用,如果丢失#endif,可能会报错。

千万不要忽略了头文件中的#ifndef,这是一个很关键的东西。比如你有两个C文件,这两个C文件都include了同一个头文件。而编译时,这两个C文件要一同编译成一个可运行文件,于是问题来了,大量的声明冲突。

还是把头文件的内容都放在#ifndef 和#endif中吧。不管你的头文件会不会多个文件引用,你都要加上这个,一般格式是这样的:

#ifndef<标识>

#define<标识>

…………

…………

#endif

<标识>在理论上那个来说可以使自由命名的,但每个头文件的这个“标识”都应该是唯一的。标识的命名规则一般是头文件名的全大写,前后加下划线,并把头文件中的“.”页变成下划线,如stidio.h #ifndef _STDIO_H_

#define _STDIO_H_

……

#endif

3.一个C文件功能模块,它的函数等希望可以直接被其它函数所引用可以通过制作头文件的方法(步骤):

(1)具有一个单独调试可用的1602driver.c文件

(2)复制1602dirver.c文件并另存为1602driver.h文件,把复制的1602driver.c删掉

(3)在1602driver.h文件中开头两行:

第一行:#ifndef _1602DRIVER_H_

第二行:#define _1602DRIVER_H_

extern void fun_wait_bf(void); ///读,等待,busy标志位,busy=0 方可进行操作extern void fun_write_e(void); //制造一个E 的上升沿,能够为写数据服务extern void fun_write_instruction(unsigned char instruction_data);

extern void fun_write_data(unsigned char data_data);

……………………//各种在其他函数中要调用的函数名都声明进去,只有1602driver.c中……………………//才用的如:等待标志位等,可以不用声明出来。

#endif //结束

(4)原来调试可用的1602driver.c文件中,把

void main( )

{

} //内容全部屏蔽了

(5)接着,打算要在TA8435.c中使用该1602driver.c中的文件的做法:

Add fires to group (把1602driver.c加入进来)

在TA8435.C 的头部加入:#include "1602driver.h"

把1602driver.c 和1602driver.h 都复制在TA8435的工程文件夹下。

extern用于变量声明时,告诉编译器,“这个变量可能定义在这个模块或其他模块中”,一个extern声明并没有生成数据,它仅表明这个数据时共享的。

这个变量必须是在别处定义过的,而且它只能定义一次。

①extern int a表示a是在其它文件中定义的一个变量,需要在这里引用。a已在别的文件中定义,所以不需要再分配空间了

②extern int a定义的a表示该变量在使用前已经定义了,一般有两种情况,一是该变量是在其他的文件中定义的全局变量,简称外部变量。二是表示变量在本文件中定义的全局变量,但是在使用之后(因为作用域)定义的。

③extern int a是对变量的声明,而不是定义,该变量是其他文件中定义的,或是本文件中在该声明之后定义的全局变量。

定义只能有一处,但声明可有多处,这些声明所指,都是定义时分配的内存空间static和extern都被称为"global"变量(或者函数)。但是他们的生存周期和可见性是不同。static是文件级,只有程序文件之间显式的包含才可以引用(主要就是使用#include),但是extern是程序级的,你不必显式的引用文件的,但需要使用extern存储空间修饰符。

一个大的系统程序中,全局变量最好在头文件中用extern xxxxxx声明一下。

======================================================================= int func(int a, int b); 一般为函数的声明

int func(int a, int b) 一般为函数的定义

{

/*函数体*/

}

局部变量,如果不认为初始,他的取值是随机的,是所分配的那块内存中数据

================================================

用关键字extern来引用声明其他文件定义的外部连接性变量,以便在多文件程序的不同部之间共享数据用法如下:

相关文档
最新文档