苏杰仁
(广州番禺职业技术学院 广东广州 511483)
字符型LCD1602 是单片机课程常用的显示屏之一,网络上有很多相关的驱动代码,用户可以直接下载修改使用,但这样用户只是知道在LCD1602 显示出字符,无法理解LCD1602 的工作原理及显示过程。该文介绍字符型LCD1602的写命令的时序分析及其代码编写,让读者更深入地理解LCD1602的显示步骤及原理。
字符型LCD1602 是一种专门用于显示字母、数字、符号等点阵式LCD,它采用标准的16 脚(带背光)接口,各引脚接口说明如表1所示。
表1 LCD1602引脚接口说明
LCD1602显示字符过程分三步:第一步,LCD1602初始化;第二步,写入显示的地址;第三步,写入显示的内容。
向LCD1602 写入内容,需要对它进行写操作,写操作时须满足要求的建立时间、保持时间和E 脉宽。时序图如图1所示。
图1 LCD1602写命令时序图
对于时序[1],采用折点分析法完成写操作的代码编写。在写时序图的各个转折点处绘制分割线,并做标记A、B、C、D、E、K、M、N、O、P,分析如下。
RS:在AB、BN、NQ 阶段,RS 可高可低,取写命令RS为低电平,即RS=0。
R/W:在AB、NQ 阶段,R/W 可高可低,在BN 阶段R/W为低,取R/W为低电平,即R/W=0。
对于E与DB0~DB7则结合分析。
A点:使能拉低,即E=0;
B点:数据准备,P2=0x00|0x80;
C点:数据准备完毕,完成转换,此时数据无效;延时CD;
D点:使能拉高,即E=1;延时DE;
E点:数据起效,E=1;延时EK;
K 点:使能拉低,即E=0;延时KM,有效数据传输完毕;
M点:准备下一个周期的数据传输。
其中每段延时时间间隔,在LCD1602 的datasheet中均有着严格的说明,如表2所示。
表2 LCD1602写模式延时间隔表
如表2 中tPW时间间隔不能小于450 ns,取单片机晶振为12 MHz,即得一个机器周期为1 μs[2],故延时_nop_();即可,其他时间间隔采用类似的方法处理。
根据以上思路分析得写命令C语言代码如下。
若写数据,取RS=1;若读数据,则取RW=1。
单片机[3]对LCD1602 的读写、屏幕和光标的操作都是通过控制命令编程来实现的,共有11 条,如表3所示。
表3 LCD1602控制命令表
注意,指令9 中的BF 为忙标志位,高电平时表示忙,此时LCD1602不能接收命令或者数据,低电平时表示不忙,此时LCD1602 可以接收命令或者数据。每次写指令、读/写数据操作均需要对LCD1602进行忙信号检测。
而LCD1602 的初始化在模块设计时已经规定好,只需要单片机向LCD 模块发送相关的指令即可完成,过程如下。
延时5ms;//延时5ms
写指令38H;//显示模式设置
延时5ms;//延时5ms
写指令08H;//显示关闭
延时5ms;//延时5ms
写指令01H;//显示清屏
延时5ms;//延时5ms
写指令06H;//显示光标移动设置
延时5ms;//延时5ms
写指令0CH;//显示开及光标设置
延时5ms;//延时5ms
要显示字符,首先需要向LCD1602 写入显示字符地址,也就是告诉LCD1602在哪个位置显示字符,图2是LCD1602的内部显示地址。
图2 LCD1602内部显示地址
例如:第一行第一个字符的地址是00H,根据表2控制命令8,写入显示地址时要求最高位D7 恒定为高电平1,所以实际写入的地址应该是00000000B(00H|10000000B(80H)=10000000B(80H)),代码语句为LCD_Wcmd(0x00|0x80)。如需写入其他显示地址,则用该显示地址替换语句中的0x00即可。
LCD1602 液晶模块内部的字符发生存储器(CGROM)存储了160 个不同的点阵字符图形,如图3所示,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号和日文假名等,每一个字符都有一个固定的地址代码,这些地址代码大部分跟字符的ASSIC 码一致,比如大写的英文字母“H”在字符发生存储器的地址代码是0100 1000B(48H)(“H”的ASSIC 码亦为48H),显示时模块把地址48H中的点阵字符图形显示出来,我们就能看到字母“H”。
图3 字符代码与图形对应图
把LCD1602的RS、RW、EN、DB0~DB7引脚分别接到单片机的P05、P06、P07、P20~P27 引脚,具体仿真[4]电路连接原理图如图4所示。
图4 1602LCD硬件原理图
图5 1602LCD字符显示仿真图
按照2分析要求,完成1602LCD初始化、写入显示地址、写入显示的内容代码[5]编写,即可显示字符。具体主程序如下。
以上思路分析,使得字符型LCD1602 显示字符的操作变得简单易懂。代码编译后在Proteus 软件上仿真[6]显示结果见图5。
如需显示汉字,一个汉字占用两个字节,即16×16=256 个像素,而LCD1602 的每个字符像素大小为5×8=40,因此只能显示一些如“一”“丁”等简单的汉字[7],并且需要在LCD1602字符转换软件上描写字,把字转换成代码之后方可在显示屏上显示,这便是汉字显示以及图形显示LCD的基础。