・实践教与学・ 电子设计工程师认证实操实训基础系列讲座(6) 第三讲字符型LcD接口电路设计及应用,(上) 华中科技大学电工电子科技创新中心肖看 人机交互是一般电子系统中不可缺 器的工作原理及其设计应用,键盘有关的 仿真等内容。 少的一部分,键盘和显示器是最典型的人 接口知识则放至下一讲介绍。文章围绕字 一、字符型LCD显示器的工作 机交互设备。单片机系统中,LED和LCD 符型LCD显示器,先后介绍其工作原理、 原理 是两种最常用的显示器,本文将紧密结合 接口电路、接口电路所涉及的接口芯片 EDP实验箱,着重介绍字符型LCD显示 81 55、以及应用编程和Proteus环境下的 LCD模块 区段电极 4 驱动电路 3 公用电极 驱动电路 4 3 7 —二二二二 光标/闪烁控制器 7I、 ÷.r面 .J 8 80x8位 5 串-并 7 C—转换器 5GRA12位r —M。I 1 8 指令译码器 6 I 忙信号标准 偏压 指令存储器 发生器 — ]/o缓冲器 RS RN—V—E DB4 ̄DB7 DB0 ̄DB3 图1字符型LCD模块功能框图 表1字符型LCD引脚功能表 弓l脚号 符号 状态 功能 1 VSS 电源地 2 Vdd +5V逻辑电源 3 Vo 液晶驱动电源 厶 RS 输入 寄存器选择1:数据0:指令 5 R/v\/ 输入 读、写操作选择 6 E 输入 使能信号 7 14 DB0 ̄DB7 三态 数据总线 15 BL+ 背光电源正(部分型号功能可能有变) 16 BL- 背光电源负(部分型号功能可能有变) 电子世界・2010.08 —38一 字符型LCD是一种通常用5×7点 阵图形来显示字符的液晶显示器。能显示 的每个字符都有一个代码,代码对应字符 的点阵图形数据由字符发生器产生,通过 驱动电路后在LCD上显示出字符。为开 发简单,通常可以购买含LCD及其驱动 电路的显示器,称为LCD模块。下面以 LCD1602(16字符/行X2行)字符型液 晶模块为例,说明一下其工作原理。字符 型LCD模块内部功能结构框图如图1所 示,其外部管脚功能详见表1。 在图1所示的功能框图中,DDRAM 为显示数据RAM。它是80 X8位的 RAM,能够存储多至8O个8位字符代码 作为显示数据。显示数据的DDRAM地址 与显示屏上显示位置的关系如表2和表3 所示。当LCD显示屏每行能显示的字符 个数少于40时,只有前面的显示单元内 的数据才会被显示处理。 CGROM为字符发生器ROM时,用 来产生字符代码所表示的5×7点阵字符 图形。字符代码与字符的对应关系见表4。 CGRAM为字符发生器RAM时,用来存 储8个自行编程写的任意5X7点阵字符 图性。自编程字符图形代码见表4的第2 列。功能框图中的其它部件如AC地址计 数器、忙信号标志BF、指令寄存器lR、数 据寄存器DR、电压调整电路、控制及驱动 电路等不在此一一介绍,有兴趣的读者可 以查阅相关资料。 字符型LCD模块有11条操作指令, 其格式如表5所示。 二、字符型LCD模块接口电路 ・实践教与学・ 表2双行显示时DDRAM地址与显示位置的关系表 显示位置 1 2 3 38 39 40 设计与仿真 1.字符型LCD模块的读写时序 时序是接口电路设计的关键所在,外 第一行DDRAM地址 O0H 01 H O2H 双行显示 25H 26H 27H 65H 66H 67H 26H 27H 00H 66H 67H 40H 24H 25H 26H 64H 65H 66H 围设备与单片机的时序搭配恰当与否,直 接关系到单片机与其外设数据交换的成 败。为此,在开展接口电路设计前,我们必 第二行DDRAM地址 40H 41 H 42H 第一行DDRAM地址 O1 H O2H O3H 须查阅器件手册,了解其读写时序。字符 双行左移显示 第二行DDRAM地址 41 H 42H 43H 第一行DDRAM地址 27H 00H 01 H 型LCD模块的读写时序分别如图2(a)和 图2(b)所示,其中典型的读写使能周期 tcycE为1 Ll s,12MHz以下主频的8051 双行右移显示 第二行DDRAM地址 67H 40H 41 H 单片机的总线读写时序可以较好地满足 此要求,更高更快主频的单片机在使用时 则需要读写的周期是否达到器件要求。如 果主控的单片机速度较LCD太快,则可以 2.2V 2.2V、 Rs n6V n6V 通过单片机的普通I/O端口来模拟LCD 模块的读写时序访问即可。 t^s R,W / 2.2V Pw删 。 \2.2V t^H _2.字符型LCD模块与8051单片机 ● E O.6V. 2.2V 2.2v 6V O., 0.6Vj - 的典型接口电路 外设与8051单片机接口时,能够采 ‘一tEr tDDR . 一 l 用总线方式的一般使用总线方式,这样可 VanaDate tcycE DBO1lo BD7 以提高传输速率,有时也会简化电路。如 果无法使用总线方式来完成的可以采用 (a)读时序 RS 软件模拟时序实现。对8051单片机而言, 外设的总线接口时序通常由指令MOV)( > Q.26V —20.26V 7 .来激发,如有不熟悉MOV×指令时序的读 者可以查找相关资料,在开展总线接口电 t^s一 洲 1. 一 0.6V _ 7n .路设计前要仔细研读,此处不再介绍。从 图2所示的时序关系可以看出,字符型 6v PW聃 —t^H .4 _.tEf E tEr- 2.2V . O.6v ● 2.2Vj 0.6V I tl ̄'W tNLCD模块与8051单片机可以很好的搭 配,字符型LCD模块的8位数据线可与 8051单片机的数据线直接相连,字符型 LCD模块的使能信号E有效电平需求时 间较短并且总是高电平有效,可由单片机 ・一- I DB0TO BD7 f 蹦— a f ycE : (b)写时序 的读写信号和模块地址的片选信号来共 同决定,LCD模块的寄存器选择信号RS 和读写操作选择信号则可以方便地由地 图2字符型LCD模块读写时序图 址线来直接控制。在Pr0teus下,容易画出 表3单行显示时DDRAM地址与显示位置的关系表 I 显示位置 1 2 3 4 5 6 7 8 9 1O 1 1 12 13 14 15 16 I单行 单行左移 单行右移 00H O1 H 02H O3H 04H O5H 06H 07H 40H 41 H 42H 43H 44H 45H 46H 47H O1H 02H O3H 04H 05H O6H 07H 08H 41H 42H 43H 44H 45H 46H 47H 48H 27H OOH O1H 02H O3H 04H O5H 06H 67H 40H 41H 42H 43H 44H 45H 46H 屯子世界—・2010.08 39— ・实践教与学・ 表4 LCD字符代码表 O咖 ∞1O OO1t 0100 O101 0t10 O111 1O1O 1O11 "OO 1101 ~ 【0x8300】 1110 1'11 此处引入XBYTE对外部数据存储器 进行绝对地址访问,需要注意加入相应的 头文件”absacc.h”。在访问LCD模块时, 写指令和写数据两项操作用的比较多,使 用时需要注意的一点就是每次LCD模块 xxxxOooO ‘∞ 籼 I, ‘.i一-.I..鼍一 : - =三:.; l : 一-。 l: 一- ●“一 C F - XXXXO∞1 鳓 i- . 耋. :{ ;-.耋 :) ’一 :§ ・ ’’‘-皇 .兰兰l ‘_.1 .- ●● XXXX∞1O Ia' {1 ._I. r。’. lⅡ・- §.. : : 1:I.=・‘_ | :.:--‘ = : .。 ● 。 : 一-. -.皇 暑-。 l兰;: 豳 : t: 完成指定的动作需要一定的时间,因此连 续的两次写操作之间需要间隔一定的时 间,或者在写操作前判断模块是否准备 好。易编写写指令和写数据的子函数分另0 如下: xxxxO011 替 一:。 ●一● ●一 -。¨● 嘲 : xxxx0100 xxxx0101 誊 盘 r_i.-: I _l:l 辛 =-- 。’r. 1: . .. :... 晶.1 椰 . : : l i- i i 一 : : := : ‘- .: I.-- - void wri(unsigned char dat) ( while(PORTReadStat&Ox80);//等 _xxxx0110 口’ ・ C :‘-’--. -. i : I_’ i l :。-- l==-l .l…‘- |:… XXXX0111 xxxxl000 棚 。--置 il i;; . 。 。lI :I l l- -.-q :l-l= 。‘。1. :: . .1 l .待LCD模块准备好 PORT_Writelnst=dat;//写指令 ) void wrd(unsigned char dat) (1I l. - :: l :.-罩 : ; L-●-- I- : : _ ::< ●一- ● xxxxl001 xxxxlO1O ∞ .-l --.-| . :I 。. ll 工 — 0 。--l l¨‘: :-- : I- ; ・_暑-| 。:。 : H l ‘- .::=i { 瑚 冀 ’r 一I : -. - - - : } 1=l :=F- r . while(PORLReadStat&0x80);//等 待LCD模块准备好 PORT_WriteData=dat;//写数据 ) Xxxxl611 埘 - -暑 =I- . ; :0. -_l- : :l=i xxxxl100 辑 :| ._- l -・l哇-¨ l1. I Il 0 l- -¨●. ¨0.1 :0_I |霉. 罔 Xxxxl10t 御 f,’ 利用写指令子函数,可以方便地对 LCD初始化,下面给出一段LCD初始化 代码的示例,读者需要其它方式的设置可 .i -: i’} l l { _. -I 暑.{ .^. II. -- 哪- .J 一 Xxxxl110 ■ , l: In -・÷ ‘ 1 - I il ru 以仿照之。 void Lcdlnit() xxxtt'1 辨 ,’● - -- . U -I— -I ::一 l:I暑 。I= 疆 ●O ● 啊 8051单片机与字符型LCD的接口仿真电 态(忙标志和地址指针)、写数据、读数据。 路如图3所示。 { wri(0x01);//清除显示 wri(0x38);//设置8位格式,2行,5 7 wri(0x06);//设定输入方式,增量不移 位 由于采用的是总线时序,所以对LCD模 由图3可以看出,LCD模块的地址空 块读写的操作非常简单,在C51中直接把 wri(0x0c);//整体显示,关光标,不闪烁 ) 间由P2.7直接提供,当总线寻址的地址 相应的端口当作变量访问即可。依据图3, 最高位为1时,都可以访问LCD模块,我 使用C51预先定义好相应的操作端口: 们可以选择地址的最低端作为使用的基 #define P0RT Writelnst LCD模块初始化完毕后,可以在 DDRAM的合适位置写入待显示的数据 以便在LCD屏上显示,直接定位的单字节 显示子函数示例如下: void Icddisp《unsigned char row, —本地址:指令端口写地址0x8000,数据端 XBYTE[0x8000】 口写地址为0x8100,指令端口读地址 0x8200,数据端口读地址0x8300。 3.字符型LCD模块的编程与仿真 #define PORT WriteData XBYTE 【0x81 00】 #define PORT ReadStat ×BYTE unsigned char column,unsigned char dat) { if(row==1)wri(0x80+column一1):,/ 从表5可以看出,字符型LCD模块 【0x8200】 的操作可以分为4种情况:写指令、读状 #define PORT ReadData ×BYTE 设置第一行的DDRAM显示地址 屯子世界——・2010.08 40—— ・实践教与学・ if(row==2)wri(OxcO+column一1):,/ VCC LCD’ 设置第二行的DDRAM显示地址 wrd(dat);//写入显示字符数据 ) 调用显示子函数,如 Icddisp(1,1,’1’): —Icddisp(2,16,’0’): _即可实现在LCD屏上的第1排第1 个位置处显示字符“1”,在第2排最后一 个位置处显示字符“0”。编写好完整的代 码,放入其图3所示的Proteus电路中仿 真运行,获得的结果如图4所示。 如需显示字符串,可以使用以下代 码: void Icd—string(unsigned char P, unsigned char flag) { unsigned char chdata; if《flag==1) { chdata=Ox80; -....-._-.--_---_-_.---__--.-_....-__--__….-_-__._-_・-.J 图3字符型LCD模块与8051单片机的Proteus接口电路仿真图 while( P l_‘kO‘) ( wri(chdata); chdata++; ‘ wrd( p); p++: ) } if(flag==2) { chdata=OxcO; while( P l_‘kO’) { wri(chdata); LCD1 LM016L ■●-----__●_-_。_----_-_--…。 7400 -。。’。----_。。。----●。-。‘。’●--。‘。-_●●_●--●-_。_-●---___●●●●-- 图5字符型LCD模块的字符串显示 图4字符型LCD模块的Proteus仿真运行效果图 结果图 电子世界・201 0.08 —41一 ・实践教与学・ chdata++; ) ) 通过“Icdstring(“Hello,World”,1):” _示字符串“Hello,World!”,在Proteus下 的仿真结果如图5所示。 (未完待续) wrd( p): p++: ) 调用语句即可实现在LCD屏第1排后显 表5字符型LCD的操作指令表 功能 RS R/v\/ DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 说明 清屏 光标复位 0 0 0 0 O 0 O O 0 0 0 0 0 0 0 0 O 1 1 写入空码AC清零,光标归位 AC清零,光标返回到显示屏左 上第一字符位上 I/D=0AC减1计数,光标左移 个字符位:I/D=I AC加1计 S 数光标右移一个字符位。 S=0,禁止画面滚动: S=1,允许画面滚动 一模式设置(光标画面移动 O 方式设置) 、O 0 O O O O 1 J/D ,D=1开画面显示, 显示开关控制 0 O 0 O 0 O 1 D C B D=01关画面显示。 C=1光标显示反之光标消失。 B=1启用闪烁,反之禁止闪烁 光标、画面位移不影响 0 DDRAM O O 0 0 1 SfC R/L s/C=1:画面平移一个字符位: S/C=0光标平移一个字符位; R/L=1:右移: R/L=0:左移。 工作方式设定,设置接口 数据宽度、显示行数、字符 0 点阵形式 0 0 0 1 DL N F ● DL=I,8位数据长度: DL=0,4位数据长度,DB4~ DB7有效。8位指令代码和数 据将按先高4位后低4位分二 次传送 N=I双行显示N=0单行显示 F=I,5 X 10点阵字体: F=0,5X7点阵字体 CGRAM地址设置 O 一 0 、 0 O 1 A5 A4 A3 A2 A1 AO 将6位CGRAM地址写入地 址指针计数器AC中 AO 将7位DDRAM地址写入地 址指针计数器AC中 DDRAM地址设置 O 1 A6 A5 A4 A3 A2 A1 “忙”标志和地址指针 0 1 BF AC6 AC5 AC4 AC3 A2C A1 BF=1,忙;BF=0,准备好,单 A0 片机可以向显示模块写指令代 码或读/写数据 根据当前地址指针计数器的性 质,将数据写入AC所指向的 DDRAM或CGRAM中 写数据 1 0 数 据 读数据 1 1 数 据 根据当前地址指针计数器的性 质,将数据从AC所指向的 DDRAM或CGRAM中读出 屯子世界—・2010.08 42—