LCD驱动讲解,超详细,单片机新

北京治疗白癜风哪家医院不错 https://jbk.39.net/yiyuanfengcai/yyjs_bjzkbdfyy/
接口

LCD是不少单片机嗜好者较早来往的字符型液晶显示器,它的主控芯片是HD可能此外兼容芯片。刚最先来往它的大多是单片机的入门者。由于对它的不理解,不能为所欲为地对它施行启动。经历一段光阴的研习,我对它的启动有了一点点心得,当日把它纪录在这边,以备之后查阅。

与此相仿的是LCD液晶显示器,它是一种图形点阵显示器,能显示的实质比LCD要丰硕不少,除了普遍字符外,还也许显示点阵图案,带有汉字库的还也许显示汉字,它的并行启动方法与LCD出入无几,以是,在这边花点光阴是值得的。

个别来讲,LCD有16条引足,听说尚有14条引足的,与16足的比拟缺乏了背光电源A(15足)和地线K(16足)。我手里这块LCD的型号是HJA,它有16条引足,如图1所示:

图1

再来一张它的后背的,如图2所示:

图2

它的16条引足界说以下:

表:引足注明

对表格的注明:

(1)VSS接电源地。

(2)VDD接+5V。

(3)VO是液晶显示的偏压记号,可接10K的周详电位器,或相同阻值的RM/RM蓝白可调电阻。见图3。

图3

(4)RS是夂箢/数据筛选引足,接单片机的一个I/O,当RS为低电通常,筛选夂箢;当RS为高电通常,筛选数据。

(5)RW是读/写筛选引足,接单片机的一个I/O,当RW为低电通常,向LCD写入夂箢或数据;当RW为高电通常,从LCD读取形态或数据。倘若不需求施行读取操纵,也许直接将其接VSS。

(6)E,实行夂箢的使能引足,接单片机的一个I/O。

(7)D0—D7,并行数据输入/输出引足,可接单片机的P0—P3搪塞的8个I/O口。倘若接P0口,P0口理当接4.7K—10K的上拉电阻。倘若是4线并行启动,只要接4个I/O口。

(8)A背光正极,可接一个10—47欧的限流电阻到VDD。

(9)K背光负极,接VSS。见图4所示。

图4

根底操纵

LCD的根底操纵分为四种:

读形态。输入RS=0,RW=1,E=高脉冲。输出:D0—D7为形态字。

读数据。输入RS=1,RW=1,E=高脉冲。输出:D0—D7为数据。

写夂箢。输入RS=0,RW=0,E=高脉冲。输出:无。

写数据。输入RS=1,RW=0,E=高脉冲。输出:无。

读操纵时序图,如图5所示:

图5

写操纵时序图,如图6所示:

图6

时序光阴参数,如图7所示:

图7

DDRAM、CGROM、CGRAM

DDRAM(DisplayDataRAM)即是显示数据RAM,用来存放待显示的字符代码。共80个字节,其地方和屏幕的对应干系以下(如图8):

图8

DDRAM相当于策画机的显存,咱们为了在屏幕上显示字符,就把字符代码送入显存,如许该字符就也许显示在屏幕上了。相同LCD公有80个字节的显存,即DDRAM。但LCD的显示屏幕惟有16×2巨细,是以,并不是统统写入DDRAM的字符代码都能在屏幕上显示出来,惟有写在上图所示领域内的字符才也许显示出来,写在领域外的字符不能显示出来。如许,咱们在程序中也许操纵底下的“光标或显示挪移指令”使字符缓缓挪移到看来的显示领域内,看到字符的挪移成就。

前方说了,为了在液晶屏幕上显示字符,就把字符代码送入DDRAM。比方,倘若想在屏幕左上角显示字符‘A’,那末就把字符‘A’的字符代码41H写入DDRAM的00H地方处便可。至于何如写入,背面会有注明。

那末为甚么把字符代码写入DDRAM,就也许在响应地位显示这个代码的字符呢?咱们领会,LCD是一种字符点阵显示器,为了显示一种字符的字形,务必要有这个字符的字模数据,甚么叫字符的字模数据,看看底下的这个图就明晰了(如图9)。

图9

上图的左侧即是字符‘A’的字模数据,右侧即是将左侧数据用“○”代表0,用“■”代表1。进而显示出‘A’这个字形。从图12也许看出,字符‘A’的高4位是,低4位是,合在一同即是b,即41H。它刚巧与该字符的ASCII码一致,如许就给了咱们很大的便利,咱们也许在PC上行使P2=‘A’如许的语法。编译后,刚巧是这个字符的字符代码。

在LCD模块上固化了字模储备器,即是CGROM和CGRAM,HD内置了个罕用字符的字模,存于字符形成器CGROM(CharacterGeneratorROM)中,此外尚有8个理睬用户自界说的字符形成RAM,称为CGRAM(CharacterGeneratorRAM)。图12注剖判CGROM和CGRAM与字符的对应干系。

从ROM和RAM的名字咱们也也许领会,ROM是早已固化在LCD模块中的,只可读取;而RAM是可读写的。也即是说,倘若只要要在屏幕上显示已存在于CGROM中的字符,那末只要在DDRAM中写入它的字符代码就也许了;但倘若要显示CGROM中没有的字符,比方摄氏温方向标志,那末就惟有先在CGRAM中界说,尔后再在DDRAM中写入这个自界说字符的字符代码便可。和CGROM中固化的字符不同,CGRAM中自己没有字符,以是要在DDRAM中写入某个CGROM不存在的字符,务必在CGRAM中先界说后行使。程序退出后CGRAM中界说的字符也不复存在,下次使历时,务必从新界说。

图10

图10注明的是5×8点阵和5×10点阵字符的字形和光方向地位。先来讲5×8点阵,它有8行5列。那末界说如许一个字符需求8个字节,每个字节的前3个位没有被行使。比方,界说摄氏温方向标志{0x10,0x06,0x09,0x08,0x08,0x09,0x06,0x00}。

图11

图11注明的是配置CGRAM地方指令。从这个指令的格式中咱们也许看出,它公有aaaaaa这6位,全豹也许示意64个地方,即64个字节。一个5×8点阵字符共占用8个字节,那末这64个字节全豹也许自界说8个字符。

也即是说,图11的6位地方中的DB5DB4DB3用来示意8个自界说的字符,DB2DB1DB0用来示意每个字符的8个字节。这DB5DB4DB3所示意的8个自界说字符(0--7)即是要写入DDRAM中的字符代码。咱们领会,在CGRAM中只可界说8个自界说字符,也即是惟有0—7这8个字符代码,但鄙人面的这个表(如图12)中一公有16个字符代码(××××b--××××b)。

实践上,如图11所示,它只可示意8个自界说字符(××××b=××××b,××××b=××××b……顺序类推)。也即是说,写入DDRAM中的字符代码0和字符代码8是统一个自界说字符。5×10点阵每个字符共占用16个字节的空间,以是CGRAM中只可界说4个如许的自界说字符。

那末如安在CGRAM中自界说字符呢?在上头的先容中,咱们领会有一个配置CGRAM地方指令,同写DDRAM指令彷佛,只要配置好某个自界说字符的字模数据,尔后根据上头先容的法子,配置好CGRAM地方,顺序写入这个字模数据便可。咱们在背面的例子中再施行注明。

图12

LCD指令

1、办事方法配置指令(图13)

图13

×:不关怀,也即是说这个位是0或1均也许,个别取0。

DL:配置数据接口位数。

DL=1:8位数据接口(D7—D0)。

DL=0:4位数据接口(D7—D4)。

N=0:一行显示。

N=1:两行显示。

F=0:5×8点阵字符。

F=1:5×10点阵字符。

由于是写指令字,以是RS和RW都是0。LCD只可用并行方法启动,不能用串行方法启动。而并行方法又也许筛选8位数据接口或4位数据接口。这边咱们筛选8位数据接口(D7—D0)。咱们的配置是8位数据接口,两行显示,5×8点阵,即0b0011也即是0x38。(重视:NF是10或11的成即是相同的,都是两行5×8点阵。由于它不能以两行5×10点阵方法施行显示,换句话说,这边用0x38或0x3c是相同的)。

2、显示开关掌握指令(图14)

图14

D=1:显示开,D=0:显示关。

C=1:光标显示,C=0:光标不显示。

B=1:光标闪耀,B=0:光标不闪耀。

这边的配置是显示开,不显示光标,光标不闪耀,配置字为0x0c。

3、加入形式配置指令(图15、16)

图15

I/D=1:写入新数据后光标右移。

I/D=0:写入新数据后光标左移。

S=1:显示挪移。

S=0:显示不挪移。

图16

这边的配置是0x06。

4、光标或显示挪移指令(图17、18)

图17

图18

在需求施行整屏挪移时,这个指令特别有效,也许完成屏幕的震动显示成就。初始化时不行使这个指令。

5、清屏指令(图19)

图19

革除屏幕显示实质。光标返回屏幕左上角。实行这个指令时需求一守光阴。

6、光标归位指令(图20)

图20

光标返回屏幕左上角,它不改观屏幕显示实质。

7、配置CGRAM地方指令(图21)

图21

这个指令在上头曾经先容过。用法在背面例子中注明。

8、配置DDRAM地方指令(图22)

图22

这个指令用于配置DDRAM地方。在对DDRAM施行读写以前,首先要配置DDRAM地方,尔后才华施行读写。前方咱们说过,DDRAM即是LCD的显示储备器。咱们要在它上头施行显示,就要把要显示的字符写入DDRAM。相同,咱们想领会DDRAM某个地方上有甚么字符,也要先配置DDRAM地方,尔后将它读出到单片机。

9、读忙记号和地方计数器AC(图23)

图23

这个指令用来读取LCD形态。关于单片机来讲,LCD属于慢速配置。当单片机向其发送一个指令后,它将去实行这个指令。这时倘若单片机再次发送下一条指令,由于LCD速率较慢,前一条指令还未实行了却,它将不承受这新的指令,致使新的指令丧失。是以这条读忙指令也许用来决断LCD是不是忙,可否接纳单片机发来的指令。

当BF=1,示意LCD正忙,不能承受单片机的指令;当BF=0,示意LCD余暇,也许接纳单片机的指令。RS=0,示意是指令;RW=1,示意是读取。

这条指令尚有一个副产物:即也许获得地方记数器AC的值(addresscounter)。LCD维持了一个地方计数器AC,用来纪录下一次读写CGRAM或DDRAM的地位。

需求强调的是:这条指令我一次也没有实行胜利。不少网友彷佛也是如许。幸而咱们有此外的法子,也即是延时。经历观察每条指令的实行光阴,再经历一些实验,也许肯定指令的延时。如许就也许在上一条指令实行了却后再实行下一条指令了。

10、写数据到CGRAM或DDRAM指令(图24)

图24

RS=1,数据;RW=0,写。指令实行时,要在DB7—DB0上先配置好要写入的数据,尔后实行写夂箢。

11、从CGRAM或DDRAM读数据指令(图25)

图25

RS=1,数据;RW=1,读。先配置好CGRAM或DDRAM的地方,尔后实行读取夂箢。数据就被读入后DB7—DB0。

实例

底下咱们就以一个实例来收场这篇文章。

先先容一下后台:

单片机最小系统(扩展了外部RAM)。

采纳STC89C52RC,晶振22.MHZ。

以5×8点阵,16×2行,8位数据端口。

首先在第一行显示“IloveMCU!”,第二行显示“LCDTest!”。延时一段光阴,清屏。

尔后在第一行显示自界说字符:摄氏温标标识。第二行显示圆周率(pai)标识。再延时一段光阴,清屏。

结尾在第一行显示“Wel

转载请注明:http://www.abuoumao.com/hyls/1069.html

网站简介| 发布优势| 服务条款| 隐私保护| 广告合作| 网站地图| 版权申明

当前时间: 冀ICP备19029570号-7