显示器是人类与应用设备沟通的重要界面,近年来,随着电子技术的飞速发展,液晶显示技术在实际生活中得到了广泛应用。液晶显示模块以其微功耗、体积小、显示内容丰富、模块化以及接口电路简单等诸多优点在科研、生产和产品设计等领域中发挥着越来越重要的作用。LM3033B系列液晶显示模块是深圳TOPWAY公司生产的中文显示模块中的一员。采用了台湾的ST7920控制芯片,并提供了中文字库,为中文显示开发方面带来了更多的方便。本文以LM3033B-0BR3为例介绍了12864点阵液晶显示模块的引脚、结构、功能,详述了与AT89S52单片机的硬件接口电路及有关软件编程方法。
1 LM3033B-0BR3特点及操作
1.1 字符显示
每屏可显示4行8列共32个16×16点阵的汉字,每个显示RAM 可显示1个中文字符或2个16×8点阵全高ASCII码字符,即每屏最多可实现32个中文字符或64个ASCII码字符的显示。内部提供128×2字节的字符显示RAM 缓冲区(DDRAM)。字符显示是通过将字符显示编码写入该字符显示RAM实现的。根据写入内容的不同,可分别在液晶屏上显示CGROM (中文字库)、HCGROM(ASCII码字库)及CGRAM(自定义字形)的内容。三种不同字符/字型的选择编码范围为:显示自定义字型其代码分别是0000H、0002H、0004H和0006H共4个,显示半宽ASCII码字符为02H~7FH,A1A0H~F7FFH显示8192种GB2312中文字库字形。字符显示RAM 在液晶模块中的地址80H~9FH。字符显示的RAM的地址与32个字符显示区域有着一一对应的关系,其对应关系如表1所示。
80H | 81H | 82H | 83H | 84H | 85H | 86H | 87H |
90H | 91H | 92H | 93H | 94H | 95H | 96H | 97H |
88H | 89H | 8AH | 8BH | 8CH | 8DH | 8EH | 8FH |
98H | 99H | 9AH | 9BH | 9CH | 9DH | 9EH | 9FH |
1.2 图形显示
绘图显示RAM提供64x32个位元组的记忆空间(由扩充指令设定绘图RAM位址),在更改绘图RAM时,由扩充指令设定GDRAM位址先设置垂直位址,再设置水平位址(连续写入两个位元组的资料来完成垂直与水平的坐标位址),再写入两个8位的资料到绘图RAM,而位址计数器(AC)会自动加一,整个写入绘图RAM 的步骤如下:
a.关闭绘图显示功能(在写入绘图RAM期间,绘图显示必须关闭) ;
b.先将垂直的位元组(Y)写入绘图RAM位址;
c.再将水平的位元组(X)写入绘图RAM位址;
d.将D15~D8写入到RAM 中;
e.将D7~D0写入到RAM 中。
图1 绘图RAM 与屏幕显示区域的对应关系
1.3 LM3033B-0BR3的操作指令
LM3033B-0BR3提供两套控制命令:基本指令集和扩充指令集。基本指令集包括了对液晶LM3033B-0BR3的基本操作,如判断控制器忙标志、清除显示、设定显示的地址、写数据和读数据等。而扩充指令集则包括设置睡眠模式,设置图形显示、设置反白、设置滚动等功钱,可以进一步满足低功耗的需求,使显示效果更丰富,为使用者提供更方便的环境。
单片机对LM3033B-0BR3的操作过程为:单片机先确认ST7920内部处于非“忙“状态。即读取BF位,当BF为0时,LM3033B-0BR3才可接收新的指令或数据。在操作时,LM3033B-0BR3在单片机的时钟信号的控制下,数据通过数据线传送给LM3033B-0BR3,当LM3033B-0BR3成功接收到数据后,转入内部时钟控制,封锁I/O口缓冲器,置”忙”标志。ST7920根据接收数据中的RW和RS位判断所接收到的是数据还是指令,并进行相应的处理。处理完成后,撤销I/O口缓冲器的封锁,“忙”标志清零。
2 单片机与LM3033B-0BR3的接口电路
一般液晶显示模块与单片机的接口分为直接访问方式和间接控制方式,间接控制方式还分为一位串行、4位并行以及8位并行。本文采用的AT89S52和液晶LM3033B-0BR3模块的接口电路如图2所示。由于LM3033B-0BR3采用并口通信,外接电路简单,与单片机连接采用间接连接的方法,即用I/O口直接与LCD数据线和控制线相连,其特点是简单、直观、操作方便。在此电路中,采用软件模拟液晶的时序,达到正确显示的目的。
管脚号 | 管脚名称 |
1 | VSS |
2 | VDD |
3 | NC |
4 | RS(CS) |
5 | R/W(SID) |
6 | E(SCLK) |
7-14 | DB0—7 |
15 | PSB |
16 | NC |
17 | RST |
18 | NC |
19 | BLA |
20 | BLK |
图2 AT89S52和液晶LM3033B-0BR3模块的接口电路及LM3033B-0BR3引脚功能
3 液晶显示C51程序设计
对LM3033B-0BR3的软件编程采用Medwin语言开发,主要包括两部分,一部分是给液晶写指令,另一部分是给液晶写数据。有了这2个基本的子程序,就可以构造出各种实用的显示子程序。由于液晶内部自带汉字模块,只需发送汉字对应的代码就可以实现汉字的显示,其代码可以在ST7920模块的资料中查找。对于图形和曲线显示的原理类似,只需要设置好相应的水平地址和垂直地址,并把相应的图形编码写入液晶模块,就可显示出所要显示的内容。
写命令到LCD:
- void WRCMD(uchar cmdcode)
- {
- chk_busy();
- RS=0;
- RW =0;
- E=1;
- lcd_bus=cmdcode;
- E=0;
- )
- 写数据到LCD:
- void WRData(uchar Dispdata)
- {
- chk_busy();
- RS=1;
- RW =0;
- E=1;
- lcd_bus=Dispdata;
- E=0;
- )
- 初始化程序:
- void Init()
- {
- RES=1;
- RES=0;
- delay(1);
- RES=1;
- delay(1);
- WRCMD(Ox30); //选择8位并行W
- RCMD(Ox30); //选择8位并行
- WRCMD(OxOc);//开显示(无游标、不反白)
- WRCMD(0x01);//清除显示
- WRCMD(Ox04); //shift=0,AC加1
在单片机与液晶的接口中,关键是要满足液晶的时序要求;在软件编程中,关键是要进行正确的初始化、操作及写入显示内容的代码。以上接口电路和相应的程序已经通过调试,并在实际中得到应用。由ST7920构成的LM3033B-0BR3液晶显示模块与同类型的图形点阵液晶显示模块相比,不论硬件电路结构或显示程序都要简洁得多。因此,LM3033B-0BR3液晶显示模块将得到广泛的应用。