要完成对16×2点阵字符液晶模块的高效操控,有必要依照模块规划方法,建立起相关的子程序,下面先具体介绍驱动16×2点阵字符液晶模块的各功用子程序。
1.写指令到LCM子函数
vOid LCDWriteCommand(uchar CMD,uchar Attribc)
/*函数名为WriteCommandLCM的写指令到LCM子函数。
界说CMD、Attribc 为无符号字符型变量。*/
{
if(Attribc)WaitForEnable();
/*若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:
/*界说;为无符号字符型变量。*/