第一次调4线的LCD1602,比较困难,或者因为延迟不对,或者因为命令错误,我足足用了一天时间,搞定了4线的1602编程实现。这里提供51单片机和LPC23XX系列单片机的程序。51的程序是我上网找的,可以参考里面的实现步骤,可以直接仿真,但是不知道烧到板子里是否可以。LPC23XX系列单片机的程序可以直接烧写板子里运行,注意里面的管脚定义,因为在proteus里没找到对应的芯片,这里不知是否可以仿真。
51程序
#include <reg51.h>
sbit LCM_RW=P2^0; //定义引脚
sbit LCM_RS=P2^1;
sbit LCM_E =P2^2;
#define LCM_Data
#define Busy 0x80 //用于检测 LCM 状态字中的 Busy 标识
void WritEDAtaLCM(unsigned char Data);
void WriteCommandLCM(unsigned char Command);
void LCMInit(void);
void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData);
void DisplayListChar(unsigned char X, unsigned char Y, unsigned char code *DData);
void Delayms(unsigned int n);
void dellay(unsigned int
unsigned char code blog_adr[] = {"EDNchina"};
unsigned char code email[] = {"tengjingshu@126.com"};
void main(void)
{
}
//写数据 RS=H,RW=L,D0~D7=数据,E=高脉冲
void WritEDAtaLCM(unsigned char Data)
{
}
//写指令 RS=L,RW=L,D0~D7=指令码,E=高脉冲
void WriteCommandLCM(unsigned char Command)
{
dellay(100);
}
//读数据 RS=H,RW=H,E=H
//读状态 RS=L,RW=H,E=H
//由于不要检测忙,所以读数据和读状态两个函数省略
void LCMInit(void)
{
}
//按指定位置显示一个字符
void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData)
{
Y &= 0x1;
X &= 0xF;
if (Y) X |= 0x40;
X |= 0x80;
WriteCommandLCM(X);
WritEDAtaLCM(DData);
}
//按指定位置显示一串字符
void DisplayListChar(unsigned char X, unsigned char Y, unsigned char code *DData)
{
unsigned char ListLength;
ListLength = 0;
Y &= 0x1;
X &= 0xF; //限制 X 不能大于 15,Y 不能大于 1
while (DData[ListLength]>0x1f) //若到达字串尾则退出
}
}
void Delayms(unsigned int n)
{
}
void dellay(unsigned int
{
}