logo资料库

LCD1602原理及显示程序.doc

第1页 / 共11页
第2页 / 共11页
第3页 / 共11页
第4页 / 共11页
第5页 / 共11页
第6页 / 共11页
第7页 / 共11页
第8页 / 共11页
资料共11页,剩余部分请下载后查看
在日常生活中,我们对液晶显示器并不陌生。液晶显示模块已作为很多电子产品的通过器 件,如在计算器、万用表、电子表及很多家用电子产品中都可以看到,显示的主要是数字、 专用符号和图形。在单片机的人机交流界面中,一般的输出方式有以下几种:发光管、LED 数码管、液晶显示器。发光管和 LED 数码管比较常用,软硬件都比较简单,在前面章节已 经介绍过,在此不作介绍,本章重点介绍字符型液晶显示器的应用。 在单片机系统中应用晶液显示器作为输出器件有以下几个优点: 显示质量高 由于液晶显示器每一个点在收到信号后就一直保持那种色彩和亮度,恒定发光,而不像阴 极射线管显示器(CRT)那样需要不断刷新新亮点。因此,液晶显示器画质高且不会闪烁。 数字式接口 液晶显示器都是数字式的,和单片机系统的接口更加简单可靠,操作更加方便。 体积小、重量轻 液晶显示器通过显示屏上的电极控制液晶分子状态来达到显示的目的,在重量上比相同显 示面积的传统显示器要轻得多。 功耗低 相对而言,液晶显示器的功耗主要消耗在其内部的电极和驱动 IC 上,因而耗电量比其它显 示器要少得多。 10.8.1 液晶显示简介 ①液晶显示原理 液晶显示的原理是利用液晶的物理特性,通过电压对其显示区域进行控制,有电就有显示, 这样即可以显示出图形。液晶显示器具有厚度薄、适用于大规模集成电路直接驱动、易于 实现全彩色显示的特点,目前已经被广泛应用在便携式电脑、数字摄像机、PDA 移动通信 工具等众多领域。 ②液晶显示器的分类 液晶显示的分类方法有很多种,通常可按其显示方式分为段式、字符式、点阵式等。除了 黑白显示外,液晶显示器还有多灰度有彩色显示等。如果根据驱动方式来分,可以分为静 态驱动(Static)、单纯矩阵驱动(Simple Matrix)和主动矩阵驱动(Active Matrix)三种。 ③液晶显示器各种图形的显示原理: 线段的显示 点阵图形式液晶由 M×N 个显示单元组成,假设 LCD 显示屏有 64 行,每行有 128 列,每 8 列对应 1 字节的 8 位,即每行由 16 字节,共 16×8=128 个点组成,屏上 64×16 个显示单元 与显示 RAM 区 1024 字节相对应,每一字节的内容和显示屏上相应位置的亮暗对应。例如 屏的第一行的亮暗由 RAM 区的 000H——00FH 的 16 字节的内容决定,当(000H)=FFH 时,则屏幕的左上角显示一条短亮线,长度为 8 个点;当(3FFH)=FFH 时,则屏幕的右 下角显示一条短亮线;当(000H)=FFH,(001H)=00H,(002H)=00H,……(00EH) =00H,(00FH)=00H 时,则在屏幕的顶部显示一条由 8 段亮线和 8 条暗线组成的虚线。这 就是 LCD 显示的基本原理。 字符的显示 用 LCD 显示一个字符时比较复杂,因为一个字符由 6×8 或 8×8 点阵组成,既要找到和显示 屏幕上某几个位置对应的显示 RAM 区的 8 字节,还要使每字节的不同位为“1”,其它的为 “0”,为“1”的点亮,为“0”的不亮。这样一来就组成某个字符。但由于内带字符发生器的控 制器来说,显示字符就比较简单了,可以让控制器工作在文本方式,根据在 LCD 上开始显 示的行列号及每行的列数找出显示 RAM 对应的地址,设立光标,在此送上该字符对应的代
码即可。 汉字的显示 汉字的显示一般采用图形的方式,事先从微机中提取要显示的汉字的点阵码(一般用字模 提取软件),每个汉字占 32B,分左右两半,各占 16B,左边为 1、3、5……右边为 2、4、6…… 根据在 LCD 上开始显示的行列号及每行的列数可找出显示 RAM 对应的地址,设立光标, 送上要显示的汉字的第一字节,光标位置加 1,送第二个字节,换行按列对齐,送第三个字 节……直到 32B 显示完就可以 LCD 上得到一个完整汉字。 10.8.2 1602 字符型 LCD 简介 字符型液晶显示模块是一种专门用于显示字母、数字、符号等点阵式 LCD,目前常用 16*1, 16*2,20*2 和 40*2 行等的模块。下面以长沙太阳人电子有限公司的 1602 字符型液晶显示 器为例,介绍其用法。一般 1602 字符型液晶显示器实物如图 10-53: 图 10-53 1602 字符型液晶显示器实物图 10.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 所示: 编号 符号 VSS 1 VDD 2 3 VL RS 4 R/W 5 E 6 7 D0 8 D1 表 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 脚:背光源负极。 编号 9 10 11 12 13 14 15 16 符号 D2 D3 D4 D5 D6 D7 BLA BLK 引脚说明 数据 数据 数据 数据 数据 数据 背光源正极 背光源负极
10.8.2.3 1602LCD 的指令说明及时序 1602 液晶模块内部的控制器共有 11 条控制指令,如表 10-14 所示: 指令 序号 清显示 光标返回 置输入模式 显示开/关控制 光标或字符移位 1 2 3 4 5 6 7 8 9 10 11 RS 0 0 0 0 0 R/ W 0 0 0 0 0 0 0 0 1 0 1 D7 D6 D5 D4 D3 D2 D1 D0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 S/ C DL N 1 0 0 1 D R/ L F 1 0 1 * I/D S B C * * * * 0 1 1 字符发生存贮器地址 0 0 1 显示数据存贮器地址 BF 计数器地址 要写的数据内容 读出的数据内容 0 置功能 置字符发生存贮器地址 0 0 置数据存贮器地址 0 读忙标志或地址 写数到 CGRAM 或 DDRAM) 从 CGRAM 或 DDRAM 读数 1 1 表 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=高 输出 D0—D7=状态字 输出 无 脉冲 读数据 输入 RS=H,R/W=H,E=H 写数据 输入 RS=H,R/W=L,D0—D7=数据,E=高脉 输出 无 输出 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 硬件原理图 LCD 液晶显示,用 16F877A 写程序如下:
写一个字符串程序: #include #define uchar unsigned char #define uint unsigned int #define DB PORTD //定义端口 #define rs RB0 #define e RB1 __CONFIG(0x3B31); const uchar data[]="happy everyday";//输入的字符串 第一行 const uchar data1[]="xiexie";//第二行 void init(); void write_commond(uchar dat);//写指令函数 void write_data(uchar dat);//写数据函数 void delay(uint x); void delay(uint x) { uint a,b; for(a=x;a>0;a--) for(b=110;b>0;b--); } void init()//初始化指令 { write_commond(0x01);//0000000001,清除屏幕显示 write_commond(0x28);//设置 4 位格式,2 行,5X7,功能设定 write_commond(0x0C);//0000001100,开显示,无光标,不闪烁 write_commond(0x06);//0000000110,置输入模式,光标右移,屏幕上的文字不移动 write_commond(0x14);//0001000100,设定 CGRAM 地址显示屏或光标移动方向 } void write_commond(uchar dat) { rs=0;//指令 DB=dat; e=1;//允许 下降沿触发 1-0 delay(5); e=0; DB=DB<<4;//左移四位从 RD4~RD7 进入 LCD delay(5); e=1; delay(5); e=0; } void write_data(uchar dat) { rs=1;//数据
分享到:
收藏