[图文]LCD1602显示技术参数资料lcd1602显示内容lcd1602显示问题

周平文库
当前位置:首页 » LCD1602显示技术参数资料 » 正文

LCD1602显示技术参数资料

两者尺寸差别如下图10-54所示: 1602lcd主要技术参数: 显示容量:16&
两者尺寸差别如下图10-54所示: 1602lcd主要技术参数: 显示容量:16&LCD1602显示技术参数资料lcd1602显示内容lcd1602显示问题

0.8.2.1 1602LCD 的基本参数及引脚功能 . 1602LCD 分为带背光和不带背光两种,基控制器大部分为 HD44780,带背光的比不带背光的厚,是否带 背光在应用中并无差别,两者尺寸差别如下图 10-54 所示:图 10-54 1602LCD 尺寸图 1602LCD 主要技术参数: 主要技术参数: 显示容量:16×2 个字符 芯片工作电压:4.5—5.5V 工作电流:2.0mA(5.0V) 模块最佳工作电压:5.0V 字符尺寸:2.95×4.35(W×H)mm 引脚功能说明 1602LCD 采用标准的 14 脚(无背光)或 16 脚(带背光)接口,各引脚接口说明如表 10-13 所示:编号 1 2 3 4 5 6 7符号 VSS VDD VL RS R/W E D0引脚说明 电源地 电源正极 液晶显示偏压 数据/命令选择 读/写选择 使能信号 数据编号 9 10 11 12 13 14 15符号 D2 D3 D4 D5 D6 D7 BLA引脚说明 数据 数据 数据 数据 数据 数据 背光源正极

8D1数据16BLK背光源负极表 10-13:引脚接口说明表 第 1 脚:VSS 为地电源。

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

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

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

第 5 脚:R/W 为读写信号线,高电平时进行读操作,低电平时进行写操作。

当 RS 和 R/W 共同为低电平时 可以写入指令或者显示地址,当 RS 为低电平 R/W 为高电平时可以读忙信号,当 RS 为高电平 R/W 为低 电平时可以写入数据。

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

第 7~14 脚:D0~D7 为 8 位双向数据线。

第 15 脚:背光源正极。

第 16 脚:背光源负极。

10.8.2.3 1602LCD 的指令说明及时序 . . . 1602 液晶模块内部的控制器共有 11 条控制指令,如表 10-14 所示: 序号 1 2 3 4 5 6 7 8 9 10 11 指令 清显示 光标返回 置输入模式 显示开/关控制 光标或字符移位 置功能 置字符发生存贮器地址 置数据存贮器地址 读忙标志或地址 写数到 CGRAM 或 DDRAM) 从 CGRAM 或 DDRAM 读数RS 0 0 0 0 0 0 0 0 0 1 1R/W 0 0 0 0 0 0 0 0 1 0 1D7 0 0 0 0 0 0 0 1D6 0 0 0 0 0 0 1D5 0 0 0 0 0 1D4 0 0 0 0 1 DLD3 0 0 0 1 S/C ND2 0 0 1 D R/L FD1 0 1 I/D C * *D0 1 * S B * *字符发生存贮器地址显示数据存贮器地址BF 计数器地址 要写的数据内容 读出的数据内容表 10-14:控制命令表

1602 液晶模块的读写操作、屏幕和光标的操作都是通过指令编程来实现的。

(说明:1 为高电平、0 为低 电平) 指令 1:清显示,指令码 01H,光标复位到地址 00H 位置。

指令 2:光标复位,光标返回到地址 00H。

指令 3:光标和显示模式设置 I/D:光标移动方向,高电平右移,低电平左移 S:屏幕上所有文字是否左移 或者右移。

高电平表示有效,低电平则无效。

指令 4:显示开关控制。

D:控制整体显示的开与关,高电平表示开显示,低电平表示关显示 C:控制光 标的开与关,高电平表示有光标,低电平表示无光标 B:控制光标是否闪烁,高电平闪烁,低电平不闪烁。

指令 5:光标或显示移位 S/C:高电平时移动显示的文字,低电平时移动光标。

指令 6:功能设置命令 DL:高电平时为 4 位总线,低电平时为 8 位总线 N:低电平时为单行显示,高电 平时双行显示 F: 低电平时显示 5x7 的点阵字符,高电平时显示 5x10 的点阵字符。

指令 7:字符发生器 RAM 地址设置。

指令 8:DDRAM 地址设置。

指令 9:读忙信号和光标地址 BF:为忙标志位,高电平表示忙,此时模块不能接收命令或者数据,如果为 低电平表示不忙。

指令 10:写数据。

指令 11:读数据。

与 HD44780 相兼容的芯片时序表如下: 读状态 写指令 读数据 写数据 输入 输入 输入 输入 输出 输出 输出 输出RS=L,R/W=H,E=H RS=L,R/W=L,D0—D7=指令码,E=高脉冲 RS=H,R/W=H,E=H RS=H,R/W=L,D0—D7=数据,E=高脉冲D0—D7=状态字 无 D0—D7=数据 无表 10-15:基本操作时序表 读写操作时序如图 10-55 和 10-56 所示:

图 10-55 读操作时序图 10-56 写操作时序 10.8.2.4 1602LCD 的 RAM 地址映射及标准字库表 . . . 液晶显示模块是一个慢显示器件,所以在执行每条指令之前一定要确认模块的忙标志为低电平,表示不忙, 否则此指令失效。

要显示字符时要先输入显示字符地址, 也就是告诉模块在哪里显示字符, 10-57 是 1602 图 的内部显示地址。

图 10-57 1602LCD 内部显示地址 例如第二行第一个字符的地址是 40H, 那么是否直接写入 40H 就可以将光标定位在第二行第一个字符的位 置呢?这样不行,因为写入显示地址时要求最高位 D7 恒定为高电平 1 所以实际写入的数据应该是 01000000B(40H)+10000000B(80H)=11000000B(C0H)。

在对液晶模块的初始化中要先设置其显示模式,在液晶模块显示字符时光标是自动右移的,无需人工干预。

每次输入指令前都要判断液晶模块是否处于忙的状态。

1602 液晶模块内部的字符发生存储器(CGROM)已经存储了 160 个不同的点阵字符图形,如图 10-58 所 示,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固 定的代码,比如大写的英文字母“A”的代码是 01000001B(41H),显示时模块把地址 41H 中的点阵字符 图形显示出来,我们就能看到字母“A”

图 10-58 字符代码与图形对应图 10.8.2.5 1602LCD 的一般初始化(复位)过程 . . . 的一般初始化(复位) 延时 15mS 写指令 38H(不检测忙信号) 延时 5mS 写指令 38H(不检测忙信号) 延时 5mS 写指令 38H(不检测忙信号) 以后每次写指令、读/写数据操作均需要检测忙信号 写指令 38H:显示模式设置 写指令 08H:显示关闭 写指令 01H:显示清屏 写指令 06H:显示光标移动设置 写指令 0CH:显示开及光标设置 10.8.3 1602LCD 的软硬件设计实例 . . 在 1602LCD 第一行显示网站名:www.hificat.com 在第二行显示联系电话:0571-85956028。

实验前应先 将显示切换开关切换到 LCD 工作状态。

10.8.3.1 硬件原理图 . . . 1602 液晶显示模块可以和单片机 AT89C51 直接接口,电路如图 10-60 所示。

图 10-60 硬件原理图 10.8.3.2 程序流程图 10.8.3.3 软件代码 #include while(ms--) #include sbit rs= P2^0; sbit rw = P2^1; sbit ep = P2^2; unsigned char code dis1[] = {"www.hificat.com"}; unsigned char code dis2[] = {"0571-85956028"}; void delay(unsigned char ms) { unsigned char i; { for(i = 0; i< 250; i++) { _nop_(); _nop_(); _nop_(); _nop_(); } }

} bit lcd_bz() { bit result; rs = 0; rw = 1; ep = 1; _nop_(); _nop_(); _nop_(); _nop_(); result = (bit)(P0 & 0x80); ep = 0; return result; } void lcd_wcmd(unsigned char cmd) { while(lcd_bz());//判断 LCD 是否忙碌 rs = 0; rw = 0; ep = 0; _nop_(); _nop_(); P0 = cmd;_nop_(); _nop_(); _nop_(); _nop_(); ep = 1; _nop_(); _nop_(); _nop_(); _nop_(); ep = 0; } void lcd_pos(unsigned char pos) { lcd_wcmd(pos | 0x80); } void lcd_wdat(unsigned char dat) { while(lcd_bz());//判断 LCD 是否忙碌 rs = 1; rw = 0; ep = 0; P0 = dat; _nop_(); _nop_();

_nop_(); _nop_(); ep = 1; _nop_(); _nop_(); _nop_(); _nop_(); ep = 0; } void lcd_init() { lcd_wcmd(0x38); delay(1); lcd_wcmd(0x0c); delay(1); lcd_wcmd(0x06); delay(1); lcd_wcmd(0x01); delay(1); }void main(void) { unsigned char i; lcd_init();// 初始化 LCD delay(10); lcd_pos(0x01);//设置显示位置 i = 0; while(dis1[i] != '\0') { lcd_wdat(dis1[i]);//显示字符 i++; } lcd_pos(0x42);// 设置显示位置 i = 0; while(dis2[i] != '\0') { lcd_wdat(dis2[i]);// 显示字符 i++; }