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文件怎么书写?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: vb.net2019-打开外部程序发送键
- 下一篇: mxnet基础到提高(27)-Dense