我们已经知道,点阵字符型LCD是专门用于显示数字、字母、图形符号及少量自定义符号的液晶显示器。这类显示器把LCD控制器、点阵驱动器、字符存储器、显示体及少量的阻容元件等集成为一个液晶显示模块。鉴于字符型液晶显示模块目前在国际上已经规范化,其电特性及接口特性是统一的,因此,只要设计出一种型号的接口电路,在指令上稍加修改即可使用各种规格的字符型液晶显示模块。
点阵字符型液晶显示模块的控制器大多数为日立公司生产的HD44780及其兼容的控制电路,如SED1278(SEIKO EPSON)、KS0066(SAMSUNG)、NJU6408(NER JAPAN RADIO)等。本节介绍HD44780的接口知识。
9.3.1 点阵字符型液晶显示模块的基本特点
字符型液晶显示模块的主要特点如下:
①液晶显示屏是以若干5×8或5×11点阵块组成的显示字符群。每个点阵块为一个字符位,字符间距和行距都为一个点的宽度。
②主控制电路为HD44780(HITACHI)及其它公司的兼容电路。从程序员角度来说,LCD的显示接口与编程是面向HD44780的,只要了解HD44780的编程结构即可进行LCD的显示编程。
③内部具有字符发生器ROM(CG ROM—Character-Generator ROM),可显示192种字符(160个5×7点阵字符和32个5×10点阵字符)。
④具有64字节的自定义字符RAM(CG RAM—Character-Generator RAM),可以定义8个5×8点阵字符或4个5×11点阵字符。
⑤具有64字节的数据显示RAM(DD RAM—Data-Display RAM),供显示编程时使用。
⑥标准接口特性,与H68HC08系列MCU容易接口。
⑦模块结构紧凑、轻巧、装配容易。
⑧单+5V电源供电(宽温型需要加-7V驱动电源)。
⑨低功耗、高可靠性。
9.3.2 HD44780的引脚与时序
(1) HD44780的引脚信号
HD44780的外部接口信号一般有14条,有的型号显示器使用16条,其中与MCU的接口有8条数据线、3条控制线。见表9-3。


2) HD44780的时序信号
图9-5给出了HD44780的写操作时序,图9-6给出了HD44780的读操作时序。

9.3.3 HD44780的编程结构
从编程角度看,HD44780内部主要由指令寄存器(IR)、数据寄存器(DR)、忙标志(BF)、地址计数器(AC)、显示数据寄存器(DD RAM)、字符发生器ROM(CG ROM)、字符发生器RAM(CG RAM)及时序发生电路构成。
(1) 指令寄存器(IR)
IR用于MCU向HD44780写入指令码。IR只能写入,不能读出。当RS=0、R/ =0时,数据线DB7~DB0上的数据写入指令寄存器IR。

(2) 数据寄存器(DR)
DR用于寄存数据。当RS=1、R/ =0时,数据线DB7~DB0上的数据写入数据寄存器DR,同时DR的数据由内部操作自动写入DD RAM或CG RAM。当RS=1、R/ =1时,内部操作将DD RAM或CG RAM送到DR中,通过DR送到数据总线DB7~DB0上。
(3) 忙标志(BF)
令RS=0、R/ =1,在E信号高电平的作用下,BF输出到总线的DB7上,MCU可以读出判别。BF=1,表示组件正在进行内部操作,不能接受外部指令或数据。
(4) 地址计数器(AC)
AC作为DD RAM或CG RAM的地址指针。如果地址码随指令写入IR,则IR的地址码部分自动装入地址计数器AC之中,同时选择了相应的DD RAM或CG RAM单元。
AC具有自动加1或自动减1功能。当数据从DR送到DD RAM(或CG RAM),AC自动加1。当数据从DD RAM(或CG RAM)送到DR,AC自动减1。当RS=0、R/ =1时,在E信号高电平的作用下,AC所指向的内容送到DB7~DB0。
(5) 显示数据寄存器(DD RAM)
DD RAM用于存储显示数据,共有80个字符码。对于不同的显示行数及每行字符个数,所使用的地址不同,例如:
①8×1(8个字符,1行)
字符位置 1 2 3 4 5 6 7 8
地 址 00 01 02 03 04 05 06 07
②16×1(16个字符,1行)
字符位置 1 2 ...... 8 9 10 ...... 16
地 址 00 01 ...... 07 40 41 ...... 47
③16×2(每行16个字符,共2行)
字符位置 1 2 ...... 8 9 10 ...... 16
第一行地址 00 01 ...... 07 08 09 ...... 0F
第二行地址 40 41 ...... 47 48 49 ...... 4F
④16×4(每行16个字符,共4行)
字符位置 1 2 ...... 8 9 10 ...... 16
第一行地址 00 01 ...... 07 08 09 ...... 0F
第二行地址 40 41 ...... 47 48 49 ...... 4F
第三行地址 10 11 ...... 17 18 19 ...... 1F
第四行地址 50 51 ...... 57 58 59 ...... 5F
具体的对应关系,可参阅使用说明书。
(6) 字符发生器ROM(CG ROM)
CG ROM由8位字符码生成5×7点阵字符160种和5×10点阵字符32种,见图9-7。图中给出了8位字符编码与字符的对应关系,可以直接使用。其中大部分与ASCII码兼容。
(7) 字符发生器RAM(CG RAM)
CG RAM是提供给用户自定义特殊字符用的,它的容量仅为64字节,编址为00~3FH。作为字符字模使用的仅是一个字节中的低5位,每个字节的高3位留给用户作为数据存储器使用。如果用户自定义字符由5×7点阵构成,可定义8个字符。
9.3.4 HD44780的指令集
(1) 清屏(Clear Display)
RS、R/ =00,DATA=0000 0001。清屏指令使DD RAM的内容全部被清除,屏幕光标回原位,地址计数器AC=0。运行时间(250KHz):1.64ms。
(2) 归位(Return Home)
RS、R/ =00,DATA=0000 001*,“*”表示任意,下同。归位指令使光标和光标所在位的字符回原点(屏幕的左上角)。但DD RAM单元内容不变。地址计数器AC=0。运行时间(250KHz):1.64ms。

(3) 输入方式设置(Entry Mode Set)
RS、R/ =00,DATA=0000 01AS。该指令设置光标、画面的移动方式。下面解释A、S位的含义。A=1:数据读写操作后,AC自动增1;A=0:数据读写操作后,AC自动减1。S=1:当数据写入DD RAM显示将全部左移(A=1)或全部右移(A=0),此时光标看上去未动,仅仅是显示内容移动,但从DD RAM中读取数据时,显示不移动;S=0:显示不移动,光标左移(A=1)或右移(A=0)。
(4) 显示开关控制(Display ON/OFF Control)
RS、R/ =00,DATA=0000 1DCB。该指令设置显示、光标及闪烁开、关。D:显示控制,D=1,开显示(Display ON);D=0,关显示(Display OFF)。C:光标控制,C=1,开光标显示;C=0,关光标显示。B:闪烁控制,B=1,光标所指的字符同光标一起以0.4s交变闪烁;B=0,不闪烁。运行时间(250KHz):40µs。
(5) 光标或画面移位(Cursor or Display Shift)
RS、R/ =00,DATA=0001 S/C R/L * *。该指令使光标或画面在没有对DD RAM进行读写操作时被左移或右移,不影响DD RAM。S/C=0、R/L=0,光标左移一个字符位,AC自动减1;S/C=0、R/L=1,光标右移一个字符位,AC自动加1;S/C=1、R/L=0,光标和画面一起左移一个字符位;S/C=1、R/L=1,光标和画面一起右移一个字符位。运行时间(250KHz):40µs。
(6) 功能设置(Function Set)
RS、R/ =00,DATA=001 DL N F * *。该指令为工作方式设置命令(初始化命令)。对HD44780初始化时,需要设置数据接口位数(4位或8位)、显示行数、点阵模式(5×7或5×10)。DL:设置数据接口位数,DL=1,8位数据总线DB7~DB0;DL=0,4位数据总线DB7~DB4,而DB3~DB0不用,在此方式下数据操作需两次完成。N:设置显示行数,N=1,2行显示;N=0,1行显示。F:设置点阵模式,F=0,5×7点阵;F=1,5×10点阵。运行时间(250KHz):40µs。
(7) CG RAM地址设置(CG RAM Address Set)
RS、R/ =00,DATA=01 A5 A4 A3 A2 A1 A0。该指令设置CG RAM地址指针。A5~A0=00 0000~11 1111。地址码A5~A0被送入AC中,在此后,就可以将用户自定义的显示字符数据写入CG RAM或从CG RAM中读出。运行时间(250KHz):40µs。
(8) DD RAM地址设置(DD RAM Address Set)
RS、R/ =00,DATA=1 A6 A5 A4 A3 A2 A1 A0。该指令设置DD RAM地址指针。若是一行显示,地址码A6~A0=00~4FH有效;若是二行显示,首行址码A6~A0=00~27H有效,次行址码A6~A0=40~67H有效。在此后,就可以将显示字符码写入DD RAM或从DD RAM中读出。运行时间(250KHz):40µs。
(9) 读忙标志BF和AC值(Read Busy Flag and Address Count)
RS、R/ =01,DATA=BF AC6 AC5 AC4 AC3 AC3 AC1 AC0。该指令读取BF及AC。BF为内部操作忙标志,BF=1,忙;BF=0,不忙。AC6~AC0为地址计数器AC的值。当BF=0时,送到DB6~DB0的数据(AC6~AC0)有效。
(10) 写数据到DDRAM或CGRAM(Write Data to DDRAM or CG RAM)
RS、R/ =10,DATA=实际数据。该指令根据最近设置的地址,将数据写入DD RAM或CG RAM中。实际上,数据被直接写入DR,再由内部操作写入地址指针所指的DD RAM或CG RAM。运行时间(250KHz):40µs。
(11) 读DDRAM或CGRAM数据(Read Data from DDRAM or CGRAM)
RS、R/ =11,DATA=实际数据。该指令根据最近设置的地址,从DD RAM或CG RAM读数据到总线DB7~DB0上。运行时间(250KHz):40µs。


