? ? ?要實現對16x2點陣字符液晶模塊的高效控制,必須按照模塊設計方式,建立起相關的子程序,下面先詳細介紹驅動16x2點陣字符液晶模塊的各功能子程序。
1.寫命令到LCM子函數
vOid?LCDWriteCommand(uchar CMD,uchar Attribc)
/*函數名為WriteCommandLCM的寫指令到LCM子函數。
定義CMD、Attribc 為無符號字符型變量。*/
{
/*若Arrribc為“真”,則調用WaitForEnable子函數進行忙檢測*/
LCM_RS_0;LCM_RW_0;_NOP0;
/*選中指令寄存器,寫模式*/
DataPort=CMD;_NOP();
/*將變量WCLCM中的指令傳送至數據口
LCM_EN_1;_NOP0;_NOP();LCM_EN_O:
/*LCM_EN端產生脈沖下降沿。*/
}
/*WriteCommandLCM 子函數結束。*/
2,寫數據到LCM子函數
void LcdWritEDAta(dchar dataW)
/*函數名為WriteDataLCM的寫數據到LCM子函數。定義
dataW 為無符號字符型變量。*/
{
?。?WriteDataLCM子函數開始。*/
WaitForEnable(); ? ?*/
LCM_RS_1;LCM_RW_0;_NOP0;
/*選中數據寄存器,寫模式。*/
DataPort=dataW;_NOP();
/*將變量dataQW中數據傳送至數據口。*/
LCM_EN_1;_NOP();_NOP0;LCM_EN_O:
/*LCM_EN端產生脈沖下降沿。WriteDataLCM子函數
結束*/
3.檢測LCD忙信號子函數
void WaitForEnable(void)
?。?函數名為WaitForEnable的檢測忙信號子程序子函數。
/*WaitForEnable子函數開始。*/
uchar val;
/*定義局部變量val。*/
DataPOrt=Oxff;
/*置數據口為全1。*/
LCM_RS_0;LCM_RW_1;_NOP();
/*選中指令寄存器,讀模式。*/
LCM_EN_1;_NOP();_NOP();
/*置LCM_EN端為高電平,讀使能。*/
DDRA=0x00;
/*數據口置為輸入*/
val=PINA:
/*讀取數據*/
while(val&Busy)val=PINA:
/*檢測忙信號。當數據口內容與0x80相與后不為零時,
程序原地踏步繼續讀取數據并檢測忙信號。*/
LCM_EN_O:
/*置LCM_EN端為低電平。*/
DDRA=0xff;
/*數據口置為輸出*/
}
/*WaitForEnable子函數結束。*/
4.顯示光標定位子函數
void?LOCateXY(char posx.char posy)
/*顯示光標定位子函數,函數名為LocareXY,定義posx,
posxxy為字符型變量。*/
{
/*LocateXY子函數開始。*/
uchar temp;
/*定義temp為無符號字符型變量。*/
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,忽略忙信號檢測。*/
}
/*LocateXY子函數結束。*/
5.顯示指定座標的一個字符(x=0~15,y=0~1)子函數
void DisplayOneChar(uchar x,uchar y,uchar Wdata)
/*顯示指定座標的一個字符(x=0-15.y=0-1)子函數,函
數名為DispOneChar,定義x、y、Wdata為無符號字符型變量。
*/
{
/*DispOneChar函數開始*/
LocateXY(x,y):
?。?調用LocateXY函數定位顯示地址。*/
WriteDataLCM(Wdata);
/*將數據Wdata寫入LCM。*/
}
/*DispONeChar函數結束。*/
6.演示第二行移動字符串子函數
void Display(uchar dd)
/*演示第二行移動字符串子函數,函數名為Dispiay,定義
dd為無符號字符型變量。*/
{
/*Display子函數開始。*/
uchari:
/*定義;為無符號字符型變量。*/
評論
查看更多