HD44780U的使用(C语言)
字符液晶显示模块的接口技术
字符液晶显示模块的外接口信号实际上是HD44780U信号时序为与计算机接口的信号M6800系列时序。使用8080时序AT89C在连接51系列计算机时,关键是要注意E信号的使用。
计算机与字符液晶显示模块有两种连接方式,一种是直接访问,另一种是间接控制。本书将详细介绍这两种方法的接口技术。
1 直接访问方式
直接访问的方式是计算机将字符液晶显示模块作为存储器或I/O设备直接挂在计算机总线上。
这样,种方式,控制信号AT89C51读操作信号RD并编写操作信号WR与地址信号合成。本文推荐的实用接口电路,如图所示。
图直接访问接口电路
对于完成液晶显示模块的显示,上图所示的电路使用的硬件相对较少,但如果计算机需要扩展,使用上图并不经济(浪费了太多的地址空间)。此时,您可以考虑使用全地址代码或部分地址代码。
在上图所示的电路中:
●8位数据总线和AT89C数据总线连接51
●E信号由WR和RD地址由信号逻辑和非后产生A15选通控制
●R/W由地址A14提供
●RS信号由地址A13提供
这样就确定了AT89C51操作字符型液晶显示模块的唯一地址选择。
图中的电位器是V0为实现显示对比度的调节提供可调驱动电压。
同时,上图所示的电路可以模拟四位计算机对字符液晶显示模块的接口,主要是驱动软件的变化。
以下是直接访问8位和4位接口的驱动程序。
(1)地址定义
#include
#include
#include
#define uchar unsigned char
#define uint unsigned int
#define nop() _nop_()
xdata uchar WC_ADD _at_ 0x8000;
xdata uchar RC_ADD _at_ 0xC000;
xdata uchar WD_ADD _at_ 0xA000;
xdata uchar RD_ADD _at_ 0xE000;
(2)读入BF与AC的值
8位接口:
uchar RdBFAC(void)
{
uchar status;
status=RC_ADD&0x80; /*屏蔽低7位*/
return status;
}
4位接口:
uchar RdBFAC(void)
{
uchar status,temp;
status=RC_ADD;
temp=RC_ADD;
status=status&0x80; /*屏蔽低7位*/
return status;
}
(3)写指令代码
8位接口:
void WRCMD(uchar CMD)
{
uchar temp;
do
{
temp=RdBFAC();
}
while(temp>=0x80);
WC_ADD=CMD;
}
4位接口:
void WRCMD(uchar CMD)
{
uchar temp;
do
{
temp=RdBFAC();
}
while(temp>=0x80);
WC_ADD=CMD;
CMD<<=4;
WC_ADD=CMD;
}
(4)写显示数据
8位接口:
void WRDAT(uchar DAT)
{
uchar temp;
do
{
temp=RdBFAC();
}
while(temp>=0x80);
WD_ADD=DAT;
}
4位接口:
void WRDAT(uchar DAT)
{
uchar temp;
do
{
temp=RdBFAC();
}
while(temp>=0x80);
WD_ADD=DAT;
DAT<<=4;
WD_ADD=DAT;
}
(5)读取显示数据
8位接口:
uchar RdDAT(void)
{
uchar DAT,temp;
do
{
temp=RdBFAC();
}
while(temp>=0x80);
DAT=RD_ADD;
return DAT;
}
4位接口:
uchar RdDAT(void)
{
uchar DAT,DATtemp,temp;
do
{
temp=RdBFAC();
}
while(temp>=0x80);
DAT=RD_ADD;
DATtemp=RD_ADD;
DAT=DAT|(DATtemp>>=4);
return DAT;
}
2 间接控制模式
间接控制方法是计算机将字符液晶显示模块作为终点