c语言.h文件怎么写,关于C语言中.h文件怎么书写?
其實(shí),頭文件的功能就是申明資源,特別是多個(gè)C文件的時(shí)候,簡(jiǎn)單地說,就像是庫(kù)文件。
例如:reg51.h頭文件,就是單純的申明資源,系統(tǒng)的其它頭文件,還有申明函數(shù)的。
如果自己編寫頭文件,就可以包含這兩個(gè)方面的內(nèi)容了,例如:
發(fā)下是1602器件的頭文件
#ifndef __LCD_H_
#define __LCD_H_
/**********************************
當(dāng)使用的是4位數(shù)據(jù)傳輸?shù)臅r(shí)候定義,
使用8位取消這個(gè)定義
**********************************/
#define LCD1602_4PINS
/**********************************
包含頭文件
**********************************/
#include
//---重定義關(guān)鍵詞---//
#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;
/**********************************
函數(shù)聲明
**********************************/
/*在51單片機(jī)12MHZ時(shí)鐘下的延時(shí)函數(shù)*/
void Lcd1602_Delay1ms(uint c);? ?//誤差 0us
/*LCD1602寫入8位命令子函數(shù)*/
void LcdWriteCom(uchar com);
/*LCD1602寫入8位數(shù)據(jù)子函數(shù)*/
void LcdWriteData(uchar dat)? ? ? ? ;
/*LCD1602初始化子程序*/
void LcdInit();
#endif
它必須配合1602的C文件同時(shí)使用
#include"lcd.h"
/*******************************************************************************
* 函 數(shù) 名? ?? ?? ?: Lcd1602_Delay1ms
* 函數(shù)功能? ? ? ? ? ? ? ?? ? : 延時(shí)函數(shù),延時(shí)1ms
* 輸? ? 入? ?? ?? ?: c
* 輸? ? 出? ?? ?? ?: 無(wú)
* 說? ? 名? ?? ?? ?: 該函數(shù)是在12MHZ晶振下,12分頻單片機(jī)的延時(shí)。
*******************************************************************************/
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--);
}
}
}
/*******************************************************************************
* 函 數(shù) 名? ?? ?? ?: LcdWriteCom
* 函數(shù)功能? ? ? ? ? ? ? ?? ? : 向LCD寫入一個(gè)字節(jié)的命令
* 輸? ? 入? ?? ?? ?: com
* 輸? ? 出? ?? ?? ?: 無(wú)
*******************************************************************************/
#ifndef ? ? ? ? LCD1602_4PINS? ? ? ???//當(dāng)沒有定義這個(gè)LCD1602_4PINS時(shí)
void LcdWriteCom(uchar com)? ? ? ?? ?//寫入命令
{
LCD1602_E = 0;? ???//使能
LCD1602_RS = 0;? ? ? ?? ? //選擇發(fā)送命令
LCD1602_RW = 0;? ? ? ?? ? //選擇寫入
LCD1602_DATAPINS = com;? ???//放入命令
Lcd1602_Delay1ms(1);? ? ? ? ? ? ? ? //等待數(shù)據(jù)穩(wěn)定
LCD1602_E = 1;? ? ? ?? ?? ?? ???//寫入時(shí)序
Lcd1602_Delay1ms(5);? ? ? ?? ?//保持時(shí)間
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;? ? ? ???//寫入時(shí)序
Lcd1602_Delay1ms(5);
LCD1602_E = 0;
//? ? ? ? Lcd1602_Delay1ms(1);
LCD1602_DATAPINS = com << 4; //發(fā)送低四位
Lcd1602_Delay1ms(1);
LCD1602_E = 1;? ? ? ???//寫入時(shí)序
Lcd1602_Delay1ms(5);
LCD1602_E = 0;
}
#endif
/*******************************************************************************
* 函 數(shù) 名? ?? ?? ?: LcdWriteData
* 函數(shù)功能? ? ? ? ? ? ? ?? ? : 向LCD寫入一個(gè)字節(jié)的數(shù)據(jù)
* 輸? ? 入? ?? ?? ?: dat
* 輸? ? 出? ?? ?? ?: 無(wú)
*******************************************************************************/
#ifndef ? ? ? ? LCD1602_4PINS
void LcdWriteData(uchar dat)? ? ? ? ? ? ? ? ? ? ? ? //寫入數(shù)據(jù)
{
LCD1602_E = 0;? ? ? ? //使能清零
LCD1602_RS = 1;? ? ? ? //選擇輸入數(shù)據(jù)
LCD1602_RW = 0;? ? ? ? //選擇寫入
LCD1602_DATAPINS = dat; //寫入數(shù)據(jù)
Lcd1602_Delay1ms(1);
LCD1602_E = 1;? ?//寫入時(shí)序
Lcd1602_Delay1ms(5);? ?//保持時(shí)間
LCD1602_E = 0;
}
#else
void LcdWriteData(uchar dat)? ? ? ? ? ? ? ? ? ? ? ? //寫入數(shù)據(jù)
{
LCD1602_E = 0;? ? ? ?? ?//使能清零
LCD1602_RS = 1;? ? ? ?? ?//選擇寫入數(shù)據(jù)
LCD1602_RW = 0;? ? ? ?? ?//選擇寫入
LCD1602_DATAPINS = dat;? ? ? ? //由于4位的接線是接到P0口的高四位,所以傳送高四位不用改
Lcd1602_Delay1ms(1);
LCD1602_E = 1;? ? ? ?? ?//寫入時(shí)序
Lcd1602_Delay1ms(5);
LCD1602_E = 0;
LCD1602_DATAPINS = dat << 4; //寫入低四位
Lcd1602_Delay1ms(1);
LCD1602_E = 1;? ? ? ?? ?//寫入時(shí)序
Lcd1602_Delay1ms(5);
LCD1602_E = 0;
}
#endif
/*******************************************************************************
* 函 數(shù) 名? ?? ? : LcdInit()
* 函數(shù)功能? ? ? ? ? ? ? ???: 初始化LCD屏
* 輸? ? 入? ?? ? : 無(wú)
* 輸? ? 出? ?? ? : 無(wú)
*******************************************************************************/
#ifndef? ? ? ? ? ? ? ? LCD1602_4PINS
void LcdInit()? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? ?//LCD初始化子程序
{
LcdWriteCom(0x38);??//開顯示
LcdWriteCom(0x0c);??//開顯示不顯示光標(biāo)
LcdWriteCom(0x06);??//寫一個(gè)指針加1
LcdWriteCom(0x01);??//清屏
LcdWriteCom(0x80);??//設(shè)置數(shù)據(jù)指針起點(diǎn)
}
#else
void LcdInit()? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? ?//LCD初始化子程序
{
LcdWriteCom(0x32);? ? ? ???//將8位總線轉(zhuǎn)為4位總線
LcdWriteCom(0x28);? ? ? ???//在四位線下的初始化
LcdWriteCom(0x0c);??//開顯示不顯示光標(biāo)
LcdWriteCom(0x06);??//寫一個(gè)指針加1
LcdWriteCom(0x01);??//清屏
LcdWriteCom(0x80);??//設(shè)置數(shù)據(jù)指針起點(diǎn)
}
#endif
觀察注意到:C文件中的資源、函數(shù),都是通過頭文件申明的,這樣才能在主C文件中,調(diào)用到1602的C文件中的函數(shù)
你看主程序是這樣的:
#include
#include"lcd.h"
unsigned char PuZh[]=" Pechin Science ";
/*******************************************************************************
* 函 數(shù) 名? ?? ?? ?: main
* 函數(shù)功能? ? ? ? ? ? ? ?? ? : 主函數(shù)
* 輸? ? 入? ?? ?? ?: 無(wú)
* 輸? ? 出? ?? ?? ?: 無(wú)
*******************************************************************************/
void main(void)
{
unsigned char i;
LcdInit();
for(i=0;i<16;i++)
{
LcdWriteData(PuZh[i]);
}
while(1)
{
}
}
知道了自編頭文件的作用,就可以按照上述格式,編寫自己的其它器件的C文件和頭文件了。
總結(jié)
以上是生活随笔為你收集整理的c语言.h文件怎么写,关于C语言中.h文件怎么书写?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: vb.net2019-打开外部程序发送键
- 下一篇: mxnet基础到提高(27)-Dense