张玲玲
摘要:液晶显示器分为段位式LCD、字符式LCD和点阵式LCD,具有机身薄,节省空间,省电,不产生高温,低辐射,益健康,画面柔和不伤眼等诸多优点,已经广泛的应用于各个领域。本文通过51单片机控制系统控制点阵式LCD12864显示来介绍LCD12864的工作原理及LCD12864的驱动程序设计编写方法。
关键词:51单片机 LCD12864 程序设计
0 引言
液晶显示器根据显示方式可分为:段位式、字符式和点阵式LCD,其中段位式与字符式只能显示数字与字符。而点阵式LCD不仅能显示数字与字符,还能显示各种图形、曲线及汉字等。本文研究的TG12864B是能显示曲线、图形及汉字的点阵式LCD。
1 TG12864介绍
TG12864是一款无字库的图形点阵显示器,其屏幕由64行×128列点阵组成,可以显示16点阵的4行×8列(32个)汉字、8点阵的8行×8列(64个)字母和128×64全屏幕点阵图形。
1.1 TG12864B内部功能器件介绍
在使用TG12864B前须了解其相关功能器件,如下所示:①指令寄存器(IR):用于寄存指令码。②数据寄存器(DR):用于寄存数据的。DR和显示数据存储器DDRAM(见表1)之间的数据传输是模块内部自动执行的。③显示数据RAM(DDRAM):DDRAM是存储图形显示数据的。数据为1表示显示选择,数据为0表示显示非选择。DDRAM与地址和显示位置的关系见DDRAM地址表。④XY地址计数器。XY地址计数器是一个9位计数器。高3位是X地址计数器,低6位为Y地址计数器,XY地址计数器实际上是作为DDRAM的地址指针,X地址计数器为DDRAM的页指针,Y地址计数器为DDRAM的Y地址指针。X地址计数器是没有记数功能的,只能用指令设置。Y地址计数器具有循环记数功能,各显示数据写入后,Y地址自动加1,Y地址指针从0到63。
1.2 TG12864的控制指令
①开关显示:开显示,指令码为0X3F;关显示,指令码为0X3E。②设置Y地址:0x40~0x4f,其中0x40为第0列列地址,0x4f为第63列列地址。③设置X页地址:模块有64行,其中8行为一页,即有8页,A2~A0表示0~7页:如,当A2~A0为000时表示第0页,为111是表示第7页。页地址分别是0XB8~0XBF。④显示开始线:该指令中A5~A0为显示起始行的地址,它规定了显示屏起始行所对应的显示存储器的行地址。通过修改显示其实行寄存器的内容,可以实现显示屏向上或向下滚动。⑤读状态:BF:判断忙信号标志位。BF=1表示液晶屏正在处理MCU发过来的指令或者数据,此时接口电路被挂起,不能接受除读操作以外的任何操作,BF=0表示液晶屏接口控制电路处于空闲状态,可以接受外部数据和指令。
2 电路设计
图1 TG12864显示线路图
图1为AT89S51控制12864LCD线路图,图中DB0~DB7为TG12864的数据线,单片机通过该端口给TG12864写命令或读写数据;RS为寄存器与显示内存操作选择管脚,单片机通过P3.7脚与之连接,当RS脚为高电平时,对液晶显示器的数据寄存器进行读或写操作;当RS脚为低电平时,对命令寄存器进行操作;RW为读写控制脚,与单片机P3.6脚连接,当RW脚为高电平时,准备对液晶显示器执行读操作,低电平时执行写操作;E脚为使能端,与P3.5脚连接,下降沿有效;CS1为高电平是选择芯片(右半屏)信号,CS2为高电平时选择芯片(左半屏)信号;RST复位脚,低电平复位。
3 LCD12864的驱动程序设计
LCD12864驱动程序的编程要想让LCD12864显示出需要的内容,就得严格按照LCD12864的工作时序来进行编程。驱动LCD12864显示程序含有以下几个子程序:
sbit di=P3^7;//高电平写数据,低电平写命令
sbit rw=P3^6;//高电平读操作,低电平写操作
sbit e=P3^5;//读写使能端,下降沿有效
sbit cs1=P3^4;//定义P3.4为左半屏片选信号
sbit cs2=P3^3;//定义P3.3为右半屏片选信号
sbit rst=P3^2;//TG12864复位信号
sbit bf=P2^7;//检测LCD忙引脚
sbit res=P2^4;//检测是否处于复位状态,高电平处于复位,低电平正常。
define dataport P0 //定义P0口为LCD数据总线,用于传输指令命令和显示数据。
3.1 忙检测子程序
void check_busy(void)
{
dataport=0xff;
di=0;
rw=1;
delay(1);
e=1;
while(bf||res==1);
e=0;
}
3.2 写命令或数据子程序
void write( char dat_comm,char content)
{
Chk_busy;
di=dat_comm;//dat_comm为高电平写数据,低电平写命令
rw=0;
dataport=content;
e=1;
delay(1);
e=0;
}
3.3 初始化子程序
void init_lcd(void)
{
rst=0;
delay(50);
rst=1;
cs1=1;cs2=1;/左右半屏选中
write(comm,0x3e);//关显示
write(comm,0x3f);//开显示
}
4 总结
本文对TG12864B用通俗易懂的语言进行了简单的介绍,并对TG12864B的驱动程序进行了简单的设计,使读者能初步了解12864LCD的简单应用。要想熟练的掌握TG12864B,还需要不断的实践,不断的摸索,熟悉编程语言,不断提高TG12864B的编程技巧,使程序得到最大程度的优化。
参考文献:
[1]朱华光.浅议LCD1602的编程技巧[J].电脑知识与技术,
2010.6.
[2]林嘉.基于89S52的LCD1602程序设计[J].电脑知识与技术,2012.8.
[3]田开坤.基于LCD12864显示器的数字示波器设计[J].电子制作,2010.5.