其实,头文件的功能就是申明资源,特别是多个C文件的时候,简单地说,就像是库文件。

例如:reg51.h头文件,就是单纯的申明资源,系统的其它头文件,还有申明函数的。

如果自己编写头文件,就可以包含这两个方面的内容了,例如:

发下是1602器件的头文件

#ifndef __LCD_H_

#define __LCD_H_

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

当使用的是4位数据传输的时候定义,

使用8位取消这个定义

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

#define LCD1602_4PINS

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

包含头文件

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

#include

//---重定义关键词---//

#ifndef uchar

#define uchar unsigned char

#endif

#ifndef uint

#define uint unsigned int

#endif

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

PIN口定义

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

#define LCD1602_DATAPINS P0

sbit LCD1602_E=P2^7;

sbit LCD1602_RW=P2^5;

sbit LCD1602_RS=P2^6;

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

函数声明

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

/*在51单片机12MHZ时钟下的延时函数*/

void Lcd1602_Delay1ms(uint c);   //误差 0us

/*LCD1602写入8位命令子函数*/

void LcdWriteCom(uchar com);

/*LCD1602写入8位数据子函数*/

void LcdWriteData(uchar dat)        ;

/*LCD1602初始化子程序*/

void LcdInit();

#endif

它必须配合1602的C文件同时使用

#include"lcd.h"

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

* 函 数 名         : Lcd1602_Delay1ms

* 函数功能                   : 延时函数,延时1ms

* 输    入         : c

* 输    出         : 无

* 说    名         : 该函数是在12MHZ晶振下,12分频单片机的延时。

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

void Lcd1602_Delay1ms(uint c)   //误差 0us

{

uchar a,b;

for (; c>0; c--)

{

for (b=199;b>0;b--)

{

for(a=1;a>0;a--);

}

}

}

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

* 函 数 名         : LcdWriteCom

* 函数功能                   : 向LCD写入一个字节的命令

* 输    入         : com

* 输    出         : 无

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

#ifndef         LCD1602_4PINS         //当没有定义这个LCD1602_4PINS时

void LcdWriteCom(uchar com)          //写入命令

{

LCD1602_E = 0;     //使能

LCD1602_RS = 0;           //选择发送命令

LCD1602_RW = 0;           //选择写入

LCD1602_DATAPINS = com;     //放入命令

Lcd1602_Delay1ms(1);                //等待数据稳定

LCD1602_E = 1;                  //写入时序

Lcd1602_Delay1ms(5);          //保持时间

LCD1602_E = 0;

}

#else

void LcdWriteCom(uchar com)          //写入命令

{

LCD1602_E = 0;         //使能清零

LCD1602_RS = 0;         //选择写入命令

LCD1602_RW = 0;         //选择写入

LCD1602_DATAPINS = com;        //由于4位的接线是接到P0口的高四位,所以传送高四位不用改

Lcd1602_Delay1ms(1);

LCD1602_E = 1;         //写入时序

Lcd1602_Delay1ms(5);

LCD1602_E = 0;

//        Lcd1602_Delay1ms(1);

LCD1602_DATAPINS = com << 4; //发送低四位

Lcd1602_Delay1ms(1);

LCD1602_E = 1;         //写入时序

Lcd1602_Delay1ms(5);

LCD1602_E = 0;

}

#endif

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

* 函 数 名         : LcdWriteData

* 函数功能                   : 向LCD写入一个字节的数据

* 输    入         : dat

* 输    出         : 无

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

#ifndef         LCD1602_4PINS

void LcdWriteData(uchar dat)                        //写入数据

{

LCD1602_E = 0;        //使能清零

LCD1602_RS = 1;        //选择输入数据

LCD1602_RW = 0;        //选择写入

LCD1602_DATAPINS = dat; //写入数据

Lcd1602_Delay1ms(1);

LCD1602_E = 1;   //写入时序

Lcd1602_Delay1ms(5);   //保持时间

LCD1602_E = 0;

}

#else

void LcdWriteData(uchar dat)                        //写入数据

{

LCD1602_E = 0;          //使能清零

LCD1602_RS = 1;          //选择写入数据

LCD1602_RW = 0;          //选择写入

LCD1602_DATAPINS = dat;        //由于4位的接线是接到P0口的高四位,所以传送高四位不用改

Lcd1602_Delay1ms(1);

LCD1602_E = 1;          //写入时序

Lcd1602_Delay1ms(5);

LCD1602_E = 0;

LCD1602_DATAPINS = dat << 4; //写入低四位

Lcd1602_Delay1ms(1);

LCD1602_E = 1;          //写入时序

Lcd1602_Delay1ms(5);

LCD1602_E = 0;

}

#endif

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

* 函 数 名       : LcdInit()

* 函数功能                 : 初始化LCD屏

* 输    入       : 无

* 输    出       : 无

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

#ifndef                LCD1602_4PINS

void LcdInit()                                                  //LCD初始化子程序

{

LcdWriteCom(0x38);  //开显示

LcdWriteCom(0x0c);  //开显示不显示光标

LcdWriteCom(0x06);  //写一个指针加1

LcdWriteCom(0x01);  //清屏

LcdWriteCom(0x80);  //设置数据指针起点

}

#else

void LcdInit()                                                  //LCD初始化子程序

{

LcdWriteCom(0x32);         //将8位总线转为4位总线

LcdWriteCom(0x28);         //在四位线下的初始化

LcdWriteCom(0x0c);  //开显示不显示光标

LcdWriteCom(0x06);  //写一个指针加1

LcdWriteCom(0x01);  //清屏

LcdWriteCom(0x80);  //设置数据指针起点

}

#endif

观察注意到:C文件中的资源、函数,都是通过头文件申明的,这样才能在主C文件中,调用到1602的C文件中的函数

你看主程序是这样的:

#include

#include"lcd.h"

unsigned char PuZh[]=" Pechin Science ";

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

* 函 数 名         : main

* 函数功能                   : 主函数

* 输    入         : 无

* 输    出         : 无

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

void main(void)

{

unsigned char i;

LcdInit();

for(i=0;i<16;i++)

{

LcdWriteData(PuZh[i]);

}

while(1)

{

}

}

知道了自编头文件的作用,就可以按照上述格式,编写自己的其它器件的C文件和头文件了。

c语言.h文件怎么写,关于C语言中.h文件怎么书写?相关推荐

  1. C语言中.c文件与.h文件 的使用-2020-12-27

    C语言中.c文件与.h文件 的使用 转自(https://blog.csdn.net/qq_35327108/article/details/83656409?utm_medium=distribut ...

  2. c语言中.h文件和.cpp文件解析

    理论上来说cpp文件与头文件里的内容,只要是C语言所支持的,无论写什么都可以的,比如你在头文件中写函数体实现,任何一个cpp文件包含此头文件就可以将这个函数编译成目标文件的一部分(编译是以cpp文件为 ...

  3. 简述C语言中.h文件和.c文件作用和区别

    简述C语言中.h文件和.c文件作用和区别 在c语言学习过程中,对.h文件和.c文件不甚了解,参考其他资料后对它进行简要分析: .h文件和.c文件作用 使用.h文件和.c文件的原因 .h文件和.c文件作 ...

  4. C语言中.c文件与.h文件 的使用

    C语言中.c文件与.h文件 的使用 我们都知道一个C程序的入口是main()函数,当我们遇到一个比较大的程序,需要被每个功能模块区分开始,就需要使用不同的.c和.h文件.这样方便自己管理和使用c程序, ...

  5. c语言stdlib h常用函数,c语言中,头文件stdlib.h主要包含什么函数?

    stdlib.h里面定义了五种类型.一些宏和通用工具函数. 类型例如size_t.wchar_t.div_t.ldiv_t和lldiv_t: 宏例如EXIT_FAILURE.EXIT_SUCCESS. ...

  6. C语言中.h文件和.c文件如何理解?看完详细解析,小白也能懂!

    简单的说其实要理解C文件与头文件(即.h)有什么不同之处,首先需要弄明白编译器的工作过程,一般说来编译器会做以下几个过程:        1.预处理阶段 2.词法与语法分析阶段        3.编译 ...

  7. C/C++ 语言中.h文件和.c文件详细解析 引用 .c和.h文件的区别

    参考:http://blog.csdn.net/wuan584974722/article/details/30362405 简单的说其实要理解C文件与头文件(即.h)有什么不同之处,首先需要弄明白编 ...

  8. C语言中 .h文件和.c文件的区别 (转)

    要理解.c文件与.h文件有什么不同之处,首先需要弄明白编译器的工作过程,一般说来编译器会做以下几个过程: 1.预处理阶段 2.词法与语法分析阶段 3.编译阶段,首先编译成纯汇编语句,再将之汇编成跟CP ...

  9. c语言中.h文件和.c文件的关系

    详解C语言项目中.h文件和.c文件的关系 在编译器只认识.c(.cpp))文件,而不知道.h是何物的年代,那时的人们写了很多的.c(.cpp)文件,渐渐地,人们发现在很多.c(.cpp)文件中的声明语 ...

最新文章

  1. main方法_你知道为什么Java的main方法必须是public static void?
  2. 为IDOC创建tRFC连接
  3. 交叉编译HTOP并移植到ARM嵌入式Linux系统
  4. CentOS 7 安装无线驱动
  5. 计算机的新应用论文,计算机教学应用的新创新模式论文原稿
  6. mysql查询结果输出到文件
  7. 计算机网络拓扑结构详解
  8. 宁德时代发布第一代钠离子电池;联泰科技与赢创联合研发实验室成立;霍尼韦尔高管人事变动 | 能动...
  9. 最GIS应用案例——告诉你什么是GIS!
  10. PHP GD竖排文字写法
  11. MoveIt与RobotStudio
  12. Cleanup failed to process the following paths错误的解决
  13. linux 指令熟悉
  14. Unity Shader-GodRay,体积光(BillBoard,Volume Shadow,Raidal Blur,Ray-Marching)
  15. 获取当前日期是今年的第几周
  16. open连接MySQL超时_mysql5 超时链接
  17. pyscripter支持python什么版本_pyscripter 64位下载-pyscripter x64下载2.5.3 官方最新版-Python集成开发环境IDE西西软件下载...
  18. Win10 IoT C#开发 2 - GPIO Pin 控制发光二极管
  19. 关于UWP中下载文件夹操作问题
  20. Leaflet包:从入门到跑路(一)

热门文章

  1. linux 星号 通配符,如何在bash中转义通配符/星号字符?
  2. wrf 嵌套网格作用_在网格系统中使用响应列,嵌套列和偏移列 引导程序
  3. 字符串矩阵转换成长字符串_字符串矩阵
  4. c ++查找字符串_C ++类和对象| 查找输出程序| 套装5
  5. aptitude 命令_C-命令行参数Aptitude问题与解答
  6. html侧滑菜单mui,mui侧滑菜单点击含有mui-action-menu类的控件无法实现侧滑
  7. 树莓派该文件名_树莓派:文本编辑器与文件
  8. kotlin 判断数字_Kotlin程序可以逆转数字
  9. Java ObjectInputStream readFloat()方法与示例
  10. 分布式锁的 3 种实现方案!