?? lcd.c
字號:
#include<reg51.h>
#include"Config.h"
#include"IOCfg.c"
#include"TimeDLY.h"
#include"IIC_PCA8574.h"
#include"LCD.h"
bit x;
//IO輸入輸出控制
void InitLCDData(bit i)
{
if(i==1) x=PCA8574_PutOne(0x41,0xff);
else x=PCA8574_PutOne(0x41,0x00);
}
//指令/數據選擇函數:SetLCD_RS()
void SetLCD_RS(bit i)
{
if(i==1) x=PCA8574_PutOne(0x40,0x20);
else x=PCA8574_PutOne(0x40,0x00);
}
//讀寫操作控制信號:SetLCD_RW()
void SetLCD_RW(bit i)
{
if(i==1) x=PCA8574_PutOne(0x40,0x40);
else x=PCA8574_PutOne(0x40,0x00);
}
//使能信號:SetLCD_EN()
void SetLCD_EN(bit i)
{
if(i==1) x=PCA8574_PutOne(0x40,0x10);
else x=PCA8574_PutOne(0x40,0x00);
}
//復位:SetLCD_RST()
void SetLCD_RST(bit i)
{
if(i==1) x=PCA8574_PutOne(0x40,0x80);
else x=PCA8574_PutOne(0x40,0x00);
}
//讀狀態函數:ReadStatus()
INT8U ReadStatus(void)
{
INT8U i;
InitLCDData(1);
SetLCD_RW(1);
SetLCD_RS(0);
SetLCD_EN(0);
nNop(10);
SetLCD_EN(1);
nNop(20);
x=PCA8574_GetOne(0x41,i);
nNop(40);
SetLCD_EN(0);
return(i);
}
//讀一字節數據函數:ReadOneByte()
INT8U ReadOneByte(void)
{
INT8U i;
InitLCDData(1);
SetLCD_RW(1);
SetLCD_RS(1);
SetLCD_EN(0);
nNop(10);
SetLCD_EN(1);
nNop(20);
x=PCA8574_GetOne(0x41,i);
nNop(40);
SetLCD_EN(0);
return(i);
}
//寫指令函數:WriteInstruc()
void WriteInstruc(INT8U Instruction)
{
while((ReadStatus() & 0x80)!= 0x00);
InitLCDData(0);
SetLCD_RW(0);
SetLCD_RS(0);
SetLCD_EN(0);
x=PCA8574_PutOne(0x41,Instruction);
nNop(100);
SetLCD_EN(1);
nNop(100);
SetLCD_EN(0);
}
//寫一字節數據函數:WriteOneByte()
void WriteOneByte(INT8U Data)
{
while((ReadStatus() & 0x80)!= 0x00);
InitLCDData(0);
SetLCD_RW(0);
SetLCD_RS(1);
SetLCD_EN(0);
x=PCA8574_PutOne(0x41,Data);
nNop(100);
SetLCD_EN(1);
nNop(100);
SetLCD_EN(0);
}
//復位函數:ResetLCD()
void ResetLCD(void)
{
LDelay(40);
SetLCD_RST(0);
LDelay(1);
SetLCD_RST(1);
LDelay(1);
}
//初始化函數:InitLCD()
void InitLCD(void)
{
ResetLCD();
FunctionSet(0x30); // Function Set: 8_bits_Data, Base_Instrution
LDelay(1);
FunctionSet(0x30); // Function Set: 8_bits_Data, Base_Instrution
LDelay(1);
Disp_OnOff(0x0c); // Disp_ON: The Whole ALL_ON
LDelay(1);
ClearLCD(); // Clear LCD
LDelay(1);
PointSet(0x06); // Entry Mode Set: DDRAM Address Counter(AC) + 1
LDelay(1);
}
//顯示一個漢字(16x16)函數:DispOneWord()
void DispOneWord(INT8U X,INT8U Y,INT16U Word)
{
INT8U Disp_Address;
INT8U Address_H;
INT8U Address_L;
if((X == 0x00)||(X == 0x02)) // 0,2行
Address_H = 0x80;
else // 1,3行
Address_H = 0x90;
if((X == 0x00)||(X == 0x01)) // 0,1行
Address_L = Y;
else // 2,3行
Address_L = Y + 0x08;
Disp_Address = (Address_H | Address_L) & 0xff;
SetDDRAM_Add(Disp_Address); // Set DDRAM(Disp_Address)
WriteOneByte(((Word & 0xff00) >> 8) & 0xff); // H_Byte
WriteOneByte(Word & 0xff); // L_Byte
}
//顯示兩個字符(8x16)函數:DispTwoCharacter()
void DispTwoCharacter(INT8U X,INT8U Y,INT8U Character1,INT8U Character2)
{
INT8U Disp_Address;
INT8U Address_H;
INT8U Address_L;
if((X == 0x00)||(X == 0x02)) // 0,2行
Address_H = 0x80;
else // 1,3行
Address_H = 0x90;
if((X == 0x00)||(X == 0x01)) // 0,1行
Address_L = Y;
else // 2,3行
Address_L = Y + 0x08;
Disp_Address = Address_H | Address_L;
SetDDRAM_Add(Disp_Address); // Set DDRAM(Disp_Address)
WriteOneByte(Character1);
WriteOneByte(Character2);
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -