搜档网
当前位置:搜档网 › 1602字符型液晶显示篇

1602字符型液晶显示篇

1602字符型液晶显示篇
1602字符型液晶显示篇

1602字符型液晶显示篇

《电子制作》2008年1月站长原创,如需引用请注明出处

在日常生活中,我们对液晶显示器并不陌生?液晶显示模块已作为很多电子产品的通过器件,如在计算器?万用表?电子表及很多家用电子产品中都可以看到,显示的主要是数字?专用符号和图形?在单片机的人机交流界面中,一般的输出方式有以下几种:发光管?LED数码管?液晶显示器?发光管和LED数码管比较常用,软硬件都比较简单,在前面章节已经介绍过,在此不作介绍,本章重点介绍字符型液晶显示器的应用?

在单片机系统中应用晶液显示器作为输出器件有以下几个优点:

显示质量高

由于液晶显示器每一个点在收到信号后就一直保持那种色彩和亮度,恒定发光,而不像阴极射线管显示器(CRT)那样需要不断刷新新亮点?因此,液晶显示器画质高且不会闪烁?

数字式接口

液晶显示器都是数字式的,和单片机系统的接口更加简单可靠,操作更加方便?

体积小?重量轻

液晶显示器通过显示屏上的电极控制液晶分子状态来达到显示的目的,在重量上比相同显示面积的传统显示器要轻得多?

功耗低

相对而言,液晶显示器的功耗主要消耗在其内部的电极和驱动IC上,因而耗电量比其它显示器要少得多?

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上得到一个完整汉字?

2 1602字符型LCD简介

字符型液晶显示模块是一种专门用于显示字母?数字?符号等点阵式LCD,目前常用16*1,16*2,20*2和40*2行等的模块?下面以长沙太阳人电子有限公司的1602字符型液晶显示器为例,介绍其用法?一般1602字符型液晶显示器实物如图1:

图11602字符型液晶显示器实物图

1.1602LCD的基本参数及引脚功能

1602LCD分为带背光和不带背光两种,基控制器大部分为HD44780,带背光的比不带背光的厚,是否带背光在应用中并无差别,两者尺寸差别如下图2所示:

图21602LCD尺寸图

1602LCD主要技术参数:

显示容量:16×2个字符

芯片工作电压: 工作电流:

模块最佳工作电压:

字符尺寸:×(W×H)mm

引脚功能说明

1602LCD采用标准的141所示:

编号符号引脚说明

1VSS电源地

2VDD电源正极

3VL液晶显示偏压

4RS数据/命令选择

5R/W读/写选择

6E使能信号

7D0数据

8D1数据

9D2数据

10D3数据

11D4数据

12D5数据

13D6数据

14D7数据

15BLA背光源正极

16BLK背光源负极

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

2.1602LCD的指令说明及时序

表2:控制命令表

1602液晶模块的读写操作?屏幕和光标的操作都是通过指令编程来实现的?(说明:1为高电平?0为低电平)

指令1: 清显示,指令码01H,光标复位到地址00H位置?

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

指令3: 光标和显示模式设置

I/D: 光标移动方向,高电平右移,低电平左移

S: 屏幕上所有文字是否左移或者右移?高电平表示有效,低电平则无效?

指令4: 显示开关控制?

D: 控制整体显示的开与关,高电平表示开显示,低电平表示关显示

C: 控制光标的开与关,高电平表示有光标,低电平表示无光标

B: 控制光标是否闪烁,高电平闪烁,低电平不闪烁?

指令5: 光标或显示移位

该指令设置光标和画面的特性?

S/C: 滚动对像的选择,高电平时移动显示的文字,低电平时移动光标?

S/C=1画面滚动

S/C=0光标滚动

R/L:滚动方向的选择

R/L=1向右滚动

R/L=0向左滚动

指令6: 功能设置命令

DL: 低电平时为4位总线,高电平时为8位总线

N: 低电平时为单行显示,高电平时双行显示

F: 低电平时显示5x7的点阵字符,高电平时显示5x11的点阵字符?

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

指令8: DDRAM地址设置?

指令9: 读忙信号和光标地址

BF: 忙标志位,高电平表示忙,此时模块不接收命令或者数据,如为低,表示不忙?

指令10: 写数据?

指令11: 读数据?

状态字:

,低7位为当前数据指针的地址值(即AC值);如下表:

,都要确认该位值为0才可进行操作?

AC6~0为7位的AC值,表示当前数据指针的地址值?

DL: 设置控制器与MCU的接口形式,一般设置为1;

DL=1: 数据总线宽度为8位,即DB7~DB0有效;

DL=0: 数据总线宽度为4位,即DB7~DB4有效;

N: 设置显示字符的行数,1602 LCD一般都设置为1;

N=0: 为一行字符;

N=1: 为两行字符;

F: 设置显示字符的字体,一般设置为0;

F=0: 为5X7点阵字符体;

F=1: 为5X11点阵字符体;

显示状态设置指令:

该指令控制着画面?光标和闪烁的开与关?

D: 画面显示状态位;

D=1为显示开,

D=0为显示关;该指令仅影响显示屏的开关,并不影响显存中的数据?

C:光标显示状态位;

C=1光标显示;

C=0光标不显示?

B:闪烁显示状态位;

B=1时闪烁启动;

B=0时闪烁关闭;闪烁只对于当前地址指针指和的字符位有效?

光标或画面滚动设置指令:

S/C:滚动对像的选择

S/C=1 画面滚动

S/C=0 光标滚动

R/L:滚动方向的选择

R/L=1 向右滚动

R/L=0 向左滚动

输入方式设置指令:

该指令的功能在于设置显示字符的输入方式,即在操作数据写入/读出后,AC数据地址指针的修改方式?

I/D: I/D=0 AC为自动减1的计数器,操作数据后AC自动减一;

I/D=1 AC为自动加1计数器,操作数据后AC自动加1;

S: 设置写入字符数据时是否允许画面滚动/光标移动(AC自动变化)

S=0 禁止

S=1 允许

清屏指令:

该指令将空格码(0x20)写入显存中;达到清屏显示的功能?

归位指令:

该指令将6位的CGRAM地址写入地址指针计数器AC内,随后的对数据的操作是对CGRAM的读/读操作?

注: CGRAM为用户自定义字符字符的空间,并非对应LCD屏上字符位置的显存(DDRAM)?

AC当中,随后的数据操作是对DDRAM(显存)的读/写操作?

读数据输入RS=H,R/W=H,E=H输出D0~D7=数据

写数据输入RS=H,R/W=L,D0~D7=数据,E=高脉冲输出无

表3:基本操作时序表

读写操作时序如图3和图4所示:

图3读操作时序

图4写操作时序

3.1602LCD的RAM地址映射及标准字库表

液晶显示模块是一个慢显示器件,所以在执行每条指令之前一定要确认模块的忙标志为低电平,表示不忙,否则此指令失效?要显示字符时要先输入显示字符地址,也就是告诉模块在哪里显示字符,图5是1602的内部显示地址?

图51602LCD内部显示地址

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

在对液晶模块的初始化中要先设置其显示模式,在液晶模块显示字符时光标是自动右移的,无需人工干预?每次输入指令前都要判断液晶模块是否处于忙的状态?

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

图6字符代码与图形对应图

4.1602LCD的一般初始化(复位)过程延时15ms

写指令38H(不检测忙信号)

延时5ms

写指令38H(不检测忙信号)

延时5ms

写指令38H(不检测忙信号)

以后每次写指令?读/写数据操作均需要检测忙信号

写指令38H:显示模式设置

写指令08H:显示关闭

写指令01H:显示清屏

写指令06H:显示光标移动设置

写指令0CH:显示开及光标设置

写指令0CH :显示开及光标设置

延时5ms

写指令38H (不检测忙信号BF )

延时5ms

写指令38H (不检测忙信号BF )

延时5ms

写指令38H (不检测忙信号BF )写指令38H :显示模式设置写指令08H :显示关闭写指令01H :显示清屏写指令06H :显示光标移动设置写指令38H (不检测忙信号BF )

3 1602LCD 的软硬件设计实例

在1602LCD 第一行显示网站名:在第二行显示联系电话:8?实验前应先将显示切换开关切换到LCD 工作状态?

图71602LCD实验演示图

1.硬件原理图

1602液晶显示模块可以和单片机AT89C51直接接口,电路如图8所示?

图8硬件原理图

2.程序流程图

图9软件流程图

3.软件代码

/***************************************************************************/ /*杭州电子&计算机工作室*/

/*演示程序*/

/*目标器件:AT89S51*/

/*晶振:*/

/*编译环境:Keil 7.50A*/

/***************************************************************************/ /*********************************包含头文件********************************/ #include <>

#include <>

/*********************************端口定义**********************************/ sbit rs = P1^0;

sbit rw = P1^1;

sbit ep = P1^2;

/********************************显示数据表*********************************/ unsigned char code dis1[] = {""};

unsigned char code dis2[] = {"099"};

/*****************************************************************************函数功能:LCD延时子程序

入口参数:ms

出口参数:

*****************************************************************************/ void delay(unsigned char ms)

{

unsigned char i;

while(ms--)

{

for(i = 0; i< 250; i++)

{

_nop_();

_nop_();

_nop_();

_nop_();

}

}

}

/*****************************************************************************函数功能:测试LCD忙碌状态

入口参数:

出口参数:result

*****************************************************************************/ bit lcd_bz()

{

bit result;

rs = 0;

rw = 1;

ep = 1;

_nop_();

_nop_();

_nop_();

_nop_();

result = (bit)(P0 & 0x80);

ep = 0;

return result;

}

/*****************************************************************************函数功能:写指令数据到LCD子程序

入口参数:cmd

出口参数:

*****************************************************************************/ 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;

}

/*****************************************************************************函数功能:设定显示位置子程序

入口参数:pos

出口参数:

*****************************************************************************/ void lcd_pos(unsigned char pos)

{

lcd_wcmd(pos | 0x80);

}

/*****************************************************************************函数功能:写入显示数据到LCD子程序

入口参数:dat

出口参数:

*****************************************************************************/ 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;

}

/*****************************************************************************

函数功能:LCD初始化子程序

入口参数:

出口参数:

*****************************************************************************/ 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(0x40); //设置显示位置

i = 0;

while(dis2[i] != '\0')

{

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

i++;

}

while(1){;};

}

/***************************************************************************

标题: LCD1602

效果: 本程序在液晶LCD1602上显示两行字符

工作于:51开发板

作者: 孟庆全

网站:

****************************************************************************/

#include ""

/********IO引脚定义***********************************************************/

sbit LCD_RS=P1^0; //定义引脚

sbit LCD_RW=P1^1;

sbit LCD_E=P1^2;

/********宏定义**************************************************************/

#define LCD_Data P0

#define Busy0x80//用于检测LCD状态字中的Busy标识

/********数据定义*************************************************************/

unsigned char code uctech[] = {"Happy every day"};

unsigned char code net[] = {""};

/********函数声明*************************************************************/

void WriteDataLCD(unsigned char WDLCD); //写数据

void WriteCommandLCD(unsigned char WCLCD,BuysC); //写命令

unsigned char ReadDataLCD(void); //读数据

unsigned char ReadStatusLCD(void); //读状态

void LCDInit(void); //初始化

void DisplayOneChar(unsigned char X,unsigned char Y,unsigned char DData); //相应坐标显示字节内容void DisplayListChar(unsigned char X,unsigned char Y,unsigned char code *DData); //相应坐标开始显示一串内容void Delay5ms(void); //延时

void Delay400ms(void); //延时

/***********主函数开始********************************************************/

void main(void)

{

Delay400ms(); //启动等待,等LCD讲入工作状态LCDInit(); //初始化

Delay5ms(); //延时片刻(可不要)

DisplayListChar(0,0,uctech);

DisplayListChar(1,5,net);

ReadDataLCD(); //测试用句无意义

while(1);

}

/***********写数据***********************************************************/

void WriteDataLCD(unsigned char WDLCD)

{

ReadStatusLCD(); //检测忙

LCD_Data = WDLCD;

LCD_RS = 1;

LCD_RW = 0;

LCD_E = 0; //若晶振速度太高可以在这后加小的延时LCD_E = 0; //延时

LCD_E = 1;

}

/***********写指令**********************************************************/

void WriteCommandLCD(unsigned char WCLCD,BuysC) //BuysC为0时忽略忙检测

{

if (BuysC) ReadStatusLCD(); //根据需要检测忙

LCD_Data = WCLCD;

LCD_RS = 0;

LCD_RW = 0;

LCD_E = 0;

LCD_E = 0;

LCD_E = 1;

}

/***********读数据*************************************************************/

unsigned char ReadDataLCD(void)

{

LCD_RS = 1;

LCD_RW = 1;

LCD_E = 0;

LCD_E = 0;

LCD_E = 1;

return(LCD_Data);

}

/***********读状态************************************************************/

unsigned char ReadStatusLCD(void)

{

LCD_Data = 0xFF;

LCD_RS = 0;

LCD_RW = 1;

LCD_E = 0;

LCD_E = 0;

LCD_E = 1;

while (LCD_Data & Busy); //检测忙信号

return(LCD_Data);

}

/***********初始化*************************************************************/

void LCDInit(void)

{

LCD_Data = 0;

WriteCommandLCD(0x38,0); //三次模式设置,不检测忙信号Delay5ms();

WriteCommandLCD(0x38,0);

Delay5ms();

WriteCommandLCD(0x38,0);

1602字符液晶显示原理+实例详解

1602详细资料和实例 1602字符液晶在实际的产品中运用的也比较多了,前几天留意了一下,发现宿舍门前的自动售水机就是采 用的1602液晶进行显示的。而且对于单片机的学习而言,掌握1602的用法是每一个学习者必然要经历的过程。在此,我将使用1602过程中遇到的问题以及感受记录下来,希望能够给初学者带来一点指导,少走一点弯路。 所谓1602是指显示的内容为16*2,即可以显示两行,每行16个字符。目前市面上字符液晶绝大多 数是基于HD44780液晶芯片的,控制原理是完全相同的,因此基于HD44780写的控制程序可以很方便地应用于市面上大部分的字符型液晶。 1602液晶的正面(绿色背光,黑色字体) 1602液晶背面(绿色背光,黑色字体)

另一种1602液晶模块,显示屏是蓝色背光白色字体 字符型LCD1602通常有14条引脚线或16条引脚线的LCD,多出来的2条线是背光电源线VCC(15脚)和地线GND(16脚),其控制原理与14脚的LCD完全一样,引脚定义如下表所示:

HD44780内置了DDRAM、CGROM和CGRAM。 DDRAM就是显示数据RAM,用来寄存待显示的字符代码。共80个字节,其地址和屏幕的对应关系如下表:

也就是说想要在LCD1602屏幕的第一行第一列显示一个"A"字,就要向DDRAM的00H地址写入“A”字的代码(指A的字模代码,0x20~0x7F为标准的ASCII码,通过这个代码,在CGROM中查找到相应的字符显示)就行了。但具体的写入是要按LCD模块的指令格式来进行的,后面我会说到的。那么一行可有40个地址呀?是的,在1602中我们就用前16个就行了。第二行也一样用前16个地址。对应如下:DDRAM地址与显示位置的对应关系。 (事实上我们往DDRAM里的00H地址处送一个数据,譬如0x31(数字1的代码,见字模关系对照表)并不能显示1出来。这是一个令初学者很容易出错的地方,原因就是如果你要想在DDRAM的00H 地址处显示数据,则必须将00H加上80H,即80H,若要在DDRAM的01H处显示数据,则必须将01H 加上80H即81H。依次类推。大家看一下控制指令的的8条:DDRAM地址的设定,即可以明白是怎么样的一回事了),1602液晶模块内部的字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形(无汉字),如下表所示,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码,比如大写的英文字母“A”的代码是01000001B(41H)(其实是1个地址),显示时模块把地址41H中的点阵字符图形显示出来,我们就能看到字母“A”。

1602液晶字符显示

1.基本简介 LCD1602工业字符型液晶,能够同时显示16x02即32个字符。(16列2行) 1602液晶也叫1602字符型液晶,它是一种专门用来显示字母、数字、符号等的点阵型液晶模块。它由若干个5X7或者5X11等点阵字符位组成,每个点阵字符位都可以显示一个字符,每位之间有一个点距的间隔,每行之间也有间隔,起到了字符间距和行间距的作用,正因为如此所以它不能很好地显示图形(用自定义CGRAM,显示效果也不好)。 1602LCD是指显示的内容为16X2,即可以显示两行,每行16个字符液晶模块(显示字符和数字)。 目前市面上字符液晶绝大多数是基于HD44780液晶芯片的,控制原理是完全相同的,因此基于HD44780写的控制程序可以很方便地应用于市面上大部分的字符型液晶。2.管脚功能 1602采用标准的16脚接口,其中: 第1脚:VSS为电源地 第2脚:VCC接5V电源正极 第3脚:V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高(对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度)。 第4脚:RS为寄存器选择,高电平1时选择数据寄存器、低电平0时选择指令寄存器。 第5脚:RW为读写信号线,高电平(1)时进行读操作,低电平(0)时进行写操作。 第6脚:E(或EN)端为使能(enable)端,高电平(1)时读取信息,负跳变时执行指令。 第7~14脚:D0~D7为8位双向数据端。 第15~16脚:空脚或背灯电源。15脚背光正极,16脚背光负极。 ⑶特性 3.3V或5V工作电压,对比度可调 内含复位电路 提供各种控制命令,如:清屏、字符闪烁、光标闪烁、显示移位等多种功能 有80字节显示数据存储器DDRAM

LCD1602自定义显示字符

LCD1602自定义显示字符 从CGROM表中可以看到,在表的最左边是一列可以允许用户自定义的CGRAM,从上往下看着是16个, 实际只有8个字节可用。它的字符码是00000000-00000111这8个地址,表的下面还有8个字节,但因为这个CGRAM的字符码规定0-2位为地址,3位无效,4-7全为零。因此CGRAM的字符码只有最后三位能用也就是8个字节了。等效为0000x111,x为无效位,最后三位为000-111共8个。 如果我们要想显示这8个用户自定义的字符,操作方法和显示CGROM一样,先设置DDRAM位置,再向DDRAM写入字符码,例如“A”就是41H。现在我们要显示CGRAM的第一个自定义字符,就向DDRAM写入00000000B(00H),如果要显示第8个就写入00000111(08H)。 从这个指令可以看出指令数据的高2位已固定是01,只有后面的6位是地址数据,而这6位中的高3位就表示这八个自定义字符,最后的3位就是字模数据的八个地址了。例如第一个自定义字符的字模地址为01000000-01000111八个地址。 我们向这8个字节写入字模数据,让它能显示出“℃” 地址:01000000数据:00010000图示:○○○■○○○○ 0100000100000110○○○○○■■○ 0100001000001001○○○○■○○■ 0100001100001000○○○○■○○○ 0100010000001000○○○○■○○○ 0100010100001001○○○○■○○■ 0100011000000110○○○○○■■○ 0100011100000000○○○○○○○○ 字定义字符地址 0x40————0x00 0x48————0x01 0x50————0x02 0x58————0x03 0x60————0x04 0x68————0x05 0x70————0x06 0x78————0x07 程序操作: 1.定义字符数组 uchar code Word1[]={0x15,0x0A,0x15,0x0A,0x15,0x0A,0x15,0x0A};//自定义字符数组 2.写数据到CGRAM中 uchar j; WriteCommandLCD(0x40); for(j=0;j<8;j++) { WriteDataLCD(Word1[j]); } 3.读取数据并显示 WriteCommandLCD(0xC8);//显示在第一行 WriteDataLCD(0x00);//地址

LCD1602汉字显示讲解

LCD1602显示汉字研究与程序设计 1602是一款最常用也是最便宜的液晶显示屏。最多可以显示两行标准字符,每行最多可以显示16个字符。 1602可以显示内部常用字符(包括阿拉伯数字,英文字母大小写,常用符号和日文假名等),也可以显示自定义字符(单或多个字符组成的简单汉字,符号,图案等,最多可以产生8个自定义字符)。 一、显示常用字符。 1602液晶模块内部的字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形,如下表所示,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码,比如大写的英文字母“A”的代码是41H,显示时模块把地址41H中的点阵字符图形显示出来,我们就能看到字母“A” 十进制十六进制ASCII字符十进制十六进制ASCII 字符十进制十六进制ASCII字符 00 00 自定义字符1 56 38 8 96 60 ` 01 01 自定义字符2 57 39 9 97 61 a 02 02 自定义字符3 58 3A : 98 62 b 03 03 自定义字符4 59 3B ; 99 63 c 04 04 自定义字符5 60 3C < 100 64 d 05 05 自定义字符6 61 3D = 101 65 e 06 06 自定义字符7 62 3E > 102 66 f 07 07 自定义字符8 63 3F ? 103 67 g 08 08 自定义字符1 64 40 @ 104 68 h 09 09 自定义字符2 65 41 A 105 69 i 10 0A 自定义字符3 66 42 B 106 6A j 11 0B 自定义字符4 67 43 C 107 6B k 12 0C 自定义字符5 68 44 D 108 6C l 13 0D 自定义字符6 69 45 E 109 6D m 14 0E 自定义字符7 70 46 F 110 6E n 15 0F 自定义字符8 71 47 G 111 6F o 32 20 空格72 48 H 112 70 p 33 21 ! 73 49 I 113 71 q 34 22 " 74 4A J 114 72 r 35 23 # 75 4B K 115 73 s 36 24 $ 76 4C L 116 74 t 37 25 % 77 4D M 117 75 u 38 26 & 78 4E N 118 76 v 39 27 ' 79 4F O 119 77 w 40 28 ( 80 50 P 120 78 x 41 29 ) 81 51 Q 121 79 y 42 2A * 82 52 R 122 7A z 43 2B + 83 53 S 123 7B { 44 2C , 84 54 T 124 7C | 45 2D - 85 55 U 125 7D }

1602液晶字符显示

1602液晶字符显示屏的原理 管脚功能/1602字符液晶编辑 1602字符型LCD通常有14条引脚线或16条引脚线的LCD,多出来的2条线是背光电源线 VCC(15脚)和地线GND(16脚),其控制原理与14脚的LCD完全一样,其中: 引脚符号功能说明 1VSS一般接地 2VDD接电源(+5V) 3V0液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高(对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度)。 4RS RS为寄存器选择,高电平1时选择数据寄存器、低电平0时选择指令寄存器。5R/W R/W为读写信号线,高电平(1)时进行读操作,低电平(0)时进行写操作。 6E E(或EN)端为使能(enable)端,写操作时,下降沿使能。 读操作时,E高电平有效 7DB0低4位三态、双向数据总线0位(最低位)8DB1低4位三态、双向数据总线1位 9DB2低4位三态、双向数据总线2位 10DB3低4位三态、双向数据总线3位 11DB4高4位三态、双向数据总线4位 12DB5高4位三态、双向数据总线5位

13DB6高4位三态、双向数据总线6位 14DB7高4位三态、双向数据总线7位(最高位)(也是busy flag) 15BLA背光电源正极 16BLK背光电源负极 寄存器选择控制表 RS R/W操作说明 00写入指令寄存器(清除屏等) 01读busy flag(DB7),以及读取位址计数器(DB0~DB6)值 10写入数据寄存器(显示各字型等) 11从数据寄存器读取数据 注:关于E=H脉冲——开始时初始化E为0,然后置E为1,再清0. busy flag(DB7):在此位为1时,LCD忙,将无法再处理其他的指令要求。 字符集/1602字符液晶编辑 1602液晶模块内部的字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码,比如大写的英文字母“A”的代码是01000001B(41H),显示时模块把地址41H中的点阵字符图形显示出来,我们就能看到字母“A”。 因为1602识别的是ASCII码,试验可以用ASCII码直接赋值,在单片机编程中还可以用字符型常量或变量赋值,如'A’。 以下是1602的16进制ASCII码表: (图片打开是大图) 读的时候,先读上面那列,再读左边那行,如:感叹号!的ASCII为0x21,字母B的ASCII 为0x42(前面加0x表示十六进制)。 显示地址/1602字符液晶编辑 1602字符液晶显示可分为上下两部分各16位进行显示,处于不同行时的字符显示地址如下

1602液晶字符显示

1602液晶字符显示

1.基本简介 LCD1602工业字符型液晶,能够同时显示16x02即32个字符。(16列2行) 1602液晶也叫1602字符型液晶,它是一种专门用来显示字母、数字、符号等的点阵型液晶模块。它由若干个5X7或者5X11等点阵字符位组成,每个点阵字符位都可以显示一个字符,每位之间有一个点距的间隔,每行之间也有间隔,起到了字符间距和行间距的作用,正因为如此所以它不能很好地显示图形(用自定义CGRAM,显示效果也不好)。 1602LCD是指显示的内容为16X2,即可以显示两行,每行16个字符液晶模块(显示字符和数字)。 目前市面上字符液晶绝大多数是基于HD44780液晶芯片的,控制原理是完全相同的,因此基于HD44780写的控制程序可以很方

便地应用于市面上大部分的字符型液晶。 2.管脚功能 1602采用标准的16脚接口,其中: 第1脚:VSS为电源地 第2脚:VCC接5V电源正极 第3脚:V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高(对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度)。 第4脚:RS为寄存器选择,高电平1时选择数据寄存器、低电平0时选择指令寄存器。 第5脚:RW为读写信号线,高电平(1)时进行读操作,低电平(0)时进行写操作。 第6脚:E(或EN)端为使能(enable)端,高电平(1)时读取信息,负跳变时执行指令。 第7~14脚:D0~D7为8位双向数据端。 第15~16脚:空脚或背灯电源。15脚背光正极,16脚背光负极。 ⑶特性 3.3V或5V工作电压,对比度可调

LCD1602

LCD1602显示屏与单片机的连接 LCD1602简介 工业字符型液晶,能够同时显示16x02即32个字符。(16列2行) 注:为了表示的方便,后文皆以1表示高电平,0表示低电平。 1602液晶也叫1602字符型液晶,它是一种专门用来显示字母、数字、符号等的点阵型液晶模块。它由若干个5X7或者5X11等点阵字符位组成,每个点阵字符位都可以显示一个字符,每位之间有一个点距的间隔,每行之间也有间隔,起到了字符间距和行间距的作用,正因为如此所以它不能很好地显示图形(用自定义CGRAM,显示效果也不好)。 1602LCD是指显示的内容为16X2,即可以显示两行,每行16个字符液晶模块(显示字符和数字)。

市面上字符液晶大多数是基于HD44780液晶芯片的,控制原理是完全相同的,因此基于HD44780写的控制程序可以很方便地应用于市面上大部分的字符型液晶。 管脚功能 LCD1602引脚图 1602采用标准的16脚接口,其中: 第1脚:VSS为电源地 第2脚:VCC接5V电源正极 第3脚:V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高(对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度)。 第4脚:RS为寄存器选择,高电平1时选择数据寄存器、低电平0时选择指令寄存器。 第5脚:RW为读写信号线,高电平(1)时进行读操作,低电平(0)时进行写操作。第6脚:E(或EN)端为使能(enable)端,高电平(1)时读取信息,负跳变时执行指令。 第7~14脚:D0~D7为8位双向数据端。 第15~16脚:空脚或背灯电源。15脚背光正极,16脚背光负极。 特性 3.3V或5V工作电压,对比度可调 内含复位电路 提供各种控制命令,如:清屏、字符闪烁、光标闪烁、显示移位等多种功能 有80字节显示数据存储器DDRAM 内建有192个5X7点阵的字型的字符发生器CGROM 8个可由用户自定义的5X7的字符发生器CGRAM 特征应用 微功耗、体积小、显示内容丰富、超薄轻巧,常用在袖珍式仪表和低功耗应用系统中。 操作控制 注:关于E=H脉冲——开始时初始化E为0,然后置E为1。

LCD1602显示全部字库字符

LCD1602显示全部字库字符、看门狗定时器测试 LCD1602液晶内含有192个字符字库,这个程序是分6屏进行显示,整个显示过程长约7秒,看门狗定时器设置时间为8.38秒,刚好显示完全部字符,修改看门狗就可以看到在显示中途重启,比较直观 LCD_E BIT P3.4 ;LCD片选 LCD_RS BIT P3.5 ;指令、数据位 LCD_RW BIT P3.6 ;读、写位 PORT EQU P0 ;端口定义 WDT_COUNT EQU 0E1H ;看门狗 START: LCALL LCD_INIT LCALL WDT_INIT MOV A,#01H ;清屏 LCALL WR_CMD DISP_LOOP: MOV R0,#06H ;循环计数器 MOV R1,#80H ;LCD地址计数器 MOV R2,#00H ;字符表指针计数器 MOV DPTR,#TAB WR_DAT_LOOP: MOV A,R1 ;地址命令 LCALL WR_CMD INC R1 ;地址加一 MOV A,R2 ;表指针 MOVC A,@A+DPTR LCALL WR_DA T LCALL DELAY100MS INC R2 ;表指针加一 CJNE R1,#90H,BIJIAO ;字符是否到16 MOV R1,#0C0H ;到16,换地址 BIJIAO: CJNE R1,#0D0H,WR_DAT_LOOP ;字符数是否到32 MOV R1,#80H ;地址回归 LCALL DELAY1S MOV A,#1B ;清屏 LCALL WR_CMD DJNZ R0,WR_DA T_LOOP MOV WDT_COUNT,#00110111B LJMP DISP_LOOP LCD_INIT: MOV A,#111000B ;8位总线 LCALL WR_CMD MOV A,#10B ;数据指针清零

液晶1602显示字符代码

1602液晶字符码 十十六ASCII 十十六ASCII 十十六ASCII 进制进制字符进制进制字符进制进制字符 00 00 自定义字符1 56 38 8 96 60 ` 01 01 自定义字符2 57 39 9 97 61 a 02 02 自定义字符3 58 3A : 98 62 b 03 03 自定义字符4 59 3B ; 99 63 c 04 04 自定义字符5 60 3C < 100 64 d 05 05 自定义字符6 61 3D = 101 65 e 06 06 自定义字符7 62 3E > 102 66 f 07 07 自定义字符8 63 3F ? 103 67 g 08 08 自定义字符1 64 40 @ 104 68 h 09 09 自定义字符2 65 41 A 105 69 i 10 0A 自定义字符3 66 42 B 106 6A j 11 0B 自定义字符4 67 43 C 107 6B k 12 0C 自定义字符5 68 44 D 108 6C l 13 0D 自定义字符6 69 45 E 109 6D m 14 0E 自定义字符7 70 46 F 110 6E n 15 0F 自定义字符8 71 47 G 111 6F o 32 20 空格72 48 H 112 70 p 33 21 ! 73 49 I 113 71 q 34 22 " 74 4A J 114 72 r 35 23 # 75 4B K 115 73 s 36 24 $ 76 4C L 116 74 t 37 25 % 77 4D M 117 75 u 38 26 & 78 4E N 118 76 v 39 27 ' 79 4F O 119 77 w 40 28 ( 80 50 P 120 78 x 41 29 ) 81 51 Q 121 79 y 42 2A * 82 52 R 122 7A z 43 2B + 83 53 S 123 7B { 44 2C , 84 54 T 124 7C | 45 2D - 85 55 U 125 7D } 46 2E . 86 56 V 126 7E ~ 47 2F / 87 57 W 48 30 0 88 58 X 49 31 1 89 59 Y 50 32 2 90 5A Z 51 33 3 91 5B [ 52 34 4 92 5C \ 53 35 5 93 5D ] 54 36 6 94 5E ^ 55 37 7 95 5F _

LCD1602液晶显示器

实验11:1602液晶显示屏显示(字符型液晶显示器) 字符型液晶显示器用于数字、字母、符号并可显示少量自定义符号。这类液晶显示器通常 有16根接口线,下表是这16根线的定义。 字符型液晶接口说明 编号符号引脚说明编号符号引脚说明 1 Vss 电源地 9 D 2 数据线2 2 Vdd 电源正 10 D 3 数据线3 3 VL 液晶显示偏压信号 11 D 4 数据线4 4 RS 数据/命令选择端 12 D 5 数据线5 5 R/W 读/ 写选择端 13 D 6 数据线6 6 E 使能信号 14 D 7 数据线7 7 D0 数据线0 15 BLA 背光源正极 8 D1 数据线1 16 BLK 背光源负极(本学习板配的 内部已经接地) 下图是字符型液晶显示器与单片机的接线图。这用了P0口的8根线作为液晶显示器的数据 线,用P20、P21、P22做为3根控制线。

字符型液晶显示器与单片机的接线图 字符型液晶显示器的使用,字符型液晶显示器一般采用HD44780芯片做为控制器的。 1.字符型液晶显示器的驱动程序 这个驱动程序适用于1602型字符液晶显示器, 1) 初始化液晶显示器命令(RSTLCD) 设置控制器的工作模式,在程序开始时调用。 参数:无。 2) 清屏命令(CLRLCD) 清除屏幕显示的所有内容 参数:无 3) 光标控制命令(SETCUR) 用来控制光标是否显示及是否闪烁 参数:1个,用于设定显示器的开关、光标的开关及是否闪烁。 4) 写字符命令(WRITECHAR) 在指定位置(行和列)显示指定的字符。

参数:共有3个,即行值、列值及待显示字符,分别存放在XPOS、YPOS和A中。其中行值与列值均从0开始计数,A中可直接写入字符的符号,编译程序自动转化为该字符的ASCII 值。 5) 字符串命令(WRITESTRING) 在指定位置显示指定的一串字符。 参数:共有3个,即行值、列值和R0指向待显示字符串的内存首地址,字符串须以0结尾。如果字符串的长度超过了从该列开始可显示的最多字符数,则其后字符被截断,并不在下 行显示出来。 以下是驱动源程序 ;************************************************** ;连线图: ; DB0---DPROT.0 DB4---DPROT.4 RS-------------P2.0 ; DB1---DPROT.1 DB5---DPROT.5 RW-------------P2.1 ; DB2---DPROT.2 DB6---DPROT.6 E--------------P2.2 ; DB3---DPROT.3 DB7---DPROT.7 VLCD接1K电阻到GND* ;系统晶振为11.0592 ;************************************************** RS BIT P2.0 RW BIT P2.1 E BIT P2.2 DPORT EQU P0 XPOS EQU R1 ;列方向地址指针 YPOS EQU R2 ;行方向地址指针 CUR EQU R3 ;设定光标参数 NoDisp EQU 0 ;无显示 NoCur EQU 1 ;有显示无光标 CurNoFlash EQU 2 ;有光标但不闪烁 CurFlash EQU 3 ;有光标且闪烁

1602LCD字符手册

目录 一.字符型模块的性能???????????????????????????????????????1 二.基本原理???????????????????????????????????????????????2 三.技术参数???????????????????????????????????????????????3 四.时序特性???????????????????????????????????????????????4 五.引脚、指功能???????????????????????????????????????????5 六.使用实例???????????????????????????????????????????????6 七.使用注意事项???????????????????????????????????????????7

1.字符型模块的性能 重量轻:<100g; 体积小:<11mm厚; 功耗低:10—15mW; 显示内容:192种字符(5×7点字型); 32种字符(5×10点字型); 可自编8(5×7)或许(5×10)种字符; 指令功能强:可组合成各种输入、显示、移位方式以满足不同的要求; 接口简单方便:可与8位微处理器或微控制器相联; 工作温度宽:0—50oC 可靠性高:寿命为50,000小时(25oC) 2.基本原理 2.1 液晶体 液晶板上排列着若干5×7或5×10点阵的字符显示位,每个显示位可显示1个字符,从规格上分为每行8、16、20、24、32、40位,有一行、两行及四行三类。 2.2 工作电路 图1是字符型模块的电路框图,它由KS0066、KS0065及几个电阻电容组成。KS0065是扩展显示字符用的(例如:16个字符×1行模块就可不用KS0065,16个字符×2行模块就要用1片KS0065)。 图1 接口方面,有8条数据,三条控线。可与微处理器或微控制相连,通过送入数据和指令,就可使模块正常工作,图2是模块和微处理器相连的例子。

已经采用过-LCD1602显示字符和(RAM)数字的汇编程序

单片机LCD1602显示字符和数字的汇编程序(无聊原创) 1,单片机和LCD1602的连线,和程序结果显示如下图: 2,LCD第一行显示字符XIAORENGUANG第二行显示RAM中40H到46H中的数字。程序如下: ORG 0000H AJMP MAIN RS EQU P2.4 RW EQU P2.5 E EQU P2.6 MAIN: MOV SP,#60H MOV 40H,#01H MOV 41H,#02H MOV 42H,#03H MOV 43H,#04H MOV 44H,#05H MOV 45H,#06H MOV 46H,#07H ACALL DD1 ;DD1是LCD初始化

MOV DPTR,#TABLE1 ACALL DD2;DD2是LCD第一行显示TABLE1 ACALL PPP ;PPP是LCD第二行显示RAM中40H到46H中的数据 SJMP $ DD1: MOV p0,#01H ;清屏 CALL ENABLE MOV p0,#38H ;显示功能 CALL ENABLE MOV p0,#0FH ;显示开关控制 CALL ENABLE MOV p0,#06H ;+1 CALL ENABLE RET DD2: MOV p0,#80H;第一行的开始位置 cALL ENABLE CALL WRITE1;到TABLE1取码? RET DD3: MOV p0,#0C0H;第二行的位置 CALL ENABLE CALL WRITE1;到TABLE2 取码 RET ENABLE: CLR RS ;送命令 CLR RW CLR E CALL DELAY SETB E RET WRITE1: MOV R1,#00H ;显示table中的值 A1: MOV A,R1;到table取码 MOVC A,@A+DPTR call wRITE2 ;显示到lcd INC R1 CJNE A,#00H,A1 ;是否到00h RET WRITE2:MOV p0,A ;显示 SETB RS CLR RW CLR E CALL DELAY SETB E RET

LCD1602显示汉字“生日快乐”

1602显示“生日快乐” ////////////////////目标板:红油板///////////////////// ////////////////////修改自:不要显卡《1602显示汉字“生日快乐”》原因:乱码//////////////////////// #include #define uchar unsigned char #define uint unsigned int sbit RS=P0^5; sbit RW=P0^6; sbit E=P0^7; uchar sheng[]={0x04,0x14,0x1f,0x14,0x0e,0x04,0x1f,0x00}; //“生”字字模uchar ri[]={0x1f,0x11,0x11,0x1f,0x11,0x11,0x1f,0x00}; //“日”字字模 uchar kuai[]={0x0a,0x0a,0x1f,0x1b,0x1f,0x0a,0x0d,0x00}; //“快”字字模uchar le[]={0x1e,0x10,0x14,0x1f,0x04,0x15,0x15,0x00}; //“乐”字字模 void delay(uint m) { while(m--); } void Write_Instruction(uchar Instruction) //1602写命令 { delay(5); RS=0;

RW=0; E=1; P2=Instruction; E=0; } void Write_Data(uchar Data) //1602写数据{ delay(5); RS=1; RW=0; E=1; P2=Data; E=0; } void LCD1602_Init() //1602初始化 { Write_Instruction(0x06); Write_Instruction(0x30); Write_Instruction(0x0c); } void main() { uchar i; LCD1602_Init();

单片机+LCD1602液晶显示字符串

1602液晶显示字符串(附带程序)(注意说明:使用的实验板是郭天祥老师的52单片机板)

基本操作电路 状态字说明 RAM地址映射图

初始化相关指令的意思 读时序图

写时序图

要想通过1602液晶来显示你想要显示字符串,其实是很简单的,程序虽然有点长,但是都是按照步骤来的。 1602的五大步骤 第一个步骤: 检查LCD忙状态 lcd_busy为1时,忙,等待。lcd-busy为0时,闲,可写指令与数据。第二个步骤: 写指令数据到LCD RS=L,RW=L,E=高脉冲,D0-D7=指令码。 第三个步骤: 写显示数据到LCD RS=H,RW=L,E=高脉冲,D0-D7=数据。 第四个步骤: 设定显示位置 第五个步骤: LCD初始化设定 只要这五步你弄懂了,什么样的字符串都可以按照你的方式显示。至于这其中的步骤的具体的方式,我们就要参照1602的资料和时序图!不过你大可不必,这份文档就足够了! #include #include #define uchar unsigned char #define uint unsigned int

sbit dula=P2^6; sbit wela=P2^7; sbit LCD_RS = P3^5; sbit LCD_RW = P3^6; sbit LCD_EN = P3^4; uchar code dis1[] = {" WLCOME TO "}; uchar code dis2[] = {" JIANG GAN HUA "}; uchar code dis3[] = {" NAN CHANG "}; uchar code dis4[] = {" HANG KONG DX"}; void delay(int ms) { int i; while(ms--) { for(i = 0; i< 110; i++) { _nop_(); } } } bit lcd_busy() { bit result; LCD_RS = 0; LCD_RW = 1; LCD_EN = 1; _nop_(); _nop_(); _nop_(); _nop_(); result = (bit)(P0&0x80); LCD_EN = 0; return result; } void lcd_wcmd(uchar cmd) { while(lcd_busy()); LCD_RS = 0; LCD_RW = 0; LCD_EN = 0; _nop_(); _nop_(); P0 = cmd;

1602显示汉字

液晶显示模块LCD1602介绍液晶显示(LCD)是单片机应用系统中的一种常见人机接口形式,其优点是体积小、重量轻、功耗低。目前市场上的液晶显示器主要有字段型、点阵字符型和点阵图形三大类。 此处介绍点阵字符型LCD1602。 点阵字符型液晶显示根据显示容量可以分为1*16,2*16,2*20字等形式。LCD1602为2*16型。 LCD1602可以显示内部常用字符(包括阿拉伯数字,英文字母大小写,常用符号和日文假名等),也可以显示自定义字符(单或多个字符组成的简单汉字,符号,图案等,最多可以产生8个自定义字符)。 LCD1602模块采用16引脚接线: 引脚01:Vss,接地。 引脚02:Vdd,接5V。 引脚03:VL,对比度调整端。通常接地,此时对比度最高。 引脚04:RS,数据/命令寄存器选择端。1→数据寄存器,0→命令寄存器。 引脚05:RW,读/写选择端。1→读,0→写。 引脚06:E,使能端。1→0跳变时液晶模块执行命令。 引脚07-14,D0-D7,8位双向数据总线。 引脚15:BLA,背光正极。 应缴16:BLK,背光负极。 LCD1602模块的命令,共有11条,如表1所示 表1 LCD1602的操作命令 序号指令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 0 I/D S 4 显示与不显示设置0 0 0 0 0 1 D C B 0 0 0 0 0 1 S/C R/L * * 5 光标或屏幕内容移位 选择 6 功能设置0 0 0 0 1 DL N F * * 7 CGRAM地址设置0 0 0 1 CGRAM地址 8 DDRAM地址设置0 0 1 DDRAM地址 0 1 BF 计数器地址 9 读忙标志和计数器地 址设置 10 写DDRAM或 1 0 要写的数据 CGROM 1 1 读出的数据 11 读DDRAM或 CGROM 命令说明: 命令1:清屏。光标回到左上角,地址计数器设为0. 命令2:光标归位。光标回到左上角。

1602字符型液晶显示器

1602字符型液晶显示器 在单片机的人机交流界面中,一般的输出方式有以下几种:发光管、LED数码管、液晶显示器。发光管和LED数码管比较常用,软硬件都比较简单,在前面章节已经介绍过,在此不作介绍,本章重点介绍字符型液晶显示器的应用。在日常生活中,我们对液晶显示器并不陌生。液晶显示模块已作为很多电子产品的通过器件,如在计算器、万用表、电子表及很多家用电子产品中都可以看到,显示的主要是数字、专用符号和图形。 1602字符型LCD简介: 字符型液晶显示模块是一种专门用于显示字母、数字、符号等点阵式LCD,目前常用16*1,16*2,20*2和40*2行等的模块。下面以长沙太阳人电子有限公司的1602字符型液晶显示器为例,介绍其用法。一般1602字符型液晶显示器实物如图10-53: 图10-53 1602字符型液晶显示器实物图 1602LCD的基本参数及引脚功能: 1602LCD分为带背光和不带背光两种,基控制器大部分为HD44780,带背光的比不带背光的厚,是否带背光在应用中并无差别,两者尺寸差别如下图10-54所示:

图10-55 读操作时序 图10-56 写操作时序 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 字符代码与图形对应图

液晶字符显示

液晶字符显示

————————————————————————————————作者:————————————————————————————————日期:

1.基本简介 LCD1602工业字符型液晶,能够同时显示16x02即32个字符。(16列2行) 1602液晶也叫1602字符型液晶,它是一种专门用来显示字母、数字、符号等的点阵型液晶模块。它由若干个5X7或者5X11等点阵字符位组成,每个点阵字符位都可以显示一个字符,每位之间有一个点距的间隔,每行之间也有间隔,起到了字符间距和行间距的作用,正因为如此所以它不能很好地显示图形(用自定义CGRAM,显示效果也不好)。 1602LCD是指显示的内容为16X2,即可以显示两行,每行16个字符液晶模块(显示字符和数字)。 目前市面上字符液晶绝大多数是基于HD44780液晶芯片的,控制原理是完全相同的,因此基于HD44780写的控制程序可以很方便地应用于市面上大部分的字符型液晶。 2.管脚功能 1602采用标准的16脚接口,其中: 第1脚:VSS为电源地 第2脚:VCC接5V电源正极 第3脚:V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高(对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度)。 第4脚:RS为寄存器选择,高电平1时选择数据寄存器、低电平0时选择指令寄存器。 第5脚:RW为读写信号线,高电平(1)时进行读操作,低电平(0)时进行写操作。 第6脚:E(或EN)端为使能(enable)端,高电平(1)时读取信息,负跳变时执行指令。 第7~14脚:D0~D7为8位双向数据端。 第15~16脚:空脚或背灯电源。15脚背光正极,16脚背光负极。 ⑶特性 3.3V或5V工作电压,对比度可调 内含复位电路 提供各种控制命令,如:清屏、字符闪烁、光标闪烁、显示移位等多种功能 有80字节显示数据存储器DDRAM

LCD1602显示中文汉字

LCD1602显示中文汉字 LCD1602相比大家都比较了解,但是我们一般只用来显示字符,数字。 最近在网上看许多人用LCD1602来显示汉字,觉得有趣 于是拜读了一些资料,教程,但感觉大部分相当晦涩难懂,本人认为既然是教程,就不必要相当的复杂,毕竟人家看完许久后还是不能得出实验结果~!! 接下我谈谈我得做法,保证你10分钟之内一样可以在LCD1602上显示你想显示的各种符号,汉字!!! 首先:我们要弄清楚一个概念,其实我们使用1602显示中文汉字,就是利用其内部的自定义字节空间,我们都知道LCD1602内部有一个64字节的自定义CGRAM,那么好,我们就是要利用自定义字节来达到显示汉字的效果. 我们知道一个字符占8个字节,所以在CGRAM能够存放8个字符。 也就是说,这个64字节的CGRAM是给我们提供写入数据的, 那么我们怎么把我们要的汉字写入CGRAM呢? 不要急,大家查看LCD1602的用户手册,里面提到当我们需要想CGRAM写入数据时,我们需要先写入CGRAM的地址,从手册上可知,CGRAM的地址为0x40.所以当我们要写入数据时,要先写入一条地址命令write_com(0x040); 然后把你要写入的数据通过写数据命令写入write_date( 你要写得数据); 做完以上步骤了,是不是LCD1602就会显示你输入的汉字呢? 不要急,以上你只是把你要显示汉字的代码存放在CGRAM里,就相当于其他常用字符一样固定在LCD里面了,如果你不把它读出来,LCD是不会显示的。。 当你把上面的步骤做完后,接下来要做的与你平常怎么使用LCD1602是一样的,只不过是LCD1602里面增加了一些你自定义的字符,汉字。 可能到这里,也许会有些疑问,既然自定义字符、汉字的代码需要我们自己输入,那么我该怎么编写这些代码,呵呵,不要着急,接下来就要用到下面这个取字模软件。。

LCD1602字符测试显示程序与仿真

#include "reg51.h" #include "intrins.h" #define uchar unsigned char #define uint unsigned int uchar code table1 []={" WELCOME "}; //欢迎显示,包括空格在内<=16 uchar code table2 []={"Name: "};//欢迎显示,包括空格在内<=16 //************管脚定义************************ sbit lcd_rs = P3^0; //液晶数据命令选择端 sbit lcd_en = P3^1; //液晶使能 //************参数定义************************ uint tvalue;//温度值 uchar tflag;//温度正负标志 uchar data disdata[5]; //************子函数定义************************ void delay(uchar z); //delay延时子程序 void init_lcd(); //LCD1602初始化函数 void write_com(uchar com); //LCD1602写指令函数 void write_data(uchar date); //LCD1602写数据函数 void lcd1602_display(uchar *q,uchar *p);//LCD1602显示函数 void welcome_1(); //LCD1602显示欢迎函数1 //************主函数************************ void main() { welcome_1(); delay(200); while(1); } //************delay延时子程序************************ void delay(uchar z)

相关主题