您好,欢迎来到99网。
搜索
您的当前位置:首页LCD1602工作原理

LCD1602工作原理

来源:99网
1602LCD 分为带背光和不带背光两种,基控制器大部分为 HD44780,带背光的比不带背光 的厚,是否带背光在应用中并无差别

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 VSS 电源地 9 D2 数据 2 VDD 电源正极 10 D3 数据 3 VL 液晶显示偏压 11 D4 数据 4 RS 数据/命令选择 12 D5 数据 5 R/W 读/写选择 13 D6 数据 6 E 使能信号 14 D7 数据

7 D0 数据 15 BLA 背光源正极 8 D1 数据 16 BLK 背光源负极 表 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脚:背光源负极。

LCD寄存器的选择 E 1 1 1 1 0

LCD指令表 R/W 0 0 1 1 X RS 0 1 0 1 功能说明 写入命令寄存器 写入数据寄存器 读取忙碌标志及RAM地址 读取RAM数据 不动作 指令功能 清除屏幕 光标回到原点 设定进入模式 数据线 D7 D6 D5 D4 D3 D2 D1 D0 0 0 0 0 0 0 0 1 清除屏幕,并把光标移至左上角 0 0 0 0 0 0 0 0 1 x 光标移至左上角,显示内容不变 0 0 0 0 0 0 0 1 I/D S I/D=1:地址递增,I/D=0:地址递减 S=1:开启显示屏,S=0:关闭显示屏 0 0 0 0 0 0 1 D C B D=1:开启显示幕 C=1:开启光标 B=1:光标所在位置的字符闪烁 0 0 0 0 0 1 S/C R/L x x S/C=0、R/L=0:光标左移;S/C=0、R/L=1:光标右移 S/C=1、R/L=0:字符和光标左移;S/C=1、R/L=1:字符和光标右移 0 0 0 0 1 DL N F x x 控制线 RS R/W 0 0 显示器开关 移位方式 DL=1:数据长度为8位,DL=0:数据长度为4位 N=1:双列字,N=0:功能设定 单列字;F=1:5x10字形,F=0:5x7字形 CG RAM地址0 0 0 1 CG RAM地址 设定 将所要操作的CG RAM地址放入地址计数器 DD RAM地址0 0 1 DD RAM地址 设定 将所要操作的DD RAM地址放入地址计数器 忙碌标志位0 1 BF 地址计数器内容 BF 读取地址计数器,并查询LCM是否忙碌,BF表示LCM忙碌 1 0 写入数据 写入数据 将数据写入CG RAM或DD RAM 1 1 读取数据 读取数据 读取CG RAM或DD RAM的数据

图 10-57 1602LCD 内部显示地址 例如第二行第一个字符的地址是 40H,那么是否直接写入 40H 就可以将光标定位在第二行 第一个字符的位置呢?这样不行,因为写入显示地址时要求最高位 D7恒定为高电平 1 所以

实际写入的数据应该是 01000000B(40H)+10000000B(80H)=11000000B(C0H)。

在对液晶模块的初始化中要先设置其显示模式,在液晶模块显示字符时光标是自动右移的, 无需人工干预。每次输入指令前都要判断液晶模块是否处于忙的状态。 1602 液晶模块内部的字符发生存储器(CGROM)已经存储了 160 个不同的点阵字符图形, 如图 10-58 所示,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名

等,每一个字符都有一个固定的代码,比如大写的英文字母“A”的代码是 01000001B (41H),

显示时模块把地址 41H中的点阵字符图形显示出来,我们就能看到字母“A”

开始否判断LCD是否忙碌?是rs=1;rw=0;ep=0;P1=dat;延时4usep=1;延时4usep=0;结束

图表 1写数据流程

开始否判断LCD是否忙碌?是rs=0;rw=0;ep=0;P1=dat;延时4usep=1;延时4usep=0;结束

图表 2写命令流程

开始rs=0;rw=1;ep=1;P1=dat;延时4usresult = (bit)(P1 & 0x80);ep=0;返回result结束 图表 3判断LCD是否忙碌,忙则返回1

#include #include

sbit rs= P3^5; //寄存器类型,1表示数据寄存器,2表示指令寄存器 sbit rw = P3^6; //读写选择,1表示读,0表示写 sbit ep = P3^7; //读写使能,下降沿使能

void delay(unsigned char ms) //延时n ms { unsigned char i; while(ms--) { for(i = 0; i<123; i++) { ; }

} }

bit lcd_bz() //判断LCD是否忙碌,1忙碌 { bit result; rs = 0; rw = 1; ep = 1; _nop_(); _nop_(); _nop_(); _nop_(); result = (bit)(P1 & 0x80); ep = 0; return result; }

void lcd_wcmd(unsigned char cmd) { while(lcd_bz());//判断 LCD是否忙碌 rs = 0; rw = 0; ep = 0; _nop_(); _nop_(); P1 = 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; P1 = dat; _nop_(); _nop_(); _nop_(); _nop_(); ep = 1; _nop_(); _nop_(); _nop_(); _nop_(); ep = 0; }

void lcd_wstr(const unsigned char *s) //写字符串 { unsigned char i = 0; while(s[i] != '\\0') { lcd_wdat(s[i]);// 显示字符 delay(1000); i++; } }

void lcd_init() //LCD初始化 { lcd_wcmd(0x38); //功能设定 delay(1); lcd_wcmd(0x0c); //显示器开关 delay(1); lcd_wcmd(0x06); //设定进入模式 delay(1); lcd_wcmd(0x01); //清除显示屏,把光标移至左上角 delay(1); }

void main(void)

{ }

lcd_init();// 初始化 LCD delay(10);

lcd_pos(0x01);//设置显示位置 //i = 0; while(1){ }

lcd_wstr(\"abcdefg\"); lcd_pos(0x42);

lcd_wstr(\"abcdefg\"); lcd_wcmd(0x01); delay(3);

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- 99spj.com 版权所有 湘ICP备2022005869号-5

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务