您的位置 首页 国产IC

1602字符型液晶显示篇

在日常生活中,我们对液晶显示器并不陌生。液晶显示模块已作为很多电子产品的通过器件,如在计算器、万用表、电子表及很多家用电子产品中都

在日常日子中,咱们对液晶显现器并不生疏。液晶显现模块已作为许多电子产品的经过器材,如在计算器、万用表、电子表及许多家用电子产品中都能够看到,显现的首要是数字、专用符号和图形。在单片机的人机沟通界面中,一般的输出办法有以下几种:发光管、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所示:

编号

符号

引脚阐明

编号

符号

引脚阐明

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脚:背光源负极。

10.8.2.3 1602LCD的指令阐明及时序

1602液晶模块内部的操控器共有11条操控指令,如表10-14所示:

序号

指令

RS

R/W

D7

D6

D5

D4

D3

D2

D1

D0

1

清显现

0

0

0

0

0

0

0

0

0

1

2

光标回来

0

0

0

0

0

0

0

0

1

*

3

置输入形式

0

0

0

0

0

0

0

1

I/D

S

4

显现开/关操控

0

0

0

0

0

0

1

D

C

B

5

光标或字符移位

0

0

0

0

0

1

S/C

R/L

*

*

6

置功用

0

0

0

0

1

DL

N

F

*

*

7

置字符产生存贮器地址

0

0

0

1

字符产生存贮器地址

8

置数据存贮器地址

0

0

1

显现数据存贮器地址

9

读忙标志或地址

0

1

BF

计数器地址

10

写数到CGRAM或DDRAM)

1

0

要写的数据内容

11

从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: 低电平时显现5×7的点阵字符,高电平时显现5×10的点阵字符。

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

指令8:DDRAM地址设置。

指令9:读忙信号和光标地址 BF:为忙标志位,高电平表明忙,此刻模块不能接纳指令或许数据,假如为低电平表明不忙。

指令10:写数据。

指令11:读数据。

与HD44780相兼容的芯片时序表如下:

读状况

输入

RS=L,R/W=H,E=H

输出

D0—D7=状况字

写指令

输入

RS=L,R/W=L,D0—D7=指令码,E=高脉冲

输出

读数据

输入

RS=H,R/W=H,E=H

输出

D0—D7=数据

写数据

输入

RS=H,R/W=L,D0—D7=数据,E=高脉冲

输出

表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-59 1602LCD试验演示图

10.8.3.1 硬件原理图

1602液晶显现模块能够和单片机AT89C51直接接口,电路如图10-60所示。

图10-60 硬件原理图

10.8.3.2 程序流程图

图10-61 软件流程图

10.8.3.3 软件代码

#include

#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;

while(ms–)

{

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] != )

{

lcd_wdat(dis1[i]);//显现字符

i++;

}

lcd_pos(0x42);// 设置显现方位

i = 0;

while(dis2[i] != )

{

lcd_wdat(dis2[i]);// 显现字符

i++;

}

while(1);

}

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/bandaoti/ic/261361.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部