LCD1602液晶屏

单片机系统用到的液晶屏(简称LCD)有很多类型,最常用的有两种,一种是1602型(即每行可显示16个字符,同时能显示2行),另一种是12864型(即每行可显示128个点,每列可显示64个点)。一般前一种称为字符型LCD,后一种称为点阵型LCD,字符型LCD只能显示ASCII码符号的字形(一般用5×7点阵来显示一个字符),而点阵型LCD除了字符(包括汉字)外还可以显示图形。

目前国内市场上,绝大多数LCD1602都是使用日立公司的HD44780控制芯片或与其兼容的芯片,所以操作方式基本上是一样的。LCD1602的引脚接口如下图所示。

LCD1602采用标准的16脚接口,具体定义如下:

第1脚:VSS为地电源。

第2脚:VDD接5V正电源。

第3脚:V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的可调电阻调整对比度。

第4脚:RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。

第5脚:RW为读写信号线,高电平时进行读操作,低电平时进行写操作。当RS和RW共同为低电平时可以写入指令或者显示地址,当RS为低电平RW为高电平时可以读忙信号,当RS为高电平RW为低电平时可以写入数据。

第6脚:E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行数据写入或读取命令。

第7~14脚:DB0~DB7为8位双向数据线。

第15~16脚:空脚或背光电源端接口。

LCD1602一屏可显示16X2个字符,其显示单元对应的地址如下图如示。

从上图中可看出,第一行地址从0x00开始,向右地址不段增加,第一行末尾地址为0x0F,一共16个单元。第二行地址从0x40开始,向右地址不段增加,第二行末尾地址为0x4F,一共也是16个单元。以上每一个单元对应一个显示字符,即对某地址写入ASCII码,就可在该地址对应的位置上显示出ASCII码所对应的字符。但要注意的是,以上仅是可以显示的DDRAM地址部分,其实DDRAM的地址每行有40个,即每行最多可写入40个字符,但显示的仅是前16个单元的字符,这可以用来实现一些特殊的效果,比如一行的字符不断向左(右)移动显示等等。整个DDRAM的地址如下图所示。

从上图中可见,第一行的末尾地址为0x27(十进制39),共计40个单元,但只有前16个单元(0x00~0x0F)能显示,第二行也一样。 

HD44780是LCD1602的控制芯片,下表给出了它的指令集。

从上表中可以看出,与LCD1602交换的数据可分为两类,一类是指令数据(如清屏、光标定位等),另一类是显示数据(要显示的内容)。所有数据都是通过双向数据口DB0~DB7进行交换的,同时通过RS端(即第4脚)来区分交换的是“指令”还是“显示内容”,把该端口置0就表示从数据口交换的是“指令”,置1则表示交换的是“显示内容”。其次,通过通过R/W端(即第5脚)来区分是读取还是写入(即确定数据方向),把该端口置0就表示写入数据方向,置1则表示读出数据方向。

在上表中,前8条为写入的指令(RS、R/W均为0),是依靠“1”所在的位置(权位)来进行区别的,即不同的权位就确定了不同的命令,下面就对其一一进行说明。

第1条(Clear display)为清屏指令,1所在的权位为最低位(0x01),没有参数,执行后屏幕清除显示,同时地址指针清零。

第2条(Return home)为光标复位指令,1所在的权位为第1位(0x02),没有参数(DB0可为任意值),执行后地址指针清零,光标复位,但显示内容不变。

第3条(Entry mode set)为进入模式设定,1所在的权位为第2位(0x04),有2个参数(I/D、S),其中I/D为地址指针(AC)增减选择,I/D为0时减少,为1时增加;S为光标或屏幕显示选择,S为0时选择光标(屏幕显示不动),为1时选择屏幕画面(光标不动)。当S为0时,在写入显示字符后光标向左(AC减小)还是向右(AC增加)移动,由I/D来决定;当S为1时,在写入字符后屏幕画面是整体向左(AC增加)还是向右(AC减小)移动,也由I/D来决定。一般该条指令在LCD1602初始化时执行。

第4条(Display on/off control)为屏幕显示控制,1所在的权位为第3位(0x08),有3个参数(D、C、B),其中D为整体显示的开关控制,为0时不显示,为1时显示;C为光标显示开关控制,为0时不显示光标,为1时显示光标;B为闪烁开关控制,为0时不闪烁,为1时闪烁。执行该指令配合其参数的不同,会呈现出不同的显示效果。

第5条(Cursor or display shift)为光标移动或屏幕画面滚动控制,1所在的权位为第4位(0x10),有2个参数(S/C、R/L),最低两位(DB1、DB0)可为任意值,参数中S/C为屏幕画面或光标选择,为0时选择光标移动,为1时选择屏幕画面滚动;R/L为左或右选择,为0时选择左,为1时选择右。执行该条指令是为了在某种情况下(比如按下按键),是光标左右移动还是屏幕画面整体左右滚动。

第6条(Function set)为功能设定,1所在的权位为第5位(0x20),有3个参数(DL、N、F),最低两位(DB1、DB0)可为任意值,参数中DL为数据位宽选择,DL为0时选择4位模式,为1时选择8位模式;N为显示行数选择,为0时只显示一行,为1时可显示两行;F为字符大小选择,为0时选择小字符,为1时选择大字符。该条指令是为了设置一些特定的功能,一般也会把该条指令放置在LCD1602初始化时执行,如果没有特殊需求,一般都会设置为8位数据模式、双行显示,小字符。特别对于字符大小的设置,一般国内市场上的LCD1602屏都不支持大字符,所以设置了也没用。

第7条(Set CGRAM address)为设置CGRAM(字符发生器)的地址,1所在的权位为第6位(0x40),其后面的6位(AGC5~AGC0)为欲设置的地址值。

第8条(Set DDRAM address)为设置DDRAM(数据存储器)的地址,1所在的权位为第7位(0x80),其后面的7位(ADD6~ADD0)为欲设置的地址值,该值决定了地址指针AC的值。

第9条指令为读取指令(RS为0、R/W为1),用于获取忙标志和AC地址,读出的值中,其最高位(BF)用于忙标志判定,1表示LCD忙,0表示空闲,后面7位(AC6~AC0)为当前光标所在的地址值。

第10条指令为写数据(RS为1、R/W为0),用于向LCD写入要显示的ASCII码字符数据,写时需要判忙,不忙时才能写入,若数据位宽被设置为4位模式,则需要写两次(先写高4位)。

第11条指令为读取数据(RS、R/W均为1),用于获取某地址单元的内容。

最后还要确定什么时候进行写(或读)的操作,HD44780芯片规定,当E端(即第6脚)有一个下降沿的跳变时,LCD1602就把数据口上的数据写入到内部的寄存器中(或把寄存器中的数据放到数据线上来),其写操作的时序如下图所示。

读操作的时序如下图所示。

了解了以上方法之后,就可以很好地通过单片机来操控LCD1602显示屏了,但根据HD44780芯片规定,在使用之前需要先对其进行初始化操作,下图给出了8位模式下的初始化过程。

有了以上这些信息,接下来就可以通过程序设计来实现相应显示的功能了。

posted @ 2022-05-01 22:57  fxzq  阅读(3170)  评论(0编辑  收藏  举报