#define LCM_RS P2^0 // 數據/命令選擇信號
#define LCM_RW P2^1 // 讀/寫選擇信號
#define LCM_E P2^2 // 使能信號
#define LCM_Data P0 // 顯示數據端口
#define Busy 0x80 // 用于檢測LCM狀態字中的Busy標識
#define uchar unsigned char
#define uint unsigned int
//================================ LCM1602控制部分 =========================================================
/*****************************************************
函 數 名:void Delay_LCD(void)
功 能:5ms延時
說 明:LCD顯示延時
入口參數:無
返 回 值:無
*****************************************************/
void Delay_LCD(void)
{
uint TempCyc = 5552; // 放入延時數據
while(TempCyc--)
{
;
}
}
/*****************************************************
函 數 名:uchar ReadStatusLCM()
功 能:讀忙狀態
說 明:判斷LCM的工作狀態;也可以不用此函數,用一段延時程序代替
入口參數:無
返 回 值:LCM_Data
*****************************************************/
//讀狀態
uchar ReadStatusLCM(void)
{
LCM_Data=0xff;
LCM_RS=0;
LCM_RW=1;
LCM_E=0;
LCM_E=0;
LCM_E=1;
while (LCM_Data & Busy) // 檢測忙信號.如果忙,則不執行
{
;
}
return (LCM_Data); // 不忙返回讀取數據
}
/*****************************************************
函 數 名:void WriteDataLCM()
功 能:向LCM1602中寫入數據
說 明:將形參WDLCM中的數據寫入LCM中
入口參數:WDLCM
返 回 值:無
*****************************************************/
//寫數據
void WriteDataLCM(uchar WDLCM)
{
ReadStatusLCM(); // 檢測忙
LCM_Data = WDLCM; // 寫入數據到LCM
LCM_RS = 1;
LCM_RW = 0;
LCM_E = 0; // 若晶振速度太高可以在這后加小的延時
LCM_E = 0; // 延時
LCM_E = 1;
}
/*****************************************************
函 數 名:void WriteCommandLCM()
功 能:向LCM1602中寫入指令
說 明:向LCM中寫入指令;如果BuysC=0時,忽略忙檢測,如果BuysC=1時,不忽略忙檢測
入口參數:WCLCM,BuysC
返 回 值:無
*****************************************************/
//寫指令
void WriteCommandLCM(uchar WCLCM,BuysC) // BuysC為0時忽略忙檢測
{
if (BuysC)
{
ReadStatusLCM(); // 根據需要檢測忙
}
LCM_Data = WCLCM;// 寫入指令
LCM_RS = 0;
LCM_RW = 0;
LCM_E = 0;
LCM_E = 0;
LCM_E = 1;
}
|