日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2025/3/12 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c语言.h文件怎么写,关于C语言中.h文件怎么书写? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

其實,頭文件的功能就是申明資源,特別是多個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文件怎么书写?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。