1602字符液晶显示原理+实例详解
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 a02 02 自定义字符3 58 3A : 98 62 b03 03 自定义字符4 59 3B ; 99 63 c04 04 自定义字符5 60 3C < 100 64 d05 05 自定义字符6 61 3D = 101 65 e06 06 自定义字符7 62 3E > 102 66 f07 07 自定义字符8 63 3F ? 103 67 g08 08 自定义字符1 64 40 @ 104 68 h09 09 自定义字符2 65 41 A 105 69 i10 0A 自定义字符3 66 42 B 106 6A j11 0B 自定义字符4 67 43 C 107 6B k12 0C 自定义字符5 68 44 D 108 6C l13 0D 自定义字符6 69 45 E 109 6D m14 0E 自定义字符7 70 46 F 110 6E n15 0F 自定义字符8 71 47 G 111 6F o32 20 空格72 48 H 112 70 p33 21 ! 73 49 I 113 71 q34 22 " 74 4A J 114 72 r35 23 # 75 4B K 115 73 s36 24 $ 76 4C L 116 74 t37 25 % 77 4D M 117 75 u38 26 & 78 4E N 118 76 v39 27 ' 79 4F O 119 77 w40 28 ( 80 50 P 120 78 x41 29 ) 81 51 Q 121 79 y42 2A * 82 52 R 122 7A z43 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 W48 30 0 88 58 X49 31 1 89 59 Y50 32 2 90 5A Z51 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液晶显示实验
实验报告实验名称: [LCD1602液晶显示实验]姓名:学号:指导教师:实验时间: [2013年6月15日]信息与通信工程学院LCD1602液晶显示实验1.实验原理1.1 基本原理1.1.1 1602字符型LCD简介字符型液晶显示模块是一种专门用于显示字母、数字、符号等点阵式LCD,目前常用16*1,16*2,20*2和40*2行等的模块。
1.1.2 1602LCD的基本参数及引脚功能1602LCD分为带背光和不带背光两种,基控制器大部分为HD44780,带背光的比不带背光的厚,是否带背光在应用中并无差别,两者尺寸差别如下图1-2所示:图1-2 1602LCD尺寸图1.1602LCD主要技术参数:显示容量: 16×2个字符芯片工作电压: 4.5~5.5V工作电流: 2.0mA(5.0V)模块最佳工作电压: 5.0V字符尺寸: 2.95×4.35(W×H)mm2.引脚功能说明:1602LCD采用标准的14脚(无背光)或16脚(带背光)接口,各引脚接口说明如表:表1-3引脚接口说明表编符号引脚说明编号符号引脚说明号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 背光源负极1.1.3 1602LCD的指令说明及时序1602液晶模块内部的控制器共有11条控制指令,如表1-4所示:表1-4 控制命令表序号指令RS R/W D7 D6 D5 D4 D3 D2 D1 D01 清显示0 0 0 0 0 0 0 0 0 12 光标返回0 0 0 0 0 0 0 0 1 *3 置输入模式0 0 0 0 0 0 0 1 I/D S4 显示开/关控制0 0 0 0 0 0 1 D C B5 光标或字符移位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 读出的数据内容1602液晶模块的读写操作、屏幕和光标的操作都是通过指令编程来实现的。
1602液晶资料
1602液晶资料一、介绍1602液晶是一种常见的字符型液晶显示器,可以显示16列2行共32个字符。
它采用了液晶显示技术,使得显示效果更加清晰、稳定。
1602液晶广泛应用于各种嵌入式系统、电子设备以及 DIY 项目中。
本文将介绍1602液晶的基本原理、接口定义、使用方法以及常见应用场景。
二、基本原理1602液晶的基本原理是利用液晶分子的取向和电场作用的变化来改变光的透过与反射。
它由1602个独立的像素(80列×2行)组成,每个像素有一个电极对和一个液晶分子,液晶分子的取向可以通过施加电场来改变。
1602液晶由背光源、液晶面板、驱动电路和控制电路等组成,背光源提供背光使得字符能够显示在显示器上。
三、接口定义1602液晶显示器通常通过并行接口与主控单元进行通信,下面是1602液晶的常用接口定义:•DB0-DB7:并行数据接口,用于传输数据与指令。
•RS:指令/数据选择信号,用于控制将数据写入显示器还是发送给控制器.•R/W:读/写选择信号,用于选择进行读操作或写操作。
•E:使能信号,用于控制读写操作的时序。
•VSS:地线,用于提供电流的回路。
•VDD:电源正极,提供1602液晶的工作电源。
•V0:液晶偏置电压,通过该电压设置液晶显示的对比度。
•A:背光灯电源正极,提供背光灯的工作电源。
•K:背光灯电源负极,提供背光灯工作电流的回路。
四、使用方法使用1602液晶显示器需要以下步骤:1.连接电路:根据接口定义,将1602液晶与主控单元进行正确的连接。
注意接线的准确性,以免引起电路故障。
2.初始化:在使用1602液晶之前,需要对其进行初始化。
初始化的过程一般包括设置显示模式、清屏以及设置光标位置等。
3.写入数据:通过并行接口将想要显示的数据或指令传输给1602液晶,可以显示各种字符、数字、符号等。
4.控制显示:通过指令设置1602液晶的显示方式,包括光标显示、光标闪烁、显示开关等。
5.清屏:清除1602液晶的显示内容,可以使用指令或者写入空格字符来实现。
单片机轻松入门之九1602液晶显示
本部分主要介绍1602液晶显示,显示内容为“Hello,Welcome to my site,my friends.”。
原理图如下:程序如下:#include<reg52.h>#define uchar unsigned char#define uint unsigned intsbit RS=P3^0; //数据/命令选择端(H/L)sbit EN=P3^2; //使能端sbit RW=P3^1; //读/写选择端(H/L),本文章只写,所以该端口供低电平sbit wela=P3^3;//锁存器位选信号uchar table1[]="Hello,Welcome to my ";//字符表1uchar table2[]="site,my friends.";//字符表2void delay(uint x) //延时函数{uint a,b;for(a=x;a>0;a--)for(b=10;b>0;b--);}void delay1(uint x) //延时函数{uint a,b;for(a=x;a>0;a--)for(b=100;b>0;b--);}void write_com(uchar com) //写命令函数{wela=1; //锁存器位选打开P2=com; //向P2口写命令wela=0; //锁存器位选关闭RS=0; //以下部分跟据1602手册的时序图写出EN=0;RW=0;delay(10);EN=1;delay(10);EN=0;}void write_date(uchar date) //写数据函数{wela=1;P2=date;wela=0;RS=1;EN=0;RW=0;delay(10);EN=1;delay(10);EN=0;}void init() //初始化函数{write_com(0x38); //显示模式设置delay(20);write_com(0x0f);//显示开/关及光标设置delay(20);write_com(0x06);//当写一个字符后地址指针加一,光标加一delay(20);}void main() //主函数{uchar a;init();write_com(0x80); //第一行起始地址delay(20);for(a=0;a<25;a++){write_date(table1[a]);//读取字符表delay(20);}write_com(0xc0); //第二行起始地址delay(20);for(a=0;a<17;a++){write_date(table2[a]);//读取字符表delay(20);}while(1); //保持显示}试验结果如下:1602手册相关内容:时序图如下:。
lcd1602液晶屏显示原理
lcd1602液晶屏显示原理LCD1602液晶屏显示LCD1602液晶屏是一种广泛应用于嵌入式系统中的设备,其主要作用是显示文字和图像。
下面我们将从液晶屏的基本构成、显示原理、控制方式等方面进行详细介绍。
基本构成LCD1602液晶屏的主要构成有以下几个部分:•LCD显示区域:是液晶屏的主要显示部分,通常由16x2的字符点阵组成。
•背光源:为了方便在低光环境下观察屏幕内容,液晶屏通常都有背光源,可以显示白色、蓝色等不同颜色。
•驱动电路板:液晶屏需要通过电路来进行控制。
驱动电路板是一个电路板,上面有各种电子元器件,如芯片、晶振、电容、电阻等。
显示原理LCD1602液晶屏工作的原理是基于液晶分子的光学变化。
液晶屏的显示区域由若干个液晶单元组成,每个液晶单元是由一个薄膜晶体管(TFT)和一个电容组成的。
当液晶单元受到电压作用时,会发生形变,从而改变光线的传播方向,从而实现显示。
控制方式LCD1602液晶屏的控制方式通常采用微处理器进行控制。
常用的控制方式有以下几种:•8位并行控制:使用8根数据线,可以同时传输8位二进制数据,速度快,适用于需要传输大量数据的应用场景。
•4位并行控制:使用4根数据线,需要进行两次数据传输才能完成一次指令或数据的传输,速度比较慢,但可以降低接口引脚数量,适用于资源受限的系统。
•串行控制:使用单根数据线,数据按照一定的格式进行传输,速度较慢,但可以进一步减少接口引脚数量。
总结综上所述,LCD1602液晶屏是一种常用于嵌入式系统中的设备,其所采用的液晶分子光学变化原理是实现显示的基础,常用的控制方式有8位并行控制、4位并行控制和串行控制三种。
液晶屏在嵌入式系统中发挥着重要的作用,广泛应用于各种计算机设备、仪器仪表、通讯设备等方面。
接下来,我们将详细介绍液晶屏的控制流程和相关指令。
控制流程LCD1602液晶屏的控制流程通常包括以下大致步骤:1.初始化液晶屏:向液晶屏发送一系列指令,包括设置接口方式、显示模式、光标定位等。
lcd1602显示原理
lcd1602显示原理
LCD1602显示原理是利用液晶技术实现显示的一种方法。
它由16行2列的字符组成,每个字符由5×8的点阵组成。
在每个字符的背后都有一个液晶单元,通过控制液晶单元来控制字符的显示。
液晶单元是由两片平行的玻璃衬底组成,中间夹着液晶材料。
当没有电场作用在液晶材料上时,液晶材料呈现出类似于玻璃的透明状态。
而当有电场作用在液晶材料上时,液晶材料会发生变化,变得无法透过光线,从而产生黑色或其他颜色。
LCD1602显示原理是通过控制电压的加减来改变液晶单元的透明度,从而实现字符的显示。
当给液晶单元加上电压时,液晶材料会对光产生影响,使得光无法透过。
而当断开电压时,液晶材料会恢复透明状态,光可以透过。
通过对每个字符的液晶单元施加适当的电场,就可以实现字符的显示。
控制LCD1602显示的电路通常由驱动芯片和控制器组成。
驱动芯片负责产生所需的电场,控制器负责发送命令和数据到驱动芯片。
通过控制器发送特定的命令和数据,就可以让驱动芯片产生适当的电场,从而实现字符的显示。
总之,LCD1602显示原理是通过控制液晶单元的透明度来实现字符的显示,通过电压的加减来改变液晶单元的状态,从而产生黑色或其他颜色,最终完成字符的显示。
1602字符液晶显示原理+实例详解新手必看
{
lcd_wdat(table[m]);
delay(200);
}
lcd_wcom(0x80+0x44); //重新设定显示地址为0xc4,即下排第5位
for(n=0;n<8;n++) //将table1[]中的数据依次写入1602显示
DDRAM地址与显示位置的对应关系
(事实上我们往DDRAM里的00H地址处送一个数据,譬如0x31(数字1的代码,见字模关系对照表)并不能显示1出来。这是一个令初学者很容易出错的地方,原因就是如果你要想在DDRAM的00H地址处显示数据,则必须将00H加上80H,即80H,若要在DDRAM的01H处显示数据,则必须将01H加上80H即81H。依次类推。大家看一下控制指令的的8条:DDRAM地址的设定,即可以明白是怎么样的一回事了),1602液晶模块内部的字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形(无汉字),如下表所示,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码,比如大写的英文字母“A”的代码是01000001B(41H),显示时模块把地址41H中的点阵字符图形显示出来,我们就能看到字母“A”
另一种1602液晶模块,显示屏是蓝色背光白色字体
字符型LCD1602通常有14条引脚线或16条引脚线的LCD,多出来的2条线是背光电源线VCC(15脚)和地线GND(16脚),其控制原理与14脚的LCD完全一样,引脚定义如下表所示:
HD44780内置了DDRAM、CGROM和CGRAM。
DDRAM就是显示数据RAM,用来寄存待显示的字符代码。共80个字节,其地址和屏幕的对应关系如下表:
LCD1602应用实例
_nop_();
_nop_(); //空操作四个机器周期,给硬件反应时间
result=BF; //将忙碌标志电平赋给result
E=0;
return result;
}
/*****************************************************
函数功能:将模式设置指令或显示地址写入液晶模块
_nop_(); //空操作四个机器周期,给硬件反应时间
E=1; //E置高电平
_nop_();
_nop_();
_nop_();
_nop_(); //空操作四个机器周期,给硬件反应时间
E=0; //当E由高电平跳变成低电平时,液晶模块开始执行命令
}
/*****************************************************
入口参数:dictate
***************************************************/
void WriteInstruction (unsigned char dictate)
{
while(BusyTest()==1); //如果忙就等待
RS=0; //根据规定,RS和R/W同时为低电平时,可以写入指令
_nop_();
_nop_();
_nop_(); //空操作四个机器周期,给硬件反应时间
result=BF; //将忙碌标志电平赋给result
E=0;
return result;
}
/*****************************************************
1602液晶屏原理
1602液晶屏原理
1602液晶屏原理介绍
液晶显示屏(Liquid Crystal Display, LCD)是一种以液晶为介
质的显示技术,被广泛应用于各种电子设备中。
1602液晶屏
是其中一种常见的规格,指的是屏幕大小为16字符,每行可
显示2行字符。
液晶显示屏的原理是利用液晶材料的特殊性质进行光的控制。
液晶是一种介于液体和固体之间的物质,具有流动性和定向性。
液晶分为向列式(TN)和向场式(IPS)两种类型。
在1602液晶屏中,使用的是向列式液晶。
该液晶分为两层之
间夹有光学偏振膜。
液晶分子在电场作用下会发生旋转,从而改变光线的偏振方向,实现光的控制。
通过控制电场的强弱,可以使液晶分子旋转的角度不同,从而实现不同的显示效果。
为了控制液晶分子的旋转角度,1602液晶屏需要使用驱动芯片。
这些芯片被连接到主控制板上,通过串行通信或并行通信将显示数据发送到液晶屏。
驱动芯片会根据接收到的数据信号控制液晶分子的旋转角度,在屏幕上显示相应的字符或图像。
除了驱动芯片,1602液晶屏还包括背光模块。
背光模块是使
屏幕变亮的光源,常用的是LED灯管。
背光模块通常由电路
控制,可以根据需要调整亮度。
总的来说,1602液晶屏是一种利用液晶材料的特殊性质进行
光的控制的显示技术。
通过驱动芯片和背光模块的配合,可以实现屏幕上字符和图像的显示。
这种技术在各种电子设备中广泛应用,为人们提供了清晰、可靠的显示效果。
液晶显示控制(1602)c语言实例
DB1 低4位三态、 双向数据总线 1位
9
DB2 低4位三态、 双向数据总线 2位
10 DB3 低4位三态、 双向数据总线 3位
11 DB4 高4位三态、 双向数据总线 4位
12 DB5 高4位三态、 双向数据总线 5位
13 DB6 高4位三态、 双向数据总线 6位
14 DB7 高4位三态、 双向数据总线 7位 (最高位)(也是busy flag)
4 可视角度
➢大多数光都是从屏幕中垂直射出来的,所以从某一个 较大的角度观看液晶显示器时,便不能看到原本的颜 色,甚至只能看到全白或全黑。为了解决这个问题, 到目前为止有三种比较流行的技术,分别是: TN+FILM、IPS(IN-PLANE -SWITCHING)和 MVA(MULTI-DOMAIN VERTICAL align MENT)。
(8)写指令38H:显示模式设置; (9)写指令08H:显示关闭;
(10)写指令01H:显示清屏; (11)写指令06H:显示光标移动设置; (12)写指令0CH:显示开及光标设置;
2011年春
LCD 1602初始化函数实例
void Initialize_LCD( )
{
Write_LCD_Command(0x38);
4 RS RS为寄存器选择,高电平1时选择数据寄 存器、低电平0时选择指令寄存器。
5 R/W R/W为读写信号线,高电平时进行读操作, 低电平时进行写操作。
6E
E(或EN)端为使能(enable)端,下降沿使 能。
2011年春
引脚 符号
功能说明
7
DB0 低4位三态、 双向数据总线 0位
(最低位)
8
(2)写指令: 输入:RS=L;RW=L; D0~D7=指令码;E=高脉冲
字符型液晶LCD1602显示技术
void lcd_displaystr(unsigned char x,unsigned char y,unsigned char code *str) { //x 表示行,y 表示该行的位置(也就是列)
switch(x) {
case 0: write_lcd_command(0x80+y); break; case 1: write_lcd_command(0xc0+y); break;
if(P2_0==0) { mode++; if(mode>=4) mode=0; write_lcd_command(0x01); //清屏 }
while(P2_0==0); } switch(mode)
{ case 0x00:
lcd_displaystr(0,0x00," Study by MCS51 "); lcd_displaystr(1,0x00," Come On Baby! "); break; case 0x01: lcd_displaystr(0,0x00," Welcome To Use "); lcd_displaystr(1,0x00,""); break; case 0x02: lcd_displaystr(0,0x00," QQ:289994918 "); lcd_displaystr(1,0x00,"TEL:07732996883"); break; case 0x03: for(i=0;i<32;i++)
LCD1602最好最详细的中文资料
LCD602中文资料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为低电平时可以写入数据。
LCD1602的简单使用原理——跟大家分享我学习1602的总结与体会
LCD1602的简单使用原理——跟大家分享我学习1602的总结与体会我的总结主要分为这几部分:①LCD1602的硬件特性及引脚功能②LCD1602的时序特性③LCD1602的使用原理(包括带字库和不带字库的简要使用方法,控制显示指令)④基于FPGA的LCD1602使用案例Part 1. LCD1602的硬件特性及引脚功能LCD1602顾名思义是一种02*16,即为两行十六列的液晶显示屏,液晶两行,每行可以显示16个字符,但是CGRAM及CGROM里面一共有160个字符,包括阿拉伯数字,英文字母大小写,常用符号及日文。
每个字符对应于一个ASCII码值,在液晶显示屏上显示对应的字符时候,只需要将对应的ASCII码写到DDRAM中就好,详细的步骤会在下面细说。
液晶板上排列着5*8的字符点阵,8行,每行5个点位,高电平1就是该点显示,低电平0就是该点不显示。
一、引脚功能:RS,R/W,E控制数据端口DB0~DB7,数据的命令的读写由控制端口控制,并通过数据端口传输。
端口其他特性这里不再赘述,详细见1602液晶手册。
O(∩_∩)O二、硬件特性:①CGRAM 和CGROMCGRAM:character generator ram CGROM:character generator romCGRAM的地址空间:CGRAM的地址是0x40~0x7F, 64个地址空间,每个地址双字节,一共128字节,一个字符是8个字节,所以一共能显示8个自定义字符(每个双字节地址只有一个字节是被自定义字符数据写入的,另外个字节无效,因为CGARM的字符代码的规定,详细原因见下面)字符对应的区位码如下图所示:CGRAM: 字符产生ram,用来存放用户自定义的字符,如上图的两条(1)~(8),区位码为0x00~0x0F.0x00~0x07对应于(1)~(8);0x08~0x0F对应于下一条(1)~(8),虽然看起来有16个地址,但是其实只要8个地址可用,CGRAM的“字符码”规定0~2为地址,3位无效,4~7位全为0,因此CGRAM的字符码等效为0000X111,X为无效位,最后三位的地址只要八个,所以实际能用的只有8个。
字符型LCD1602应用实例PPT教学课件
sbit LCD_BUSY = LCDIO^7;
/**********************另外相关的定*********************************/
#define HIGH
1
#define LOW
0
#define TURE
1
#define FALSE
0
#define uchar unsigned char
11
2020/12/12
12
5.3 1602字符型LCD的应用实例
实验电路示意图
图13-1 单片机和LCD1602的连接示意图
2020/12/12
13
C语言参考程序
以下函数为LCD1602的头文件
/*********************LCD1602头文件*************/
#ifndef _LCD1602_H_
void LCD_write_data(uchar dat);
void LCD_write_char(uchar x,uchar y,uchar dat);
void LCD_disp_string(uchar x,uchar y,char *Data);
/***********************LCD1602接线引脚定义**************************/
#define LCDIO P0 //定义P0口与LCD1602的数据口相接
sbit LCD_RS = P2^0;
sbit LCD_RW = P2^1;
sbit LCD_EN = P2^2;
#define uint unsigned int
2020/12/12
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)=0 0H时,则在屏幕的顶部显示一条由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_();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_();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_();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(); //初始化LCDdelay(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;。
LCD1602原理及显示程序
LCD1602原理及显示程序LCD1602是一种常用的液晶显示器模块,具有16列2行的显示区域,可以用于显示各种文字和简单的图形。
它广泛应用于各种电子产品中,如计算器、电子钟表、仪器仪表等。
本文将介绍LCD1602的工作原理和显示程序设计。
LCD1602模块由液晶显示面板、驱动芯片和背光源组成。
其中驱动芯片负责向液晶面板发送控制信号和数据信号,控制液晶分子的取向和光的穿透程度,从而实现图像的显示。
背光源则提供背光,使得图像可以在暗环境下清晰可见。
液晶显示面板是LCD1602模块最关键的部分。
它由两片平行的玻璃基板构成,中间夹层有液晶层和极板。
液晶层是一种特殊的有机化合物,具有液态和固态之间的特性。
液晶分子有两种主要的排列方式,即平行排列和垂直排列,通过调节驱动芯片发送的电压信号,可以改变液晶分子的排列方式,进而控制光的透射和反射。
极板则起到滤光器的作用,可以控制光的偏振方向。
为了控制LCD1602模块进行显示,我们需要通过IO口与其连接,并向其发送控制信号和数据信号。
以下是一个基本的LCD1602显示程序的设计过程:1.初始化LCD1602模块:a.设置LCD1602的工作模式,例如行数、字体大小等。
b.设置显示模式,例如显示打开、显示关闭、光标光灭等。
2.发送指令到LCD1602模块:a.选择指令寄存器,RS引脚置低电平。
b.向数据总线发送指令数据。
c.发送使能信号,EN引脚从高到低电平进行一个脉冲,使得LCD1602芯片接收到指令。
3.发送数据到LCD1602模块:a.选择数据寄存器,RS引脚置高电平。
b.向数据总线发送需要显示的数据。
c.发送使能信号,EN引脚从高到低电平进行一个脉冲,使得LCD1602芯片接收到数据。
4.清除LCD1602模块的显示内容:a.发送清除显示指令到LCD1602模块。
5.控制LCD1602模块的光标位置:a.发送光标位置指令到LCD1602模块。
6.控制LCD1602模块的背光亮度:a.通过PWM控制背光源的亮度。
1602原理 汉字显示 原理理解
主要是看懂它CGROM CGRAM的存储空间图,和工作原理用户直接操作DDRAM,DDRAM有80个字节,其位置与1602的显示位置有对应关系,基本思想是向指定的DDRAM地址中写入字符对应的ASCII码,其实是指针,DDRAM通过这个指针在CGROM中找到它对应的字模数组,然后显示在屏幕上。
用户看起来是对DDRAM的操作,实则是通过DDRAM调用了CGROM中的字模数组,显示在LCD上。
图1其奥妙在于它的ASCII码、字符点阵地址、行地址的对应关系上图2(没有复制完整)DDRAM的地址对应LCD上的一个位,其内容是一个指针,指向了点阵中的数组。
以00H为例,(写地址的时候要写成0X80,因为指令规定了高位要为1 ,见DDRAM地址设置指令)向00H中写一个01100010则LCD的处理器会视01100010为指针,然后通过CGROM找到它对应的一组字模代码,如下图,这个指针对应的是一个存储空间,这个存储空间就是8行5列,对应下面的行地址0000到0111.这就是行地址的意思,也就是字模码的行。
,第8行对应的是光标,就是我们在LCD上看到一最后一行,如果是光标闪烁的话,那一闪闪的就是第8行的位在不断的置0置1的结果。
如下图3示行、列描述的是存储空间,字模码的行列就是8行5列的;还有个行地址批的是CGROM 的行,CGROM中的低4位就是行,共16行16列,如图2 示图3下面提用户自定的的解释CGRAM其实是CGROM中的一部分,这部分是没有被写进字模码的存储空间。
前8位没有用到,可以让用户自己写字模码。
用户最多写8个,CGROM中对应行0000行到0111行,当然对就的是第0列。
第个CGRAM对应一个8行5列的存储空间,如下图4示因此写自定义字模时要先设定好这个CGRAM的地址,如00000000,然后要在这个地址中写入8行的数据,如图4示,第一个地址代表字符标号,也就是行DDRAM中写的指针,下面的字符码的低3位,现时也是CGRAM的高3位,位5 4 3。
LCD1602介绍及应用
LCD1602介绍及应用5.1 液晶概述液晶(Liquid Crystal)是一种高分子材料,因为其特殊的物理、化学、光学特性,20世纪中叶开始被广泛应用在轻薄型的显示技术上。
当不通电时,液晶排列混乱,阻止光线通过;而当通电时液晶导通,排列变的有秩序,使光线容易通过。
让液晶如闸门般地阻隔或让光线穿透。
从技术上简单地说,液晶面板包含了两片相当精致的无钠玻璃素材,中间夹着一层液晶。
当光束通过这层液晶时,液晶本身会排排站立或扭转呈不规则状,因而阻隔或使光束顺利通过。
大多数液晶都属于有机复合物,由长棒状的分子构成。
在自然状态下,这些棒状分子的长轴大致平行。
将液晶倒入一个经精良加工的开槽平面,液晶分子会顺着槽排列,所以假如那些槽非常平行,则各分子也是完全平行的。
液晶显示器的英文名字是Liquid Crystal Display,缩写为LCD。
它的主要原理是以电流刺激液晶分子产生点、线、面配合背部灯管构成画面。
液晶显示的分类方法有很多种,通常可按其显示方式分为段式、字符式、点阵式等。
除了黑白显示外,液晶显示器还有多灰度有彩色显示等。
如果根据驱动方式来分,可以分为静态驱动(Static)、单纯矩阵驱动(Simple Matrix)和主动矩阵驱动(Active Matrix)三种。
液晶显示器有段型、字符型和图形型。
段型同LED一样,只能用于显示数字;字符型则只能显示ASCII 码字符,如数字、大小写字母、各种符号等。
各种字符型和图形型的液晶型号通常是按照显示支付和行数或液晶点阵的行、列数命名的。
例如,1602的意思是每行显示16个字符,共可显示2行。
类似的命名有1602,0801、0802等。
图形型液晶不仅可以显示ASCII码,也可以显示汉字字符和各种图型。
图形型液晶的命名是按照液晶显示器中每列和每行的点数命名的。
如12864,即指该液晶的点有128列,64行,共有128×64个点。
类似的有12232、19264、192128、320240等。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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”。
上表中的字符代码与我们PC中的字符代码是基本一致的。
因此我们在向DDRAM写C51字符代码程序时甚至可以直接用P1='A'这样的方法。
PC在编译时就把“A”先转为41H代码了。
字符代码0x00~0x0F为用户自定义的字符图形RAM(对于5X8点阵的字符,可以存放8组,5X10点阵的字符,存放4组),就是CGRAM了。
后面我会详细说的。
0x20~0x7F为标准的ASCII码,0xA0~0xFF为日文字符和希腊文字符,其余字符码(0x10~0x1F及0x80~0x9F)没有定义。
那么如何对DDRAM的内容和地址进行具体操作呢,下面先说说HD44780的指令集及其设置说明,请浏览该指令集,并找出对DDRAM的内容和地址进行操作的指令。
共11条指令:HD44780的指令集1.清屏指令功能:<1> 清除液晶显示器,即将DDRAM的内容全部填入"空白"的ASCII码20H;<2> 光标归位,即将光标撤回液晶显示屏的左上方;<3> 将地址计数器(AC)的值设为0。
2.光标归位指令功能:<1> 把光标撤回到显示器的左上方;<2> 把地址计数器(AC)的值设置为0;<3> 保持DDRAM的内容不变3.进入模式设置指令功能:设定每次定入1位数据后光标的移位方向,并且设定每次写入的一个字符是否移动。
参数设定的情况如下所示:位名设置I/D 0=写入新数据后光标左移1=写入新数据后光标右移S 0=写入新数据后显示屏不移动1=写入新数据后显示屏整体右移1个字4.显示开关控制指令功能:控制显示器开/关、光标显示/关闭以及光标是否闪烁。
参数设定的情况如下:位名设置D 0=显示功能关 1=显示功能开C 0=无光标1=有光标B 0=光标闪烁1=光标不闪烁5.设定显示屏或光标移动方向指令功能:使光标移位或使整个显示屏幕移位。
参数设定的情况如下:S/C R/L 设定情况0 0 光标左移1格,且AC值减10 1 光标右移1格,且AC值加11 0 显示器上字符全部左移一格,但光标不动 1 1 显示器上字符全部右移一格,但光标不动6.功能设定指令功能:设定数据总线位数、显示的行数及字型。
参数设定的情况如下:位名设置DL 0=数据总线为4位1=数据总线为8位N 0=显示1行1=显示2行F 0=5×7点阵/每字符1=5×10点阵/每字符7.设定CGRAM地址指令功能:设定下一个要存入数据的CGRAM的地址。
8.设定DDRAM地址指令功能:设定下一个要存入数据的DDRAM的地址。
(注意这里我们送地址的时候应该是0x80+Address,这也是前面说到写地址命令的时候要加上0x80的原因) 9.读取忙信号或AC地址指令功能:<1> 读取忙碌信号BF(FB)的内容,BF=1表示液晶显示器忙,暂时无法接收单片机送来的数据或指令;当BF=0时,液晶显示器可以接收单片机送来的数据或指令;<2> 读取地址计数器(AC)的内容。
10.数据写入DDRAM或CGRAM指令一览。
功能:<1> 将字符码写入DDRAM,以使液晶显示屏显示出相对应的字符;<2> 将使用者自己设计的图形存入CGRAM。
11.从CGRAM或DDRAM读出数据的指令一览。
功能:读取DDRAM或CGRAM中的内容。
基本操作时序:读状态输入:RS=L,RW=H,E=H输出:DB0~DB7=状态字写指令输入:RS=L,RW=L,E=下降沿脉冲,DB0~DB7=指令码输出:无读数据输入:RS=H,RW=H,E=H输出:DB0~DB7=数据写数据输入:RS=H,RW=L,E=下降沿脉冲,DB0~DB7=数据输出:无呵呵,看到这么多的控制指令希望你没有头晕。
其实这么多的指令刚开始的时候没有必要全部掌握,随着学习的深入可以再尝试去用更复杂的控制指令。
下面让我们一起驱动1602的液晶吧。
下面是我的液晶的连接图,用的是那种蓝底白字的液晶,其实蓝底白字和那种绿底黑字的液晶唯一的区别就是颜色的问题,至于用哪种液晶,就看各位自己的喜好咯。
这就是我做测试用的最小系统,单片机是STC89C516,晶振为12M。
液晶为蓝底白字的那种1602。
当我们硬件连接错误,或者程序错误时就会出现下图这种情况,就是上排显示16的白色的块(蓝底黑字的液晶则显示的是16个黑块)。
下面我们来驱动1602吧,在1602的上排显示“LCD1602 check ok”,下排显示“study up”程序中没有用到忙检测,而是用的是延时函数来替代忙检测:#include<reg52.h> //包含头文件,这个嘛,就不用多说了~~#define uint unsigned int //预定义一下#define uchar unsigned charsbit rs=P3^5; //1602的数据/指令选择控制线sbit rw=P3^6; //1602的读写控制线sbit en=P3^7; //1602的使能控制线/*P2口接1602的D0~D7,注意不要接错了顺序,我以前可在这上面吃过亏~*/uchar code table[]="LCD1602 check ok"; //要显示的内容1放入数组tableuchar code table1[]="study up"; //要显示的内容2放入数组table1 void delay(uint n) //延时函数{uint x,y;for(x=n;x>0;x--)for(y=110;y>0;y--);}/*********************************************************************************/void lcd_wcom(uchar com) //1602写命令函数(单片机给1602写命令){ //1602接收到命令后,不用存储,直接由HD44780执行并产生相应动作rs=0; //选择指令寄存器rw=0; //选择写P2=com; //把命令字送入P2delay(5); //延时一小会儿,让1602准备接收数据en=1; //使能线电平变化,命令送入1602的8位数据口en=0;}void lcd_wdat(uchar dat) //1602写数据函数{rs=1; //选择数据寄存器rw=0; //选择写P2=dat; //把要显示的数据送入P2delay(5); //延时一小会儿,让1602准备接收数据en=1; //使能线电平变化,数据送入1602的8位数据口en=0;}void lcd_init() //1602初始化函数{lcd_wcom(0x38); //8位数据,双列,5*7字形lcd_wcom(0x0c); //开启显示屏,关光标,光标不闪烁lcd_wcom(0x06); //显示地址递增,即写一个数据后,显示位置右移一位lcd_wcom(0x01); //清屏}void main() //主函数{uchar n,m=0;lcd_init(); //液晶初始化lcd_wcom(0x80); //显示地址设为80H(即00H,)上排第一位(也是执行一条命令)for(m=0;m<16;m++) //将table[]中的数据依次写入1602显示{lcd_wdat(table[m]);delay(200);}lcd_wcom(0x80+0x44); //重新设定显示地址为0xc4,即下排第5位for(n=0;n<8;n++) //将table1[]中的数据依次写入1602显示{lcd_wdat(table1[n]);delay(200);}while(1); //动态停机}程序写好后烧写进单片机,现在让我们看看效果吧这就是显示的效果。
下面让我们来看看如何显示一个自定义的字符吧我们从CGROM表上可以看到,在表的最左边是一列可以允许用户自定义的CGRAM,从上往下看着是16个,实际只有8个字节可用。