background image


//定义函数
//这是本模块第一个函数,起到延时作用,只供本模块的函数调用,所以用到 static 关键字修

static void delay (uint us) //delay time
{}
//这是本模块的第二个函数,要在其他模块中调用

void wr_lcd (uchar dat_comm,uchar content)
{}
……
……

注:此处只写出这两个函数,第一个延时函数的作用范围是模块内,第二个,它是其它模块
需要的。为了简化,此处并没有写出函数体.

.h 文 件 中 给 出 模 块 的 接 口 . 在 上 面 的 例 子 中 , 向 LCD 写 入 字 符 函 数 : wr_lcd (uchar 
dat_comm,uchar content)就是一个接口函数,因为其它模块会调用它,那么.h 文件中就必须将
这个函数声明为外部函数(使用 extrun 关键字修饰),另一个延时函数:void delay (uint 
us)只是在本模块中使用(本地函数,用 static 关键字修饰),因此它是不需要放到.h 文件
中的。
.h 文件格式如下:

//声明全局变量
extern unsigned char value;
//声明接口函数
extern void wr_lcd (uchar dat_comm,uchar content); //向 LCD 写入字符
……

这里注意三点:
1. 在 keil 编译器中,extern 这个关键字即使不声明,编译器也不会报错,且程序运行良好,但
不保证使用其它编译器也如此。强烈建议加上,养成良好的编程规范。
2. .c 文件中的函数只有其它模块使用时才会出现在.h 文件中,像本地延时函数 static void 
delay (uint us)即使出现在.h 文件中也是在做无用功,因为其它模块根本不去调用它,实际上
也调用不了它(static 关键字的限制作用)。
3.

注意本句最后一定要加分号 ;”,相信有不少同学遇到过这个奇怪的编译器报错: error 

C132: 'xxxx': not in formal parameter list,这个错误其实是.h 的函数声明的最后少了分号的
缘故。

模块的应用:假如需要在 LCD 菜单模块 lcd_menu.c 中使用液晶驱动模块 lcd_device.c 中的
函数 void wr_lcd (uchar dat_comm,uchar content),只需在 LCD 菜单模块的 lcd_menu.c 文件中
加入液晶驱动模块的头文件 lcd_device.h 即可.