? ? ?要實(shí)現(xiàn)對(duì)16x2點(diǎn)陣字符液晶模塊的高效控制,必須按照模塊設(shè)計(jì)方式,建立起相關(guān)的子程序,下面先詳細(xì)介紹驅(qū)動(dòng)16x2點(diǎn)陣字符液晶模塊的各功能子程序。
1.寫命令到LCM子函數(shù)
vOid?LCDWriteCommand(uchar CMD,uchar Attribc)
/*函數(shù)名為WriteCommandLCM的寫指令到LCM子函數(shù)。
定義CMD、Attribc 為無(wú)符號(hào)字符型變量。*/
{
/*若Arrribc為“真”,則調(diào)用WaitForEnable子函數(shù)進(jìn)行忙檢測(cè)*/
LCM_RS_0;LCM_RW_0;_NOP0;
/*選中指令寄存器,寫模式*/
DataPort=CMD;_NOP();
/*將變量WCLCM中的指令傳送至數(shù)據(jù)口
LCM_EN_1;_NOP0;_NOP();LCM_EN_O:
/*LCM_EN端產(chǎn)生脈沖下降沿。*/
}
/*WriteCommandLCM 子函數(shù)結(jié)束。*/
2,寫數(shù)據(jù)到LCM子函數(shù)
void LcdWritEDAta(dchar dataW)
/*函數(shù)名為WriteDataLCM的寫數(shù)據(jù)到LCM子函數(shù)。定義
dataW 為無(wú)符號(hào)字符型變量。*/
{
/*WriteDataLCM子函數(shù)開始。*/
WaitForEnable(); ? ?*/
LCM_RS_1;LCM_RW_0;_NOP0;
/*選中數(shù)據(jù)寄存器,寫模式。*/
DataPort=dataW;_NOP();
/*將變量dataQW中數(shù)據(jù)傳送至數(shù)據(jù)口。*/
LCM_EN_1;_NOP();_NOP0;LCM_EN_O:
/*LCM_EN端產(chǎn)生脈沖下降沿。WriteDataLCM子函數(shù)
結(jié)束*/
3.檢測(cè)LCD忙信號(hào)子函數(shù)
void WaitForEnable(void)
?。?函數(shù)名為WaitForEnable的檢測(cè)忙信號(hào)子程序子函數(shù)。
/*WaitForEnable子函數(shù)開始。*/
uchar val;
/*定義局部變量val。*/
DataPOrt=Oxff;
/*置數(shù)據(jù)口為全1。*/
LCM_RS_0;LCM_RW_1;_NOP();
/*選中指令寄存器,讀模式。*/
LCM_EN_1;_NOP();_NOP();
/*置LCM_EN端為高電平,讀使能。*/
DDRA=0x00;
/*數(shù)據(jù)口置為輸入*/
val=PINA:
/*讀取數(shù)據(jù)*/
while(val&Busy)val=PINA:
/*檢測(cè)忙信號(hào)。當(dāng)數(shù)據(jù)口內(nèi)容與0x80相與后不為零時(shí),
程序原地踏步繼續(xù)讀取數(shù)據(jù)并檢測(cè)忙信號(hào)。*/
LCM_EN_O:
/*置LCM_EN端為低電平。*/
DDRA=0xff;
/*數(shù)據(jù)口置為輸出*/
}
/*WaitForEnable子函數(shù)結(jié)束。*/
4.顯示光標(biāo)定位子函數(shù)
void?LOCateXY(char posx.char posy)
/*顯示光標(biāo)定位子函數(shù),函數(shù)名為L(zhǎng)ocareXY,定義posx,
posxxy為字符型變量。*/
{
/*LocateXY子函數(shù)開始。*/
uchar temp;
/*定義temp為無(wú)符號(hào)字符型變量。*/
temp&=0x7f;
/*temp的變化范圍0-15。*/
temp=posx&0xof;
/*屏蔽高4位。*/
posy&=0x01;
/*posy的變化范圍0-1。*/
if(posy)tempㄧ=0x40;
/*若posy為1(顯示第二行),地址碼+0x40*/
tempㄧ=0x80;
/*指令碼為地址碼+0x80。*/
WriteCommandLCM(temp,0);
?。?將指令temp寫入LCM,忽略忙信號(hào)檢測(cè)。*/
}
/*LocateXY子函數(shù)結(jié)束。*/
5.顯示指定座標(biāo)的一個(gè)字符(x=0~15,y=0~1)子函數(shù)
void DisplayOneChar(uchar x,uchar y,uchar Wdata)
/*顯示指定座標(biāo)的一個(gè)字符(x=0-15.y=0-1)子函數(shù),函
數(shù)名為DispOneChar,定義x、y、Wdata為無(wú)符號(hào)字符型變量。
*/
{
/*DispOneChar函數(shù)開始*/
LocateXY(x,y):
?。?調(diào)用LocateXY函數(shù)定位顯示地址。*/
WriteDataLCM(Wdata);
?。?將數(shù)據(jù)Wdata寫入LCM。*/
}
/*DispONeChar函數(shù)結(jié)束。*/
6.演示第二行移動(dòng)字符串子函數(shù)
void Display(uchar dd)
/*演示第二行移動(dòng)字符串子函數(shù),函數(shù)名為Dispiay,定義
dd為無(wú)符號(hào)字符型變量。*/
{
/*Display子函數(shù)開始。*/
uchari:
/*定義;為無(wú)符號(hào)字符型變量。*/
評(píng)論