使用C语言进行单片机程序设计时,其源文件是.C文件,而对应的头文件则是.H文件。.C和.H在程序中所起到的作用是不同的,从而导致两者的代码结构也不同。.C文件是源程序文件,是围绕系统功能要求所编写的代码文件,其存放的是实现模块功能的所有代码。在单片机开发过程中,.C的编写是主要工作。文件是头文件,其文件名一般与对应的.C文件的文件名相同。.H通常存放的是.C文件中所定义的变量、数组及函数的声明、数据类型的定义等内容。创建.H文件目的在于提高程序的可移植性和重用性,从而方便开发,能通过接口简单程序之间的链接。在单片机系统开发时,可以根据控制对象及关联设备来设计对应的.C和.H文件。比如,在数字温度计例子中,可以看到,其包括的外部设备有三个,分别是按键、数码管及DS18B20传感器,那么我们就可以建立三组.C和.H文件,分别与这三类外部设备相对应。因此,我们设计了KEY.C和KEY.H文件与按键设备对应,设计了SEG.C和SEG.H文件与数码管对应,设计了18B20.C和18B20.H文件与温度传感器对应。对于主控制器单片机而言,则需要设计主程序文件与其对应。
二、 模块化编程设计步骤
(1)、创建头文件
在模块化编程中,往往会有多个 C 文件,而且每个 C 文件的作用不尽相同。在我们的
C 文件中, 由于需要对外提供接口, 因此还必须有一些函数或者是变量提供给外部其它文件
进行调用。 对于每一个模块都有相应的.c 文件和.h 文件, 为了阅读调试方便, 原则上.c 文件
和.h 文件同名,如 delay.c 和 delay.h。
(2)防重复包含
例如 delay.h 文件
#ifndef__DELAY_H__
#define__DELAY_H__
void delay(uint t);
#endif
假如有两个不同源文件需要调用 delay( uint t)这个函数,他们分别都通过#include
“delay.h”把这个头文件包含了进去。 在第一个源文件进行编译时候, 由于没有定义过 delay.h_
因此#ifndef__DELAY_H__条件成立,于是定义_DELAY_H_ 并将下面的声明包含进去。在
第二个文件编译时候,由于第一个文件包含时候,已经将_DELAY_H_定义过了。因此
#ifndef__DELAY_H__不成立,整个头文件内容就没有被包含。假设没有这样的条件编译语
句,那么两个文件都包含了 delay(uint t); 就会引起重复包含的错误。所以在.h 文件中,
为了防止出现错误都进行防重复包含。