|
发表于 2010-5-5 18:21:32
|
显示全部楼层
不知道调试成功了没?
贴一下我的代码,给找到这里的人提供一个参考
需要注意的是:数据脚和RS/RW/Elcm据需要配置成推挽输出
/*===================================================================
16x2 字符液晶屏驱动程序
---------------------------------------------------------------------
连接线图: LCM-----F020 LCM-----F020 LCM------F020
DB0-----P7.0 DB4-----P7.4 RS-------P3.1
DB1-----P7.1 DB5-----P7.5 RW-------P3.2
DB2-----P7.2 DB6-----P7.6 Elcm-----P3.3
DB3-----P7.3 DB7-----P7.7
[注]:C8051F020的晶振频率为22.1184MHz
====================================================================*/
#define DataPort P7 // 数据端口
#define Busy 0x80
// 控制引脚定义
sbit RS = P3^1;
sbit RW = P3^2;
sbit Elcm = P3^3;
static void Delay(unsigned int Cnt)
{
while (Cnt--);
}
/*=======================================================
写控制字符子程序: E=1 RS=0 RW=0
=======================================================*/
void LcdWriteCommand(unsigned char Cmd)
{
Elcm = 1;
RS = 0;
RW = 0;
Delay(100);
DataPort = Cmd; // 送控制字子程序
Elcm = 1;
Elcm = 0; // 操作允许脉冲信号
}
/*=======================================================
当前位置写字符子程序: E =1 RS=1 RW=0
=======================================================*/
void LcdWriteData(char Data)
{
Elcm = 1;
RS = 1;
RW = 0;
Delay(100);
DataPort = Data;
Elcm = 1;
Elcm = 0; // 操作允许脉冲信号
}
/*=======================================================
显示光标定位
=======================================================*/
void LocateXY( char posx,char posy)
{
unsigned char temp;
temp = posx & 0xf;
posy &= 0x1;
if ( posy )
{
temp |= 0x40;
}
temp |= 0x80;
LcdWriteCommand(temp);
}
/*=======================================================
显示字符串
=======================================================*/
void DispStr(unsigned char x,unsigned char y, unsigned char *str) reentrant
{
LocateXY(x,y);
while(*str!='\0')
{
LcdWriteData(*str);
str++;
}
}
/*=======================================================
初始化程序, 必须按照产品资料介绍的初始化过程进行
=======================================================*/
void LcdIni( void )
{
LcdWriteCommand(0x38); // 显示模式设置
Delay(50000);
LcdWriteCommand(0x38); // 显示模式设置
Delay(50000);
LcdWriteCommand(0x38); // 显示模式设置
Delay(50000);
LcdWriteCommand(0x08); // 显示关闭
Delay(5000);
LcdWriteCommand(0x01); // 显示清屏
Delay(5000);
LcdWriteCommand(0x06); // 显示光标移动设置
Delay(5000);
LcdWriteCommand(0x0c); // 显示开及光标设置
} |
|