首页 理论教育1602寸液晶显示器:高清成果单片机原理与应用

1602寸液晶显示器:高清成果单片机原理与应用

【摘要】:1602液晶显示器的显示数据RAM称为DDRAM,分为两行且地址是不连续的。

液晶显示器的原理与观看的立体电影有相似之处。当观看立体电影时,需要佩戴具有偏振功能的眼镜,眼镜的左右眼分别贴有两片偏振片,其偏振角度相差90°,这样在观看电影时左右眼就能分别看到由两台电影机投射的图像。液晶显示器也是利用光的偏振原理显示信息的,在两个偏光板之间注入液态晶体并安放电极,就构成了最基本的液晶显示器。其结构如图8-15所示。

图8-15 液晶显示器的结构

图8-15中上下两个偏光板的偏振角相差90°,置于其间的液晶分子可以被光穿透,并能影响光的偏振性。当液晶分子没有施加电压时,光线不能通过两块偏光板,而在液晶分子施加电压后晶体的排列会发生翻转,将光线的偏振角度扭转90°,光线就可以从两块偏光板间通过,这样信息就会显示出来。

8.3.1 1602液晶显示器的特点

1602液晶显示器是字符型液晶显示器,它因为能显示2排,每排16个西文字符而得名,是目前应用最为广泛的模块化液晶显示产品。1602液晶最初采用的控制芯片是HD44780,之后各厂家生产的1602液晶模块基本上也都采用了与HD44780兼容的控制IC,所以市场上出售的1602液晶显示器的结构和功能都基本相同,驱动程序也互相兼容,不同品牌和型号的1602液晶显示器只是在供电电压、字符颜色和背光等辅助功能上有些区别。常用的1602液晶显示器的外观如图8-16所示。

图8-16 1602字符型液晶显示器

8.3.2 1602液晶显示器的引脚功能

1602液晶显示器总计有16个引脚,其功能见表8-3。

表8-3 1602液晶显示器的引脚功能

1602液晶显示器与8051系列单片机接口电路如图8-17所示。单片机通过一组I/O口与1602液晶的数据端D0~D7端相连,另外三个I/O口分别与1602液晶的RS、R/W和E端相连。VL端为液晶显示偏压信号输入端,通过一个10 kΩ电位器调整电压以改变液晶屏的对比度,BLA、BLK是液晶屏的背光电源端。

图8-17 1602液晶显示器的驱动原理

8.3.3 1602液晶显示器的显示数据RAM

1602液晶显示器内部带了 80个字节的显示 RAM,用来存储发送的数据,其结构如图8-18所示。1602液晶显示器的显示数据RAM称为DDRAM,分为两行且地址是不连续的。

图8-18 DDRAM地址和显示的对应关系

第一行的地址是0x00H到0x27,第二行的地址从0x40到0x67,其中第一行0x00到0x0F是与液晶上第一行16个字符显示位置相对应的,第二行0x40到0x4F 是与第二行16个字符显示位置相对应的。而每行都多出来一部分,是为了显示移动字幕设置的。1602字符型液晶显示器是显示字符的,因此它与ASCII字符表是对应的。比如我们给0x00地址写一个“a”,也就是十进制的97,液晶的最左上方的那个小块就会显示一个字母a。

8.3.4 1602液晶显示器的字符发生器

1602液晶显示器的控制器内部有两种类型的字符发生器,一种是CGROM,其内部已经固化有字模库;另一种是CGRAM,用于保存用户自定义的图形。

1.CGROM

CGROM中内置了192个常用字符的字模,包含有阿拉伯数字、英文字母的大小写、常用的符号和日文假名等,每一个字符都有一个固定的代码。CGROM中存储的字符和代码如图8-19所示。

表格的第一行列出了字符代码的高四位,第一列列出了字符代码的低四位,二者组合在一起就是一个完整的字符代码,用于对该字符的寻址。在1602的CGROM中,字符代码20H~7FH为标准的ASCII码,A0H~FFH为日文字符和希腊文字符,其余字符代码10H~1FH及80H~9FH没有定义。

从图8-19中可以看出,大写的英文字母“A”的代码高四位是“0100”,低四位是“0001”,组合在一起则是01000001B,即十六进制的41H。如果要在屏幕上显示字母“A”时,只需把“A”的字符代码41H发送至1602液晶模块,模块会自动把地址41H中的字符点阵数据取出并在屏幕上显示出来。

图8-19 1602液晶显示器的CGROM

2.CGRAM

1602液晶显示器提供了64字节的CGRAM,用于保存自定义的点阵图形,存储地址为00H~3FH。CGRAM 64字节的存储空间每8个为一组,总计可以存储8个5×8点阵的自定义图形。1602液晶显示器每行仅使用5位数据作为字符点阵,所以作为CGRAM字模库仅使用存储单元字节的低5位,而高3位虽然存在但并不作为字模数据使用。

在1602液晶显示器的字符发生器列表中,CGRAM与CGROM统一编址,字符代码00H~07H就是用户自定义的这8组字模库的访问代码,另外8个字符访问代码08H~0FH没有使用。自定义字符代码和CGRAM存储地址的对应关系见表8-4。

表8-4 自定义字符代码和CGRAM存储地址的对应关系

8.3.5 1602液晶显示器的工作时序

1.读操作

读操作的时序如图8-20所示。对1602液晶显示器的读操作分为读状态字和读数据两种,其引脚的逻辑关系如下:

图8-20 1602液晶显示器的读操作时序

(1)读状态字操作:RS=0,R/W=1,E=1。当E端由高电平向低电平跳变(下降沿)时,状态字会从液晶的数据总线上被读出。

(2)读数据操作:RS=1,R/W=1,E=1。当E端由高电平向低电平跳变(下降沿)时,数据会从液晶的数据总线上被读出。

2.写操作

写操作的时序如图8-21所示。对1602液晶显示器的写操作分为写指令和写数据两种,其引脚的逻辑关系如下:

图8-21 1602液晶显示器的写操作时序

(1)写指令操作:RS=0,R/W=0,E=1。当E端由高电平向低电平跳变(下降沿)时,指令会写入液晶显示模块。

(2)写数据操作:RS=1,R/W=0,E=1。当E端由高电平向低电平跳变(下降沿)时,数据会写入液晶显示模块。

8.3.6 1602液晶显示器的操作指令

对1602液晶显示器的操作是通过一系列的指令来完成的,这些指令主要有以下9个:

(1)读取状态字指令:该指令也称为检测忙信号命令,使用此命令可以读回1602液晶显示器自身的状态。

① BF:读/写允许位。置1时表示液晶显示器忙,暂时无法接收单片机送来的数据或指令;清0时表示液晶显示器可以接收单片机发送来的数据或指令。

② AC6~AC0:读取地址计数器AC的内容。

(2)工作方式设置指令:该指令用于设定液晶显示器的工作状态。

工作方式设置指令:

① DL:设置液晶显示器与MCU的接口形式。该位置1时设定数据总线宽度为8位,即DB7~DB0有效,该位清0时数据总线宽度为4位,即DB7~DB4有效。

② N:设置显示字符的行数。该位置1时为两行字符,清0时为一行字符。

③ F:设置显示字符的字体。该位置1时为5×11点阵字符体,清0时为5×7点阵字符体。

(3)显示状态设置指令:该指令控制着画面、光标和闪烁的开与关。(www.chuimin.cn)

① D:画面显示状态位。该位置1时显示功能开启,清0时显示功能关闭。该指令仅影响显示屏的开关,并不影响显存中的数据。

② C:光标显示状态位。该位置1时显示光标,清0时不显示光标。

③ B:闪烁显示状态位。该位置1时光标闪烁,清0时光标不闪烁。

(4)输入方式设置指令:该指令用于设定每次输入1位数据后光标的移位方向,并且设定每次写入的1个字符是否移动。

① I/D:光标移动设定位。该位置1时写入新数据后光标右移,清0时写入新数据后光标左移。

② S:字符移动设定位。该位置1时写入新数据后显示屏整体右移1个字符,清0时写入新数据后显示屏不移动。

(5)清屏指令:该指令用于清除液晶显示器屏幕信息。

该指令的功能为清除屏幕信息,即将DDRAM的内容全部填入“空白”的ASCII码20H,将光标置为液晶显示屏的左上方,并将地址计数器AC的值清0。

(6)光标归位指令:将光标置于显示屏左上方。

该指令用于把光标移至显示屏的左上方,把地址计数器AC的值清0并保持DDRAM的内容不变。

(7)DDRAM地址设置指令:该指令用于设置DDRAM的访问地址。

该指令将7位的DDRAM地址写入地址指针计数器AC中,随后的读或写操作则是针对DDRAM中上述地址的读或写操作。

(8)光标或画面滚动设置指令:该指令设置光标和画面的特性。

① S/C:滚动对象的选择位。该位置1时画面滚动,清0时光标滚动。

② R/L:滚动方向的选择位。该位置1时向右滚动,清0时向左滚动。

画面滚动是将DDRAM每一行40个显示单元的第一个单元和最后一个单元连接起来,形成闭环式的滚动,其效果是将屏幕上两行显示内容同时向左或向右移动。光标滚动则是在整个DDRAM范围内,将AC指针计数器的值加1或减1,其效果是最初写入的字符不动,后续字符依次向左或向右写入。本条指令在执行后画面即开始变化,每执行一次画面就变化一次。

(9)CGRAM地址设置指令:该指令用于设置CGRAM的访问地址。

该指令用于将6位的CGRAM地址写入地址指针计数器AC内,随后的读或写操作则是针对CGRAM的读或写操作。

编程向导:初始化1602液晶显示器。

对1602液晶显示器的初始化,主要是完成对其基本功能的设置。为了简化操作,在实际使用时往往只向1602液晶显示器中写入命令或数据,而不检测忙信号,对1602液晶显示器的初始化操作可以参考以下步骤:

(1)写入指令38H,将1602液晶显示器设置为8位数据线、2行字符显示、5×7点阵。

(2)写入指令0x0F,将1602液晶显示器设置为显示功能开、有光标且光标闪烁。

(3)写入指令0x06,将1602液晶显示器设置为写入新数据后光标右移、显示屏不移动。

(4)写入指令0x01,清除液晶屏幕信息,将光标撤回液晶显示屏的左上方并且将地址计数器AC的值清零。

这里需要说明的是:上述前三条指令的执行速度都很快,大约在40 µs的时间内就可以完成,只有最后一条清屏指令用时较长,大约需要1.64 ms的时间,因此在使用这条指令时,要考虑加入适当的延时。

8.3.7 1602液晶显示器的编程应用

在Proteus中绘制好液晶显示的电路图,可参考图8-17所示的连接方法,在实际实验箱连接时要根据实验箱的实际电路进行连接,重点要明白电源线、控制线、数据线的连接。

【实训8.3】通用字符显示。将CGROM中内置的192个常用字符显示出来,并按照预先设计的方式产生移动等特殊效果,具体程序见代码清单。

程序运行后液晶屏上会有两行文字显示,显示的内容会以半秒钟的时间间隔向屏幕的左侧移动,具体状态如图8-22所示。如果此时液晶屏显示模糊,可以用调整RP1的电位器,直至液晶屏显示清晰为止。

图8-22 1602液晶显示器通用字符显示

【实训8.4】自定义字符显示。在1602液晶显示器上显示一个心形自定义字符,在初始化1602液晶显示器时关闭闪烁的光标。

1.定义心形字模

CGRAM可以存储用户自定义的字符信息,它本身是一个动态存储器,存入其中的字符在液晶屏掉电后会消失,所以程序在每次执行时需要先将字模数据调入,再通过固定的代码调用并显示出来。例如,我们要自定义一个心形字模,存储在0x00~0x07这组CGRAM里面,需要准备的数据如图8-23所示。

图8-23 心形字模

在向CGRAM中写入字模数据时,需要使用CGRAM地址设置指令,该指令的高2位已固定为“01”,只有后面的6位是地址数据。这样一个自定义字符的字模地址就表示为“01000000~01000111”8个,使用时先用地址设置指令将CGRAM地址写入地址指针计数器AC内,随后再用写数据指令将字模数据依次写入这8个存储单元中,即可将心形字模保存至CGRAM。

2.调用自定义字模

自定义字模调用时只需将与其地址对应的字符代码写入DDRAM中,即可在液晶屏上显示出该字符,CGRAM中的8个自定义字符代码如图8-24所示。

图8-24 CGRAM字符代码

以下程序代码用于在1602液晶显示器上显示一个心形自定义字符,在初始化1602液晶显示器时关闭闪烁的光标,具体程序见代码清单。

以上程序执行后,一个心形字符会在1602液晶屏幕的第一行第一个字符的位置上显示出来,具体状态如图8-25所示。

图8-25 1602液晶显示器自定义字符显示