1602-5(显示居中) Model (1)
LCD1602及其控制器的基本显示方法
LCD1602及其控制器的基本显⽰⽅法LCD显⽰及键盘⽤法LCD1602及其控制器的基本显⽰⽅法向LCD输⼊的数据为ASCII码,需要通过数码扫描依次送到LCD显⽰,下⾯介绍LCD 控制器IP核LCD16X2A及其相关程序。
逻辑符号如下图:U_lcd_ctrl模块即为该控制器核在AltiumDesinger原理图中的符号表⽰。
其作⽤是接受前⾯⽤户⾃⼰的逻辑单元送来的ASCII码数据和控制信号,然后与外部的LCD显⽰器通讯,显⽰相应字符。
数据总线使⽤输⼊输出分离模式,IP核后⾯需要增加双向BUF控制单元(U8)。
L CD控制器端⼝说明如下:⽤户控制逻辑接⼝:CLK:控制器⼯作时钟,上升沿有效RST:复位信号,⾼电平有效DA TA[7..0]:ASCII码数据总线ADDR[3..0]:字符在LCD屏幕上的地址(共两⾏,每⾏16个字符)ADDR=“0000”~“1111”对应每⾏的第0~15个字符LINE:LCD1602屏幕上的⾏选择信号,LINE=0时数据在第⼀⾏显⽰,LINE=1时数据在第⼆⾏显⽰BUSY:控制器忙信号,数据未显⽰稳定时BUSY=1;反之为0STROBE:数据输⼊有效使能,⾼电平有效LCD显⽰器接⼝:LCD_E:LCD显⽰器使能LCD_RW:LCD读写⽅向控制LCD_RS:LCD命令,数据选择LCD_DA TA_TRI:LCD数据⾼阻态控制LCD_DA TAO:LCD数据输出总线LCD_DA TAI:LCD数据输⼊总线控制器⼯作原理如下:A 控制器复位当RST信号有效时(⾼电平),控制器进⼊LCD复位与初始化操作,此时,BUSY信号持续⾼电平,表⽰控制器忙,LCD不能进⾏⽤户请求的操作。
RST信号由⾼变低后的⼤约80us之后,LCD控制器初始化完成,可以响应⽤户的操作请求,此时,BUSY信号变低。
LCD处于显⽰模式。
B 字符显⽰上电后的LCD必须初始化⼀次,之后LCD控制器停留于“WAIT FOR DA TA”状态。
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个字节,其地址和屏幕的对应关系如下表:
1602第一行显示英文名字,第二行显示学号
读状态输入:RS=L, RW=H, E=H 输出:D0~D7=状态字读数据输入:RS=H, RW=H, E=H 输出:无写指令输入:RS=L, RW=L, E=高脉冲输出:D0~D7=状态字写数据输入:RS=H, RW=L, E=高脉冲输出:无/*********1602接P0********//*RS接P2^5/*RW接P2^6/*EN接P2^7/*****************************/#include<reg51.h>#include<intrins.h>Typedef unsigned char uchar;typedef unsigned int uint;uchar code table[]="Shmily";uchar code table1[]="12054126";sbit rs=P2^5;sbit rw=P2^6;sbit e=P2^7;uchar i;void delay(unsigned int t) //延时函数{unsigned int i;for(t;t>0;t--)for(i=120;i>0;i--);}Void write_com(uchar com) //写指令函数{rs=0; //指令rw=0; //写入P0=com; //将要写的命令字送到数据总线上delay(5);//使能端给一高脉冲,因为初始化函数中将e置零e=1;delay(5);e=0;}Void write_data(uchar dat) //写数据函数{rs=1; //数据rw=0; //写入P0=dat;delay(5);e=1; //允许delay(5);e=0;}Void init() //初始化函数{rw=0;e=0;write_com(0x38); //设置八位格式,两行write_com(0x0c); //整体显示关光标不闪烁write_com(0x06); //设置输入方式增量不移位write_com(0x01); //清屏}Void main(){init();while(1){//命令先将数据指针定位到第一行第一个字处,然后写完第一行要显示的字,在每两个字之间做简短延时write_com(0x80);for(i=0;i<6;i++){write_data(table[i]);delay(200);}write_com(0xc0);for(i=0;i<8;i++){write_data(table1[i]);delay(200);}}}。
LCD1602中文资料程序和使用说明
LCD1602中文资料程序和使用说明一、硬件连接和初始化步骤:1.将LCD1602的16个引脚连接到MCU(单片机)的相应引脚上。
其中,VCC和GND分别接到电源正负极,VO接到可调电位器的中间引脚(用于调节背光亮度),RS、RW和E分别接到MCU的IO口上,D0-D7分别接到MCU的8个IO口上。
2.初始化LCD1602的操作包括设置显示模式、显示光标、输入模式等,具体步骤如下:a.将8位数据接口设置为并行输入模式,即设置D0-D3为输入模式。
b.设置显示模式为2行显示,5x8点阵字符,显示器不移动。
c.将显示光标设置为闪烁显示。
d.设置数据输入方式为向右移动,同时字符显示不移动。
e.清除显示内容,将光标位置设置为第一行第一列。
f.打开显示器和光标显示功能。
二、常用函数和操作方法:1. void lcd1602_init( 初始化LCD1602,包括上述硬件连接和初始化步骤。
2. void lcd1602_clear( 清除显示内容。
3. void lcd1602_setCursor(int row, int column) 设置光标位置,row表示行数(从0开始),column表示列数(从0开始)。
4. void lcd1602_print(String str) 在当前光标位置打印字符串str。
5. void lcd1602_shiftDisplayLeft( 将显示内容向左移动一位。
6. void lcd1602_shiftDisplayRight( 将显示内容向右移动一位。
7. void lcd1602_scrollDisplayLeft( 将整个显示内容向左滚动一格。
8. void lcd1602_scrollDisplayRight( 将整个显示内容向右滚动一格。
9. void lcd1602_noCursor( 关闭光标显示。
10. void lcd1602_cursor( 打开光标显示。
字符液晶1602使用详解
1602字符液晶(2009-04-29 15:12:37)标签:杂谈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”字的代码就行了。
但具体的写入是要按LCD模块的指令格式来进行的,后面我会说到的。
那么一行可有40个地址呀?是的,在1602中我们就用前16个就行了。
第二行也一样用前16个地址。
对应如下:DDRAM地址与显示位置的对应关系(事实上我们往DDRAM里的00H地址处送一个数据,譬如0x31(数字1的代码)并不能显示1出来。
这是一个令初学者很容易出错的地方,原因就是如果你要想在DDRAM的00H地址处显示数据,则必须将00H加上80H,即80H,若要在DDRAM的01H处显示数据,则必须将01H加上80H即81H。
1602液晶显示器基本操作时序
1602液晶显示器基本操作时序标题:1602液晶显示器基本操作时序简介:本文将介绍1602液晶显示器的基本操作时序,帮助读者了解如何正确使用该显示器。
正文:1602液晶显示器是一种常用的显示设备,广泛应用于各种电子产品中。
为了正确使用该显示器,了解其基本操作时序是非常重要的。
第一步是连接显示器。
首先,将显示器的VSS引脚连接到地,VDD 引脚连接到电源正极。
接着,将V0引脚连接到可变电阻器的中间引脚,两侧引脚分别连接到地和电源正极。
然后,将RS引脚连接到控制器的某个I/O口,RW引脚连接到地,E引脚连接到控制器的另一个I/O口。
最后,将D4-D7引脚分别连接到控制器的其他四个I/O 口。
第二步是初始化显示器。
在连接完成后,需发送一系列指令来初始化显示器。
首先,将RS引脚置低电平,表示发送的是指令。
然后,发送0x33指令,接着发送0x32指令。
这两个指令用于设置显示模式。
接下来,发送0x28指令,用于设置显示器的行数和字体大小。
最后,发送0x0C指令,用于开启显示器并关闭光标。
第三步是写入数据。
在初始化完成后,可以向显示器写入数据进行显示。
将RS引脚置高电平,表示发送的是数据。
然后,发送0x80指令,将光标定位到第一行第一列。
接着,通过发送ASCII码来显示相应的字符或数字。
发送完一个字符后,将光标右移一位,直到显示完所有内容。
第四步是清屏和光标复位。
如果需要清除屏幕上的内容,只需发送0x01指令即可。
同时,可以将光标复位到第一行第一列,发送0x80指令即可。
在使用1602液晶显示器时,需要注意以上基本操作步骤和时序。
确保连接正确,并按照指令发送数据,才能正常显示内容。
同时,注意避免触碰显示器的其他部分,以免损坏设备。
总结:本文介绍了1602液晶显示器的基本操作时序,包括连接显示器、初始化显示器、写入数据以及清屏和光标复位。
正确操作显示器,能够实现准确的显示效果,提升用户体验。
希望本文能为读者在使用1602液晶显示器时提供一些帮助。
液晶LCD1602使用手册
5.2 读操作时序
项目 使能 E 时钟周期 使能 E 脉宽 使能 E 上升/下降沿时间 地址建立时间( RS,R/W 到 E) 地址保持时间 数据建立时间
符号 tcycE PWEH tE、tEf tAS tAH tDDR
最小值 1000 450 ― 60 20 ―
最大值 ― ― 25 ― ― 360
液晶显示模块 1602 使用手册
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ � � 显示回到原始状态 DDRAM 中的内容不变
7.3 进入模式设置指令 RS 0 R/W 0 D7 0 D6 0 D5 0 D4 0 D3 0 D2 1 D1 I/D D0 S
I/D:DDRAM 地址增加/减少 � � I/D=1,光标或闪烁向右移动,DDRAM 地址增加 1。 I/D=0,光标或闪烁向左移动,DDRAM 地址减少 1。
7.2 归位 RS 0 � � R/W 0 D7 0 D6 0 D5 0 D4 0 D3 0 D2 0 D1 1 D0 ―
归位指令置地址计数器 AC=0 光标回原点
9 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @ 珠联璧合 xlzhu xlzhu@
6. 寄存器 6.1 数据寄存器 DR 数据寄存器用来暂时储存来自 DDRAM/CGRAM 的读写数据。 6.2 指令寄存器 IR 指令寄存器用来储存来自微控制器的指令码。微控制器不能使用它来读取指令数据。 用 户可以通过 RS 和 R/W 信号组合来选择寄存器,进行相应的操作。
RS 0 0 1 1 6.3 忙标志 BF
以上定义了“王”字符,对应字符码为 00H,CGRAM 地址为 0H。 7. 指令描述 7.1 清显示 RS 0 � � � R/W 0 D7 0 D6 0 D5 0 D4 0 D3 0 D2 0 D1 0 D0 1
1602显示汉字和自定义字符库
1602液晶模块内部的字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,但是没有汉字库。
每一个字符都有一个固定的代码,比如大写的英文字母“A”的代码是01000001B(41H),显示时模块把地址41H中的点阵字符图形显示出来,我们就能看到字母“A”。
今天偶然在网上发现有的人利用1602显示简单的汉字,对这个产生了兴趣,上网搜了一些资料,自己慢慢的研究了一下,终于弄懂了怎么回事,自己也写了一个显示“天”,“℃”,“你”,“土”,心形,“明”的程序。
下面就和大家一起分享一下。
查看LCD1602的CGROM字符代码表,可以发现从00000000B~00000111B (00H~07H)地址的内容是没有定义的,它是留给用户自己定义的,用户可以通过先定义LCD1602的CGRAM中的内容,最多可以自定义8个字符,然后就可以同调用CGROM字符一样来调用自定义好的字符。
那么如何设定CGRAM中的内容呢?首先我们要把所要编写的字符对应于5X8点阵的“字模”提取出来,我们可以通过相关的软件来提取,也可以手工提取。
说白了也就是将点阵的某一行中有显示的点用1表示,无显示的点用0表示,以此形成该行对应的字模数据。
设定CGRAM的内容,要一行一行的设定,每一行对应一个CGRAM,5X8点阵,每行5点,共8行,因此要将8行的字模数据都写入CGRAM。
写好后,就可像调用CGROM字符一样来来调用它了(CGRAM是可写可读的,CGROM只可读不可写)。
下面贴出我的程序(见1602LCD文件夹中的1602显示汉字.Uv2文件),实物图和Proteus仿真图,由于一个字符的点数为5X8,点数太少所以显示效果不是很好,经实验发现实物效果比仿真要好,下面为两者的效果图。
LCD1602指令
液晶1602指令一、引脚第1脚:VSS为电源接地端第2脚:VDD为5V电源输入端第3脚:VO为液晶显示器对比度调整段接正电源时对比度最弱,接电源地时对比度最高,对比度过高时会产生“鬼影”,使用时可通过一个10K的电位器调整对比度。
第4脚:RS为寄存器选择高电平时选择数据寄存器,低电平时选择指令寄存器。
第5脚:RW为读写信号线高电平时进行读操作,低电平进行写操作。
当RS和RW共同为低电平时可以写入指令或显示地址;当RS为低电平,RW为高电平时可以读忙信号;当RS为高电平,RW为低电平时进行写入数据。
第6脚:E端为是能端当E端由高电平跳变成低电平时,液晶模块执行命令。
第7~14脚:D0~D7为8位双向数据线。
第15~16脚:空脚1602液晶模块内部的字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形,如表1所示。
这些字符有:阿拉伯数字、英文大小写、常用字符和日文假名等。
每个字符都有一个固定的代码,比如大写的英文字母“A”的代码是0100 0001B(41H),显示时地址41H的点阵字符图形显示出来,我们就能看到字母“A”。
二、控制命令1602液晶模块内部的控制器共有11条控制指令。
第1条:清显示(0x01H)RS RW D7 D6 D5 D4 D3 D2 D1 D00 0 0 0 0 0 0 0 0 1第2条:光标复位(0x02H或0x03H)RS RW D7 D6 D5 D4 D3 D2 D1 D00 0 0 0 0 0 0 0 1 *第3条:设置输入模式RS RW D7 D6 D5 D4 D3 D2 D1 D00 0 0 0 0 0 0 1 I/D S 第4条显示开/关控制RS RW D7 D6 D5 D4 D3 D2 D1 D00 0 0 0 0 0 1 D C B 第5条光标或者字符移位RS RW D7 D6 D5 D4 D3 D2 D1 D00 0 0 0 0 1 S/C R/L * * 第6条功能设置RS RW D7 D6 D5 D4 D3 D2 D1 D00 0 0 0 1 DL N F * *第7条字符发生存储器地址RS RW D7 D6 D5 D4 D3 D2 D1 D00 0 0 1 字符发生器地址(AGG)第8条数据存储器地址RS RW D7 D6 D5 D4 D3 D2 D1 D00 0 1 显示数据存储器地址(ADD)第9条读取忙标志或者地址RS RW D7 D6 D5 D4 D3 D2 D1 D00 1 BF 计数器地址(AC)第10条写数据到CGRAM或者DDRAMRS RW D7 D6 D5 D4 D3 D2 D1 D01 0 写入的数据第11条CGRAM或者DDRAM读取数据RS RW D7 D6 D5 D4 D3 D2 D1 D01 1 读取的数据三、各控制命令的作用指令1:清屏指令码0x01H,光标复位到地址0x00H位置。
1602的使用方法及3个代码
void delay(uint xms)
{ //延时函数
uint i,j;
for(i = xms;i > 0;i--)
for(j = 110;j > 0;j--);
}
/*******************************************************************/
5.状态字说明表(见表7.2.3)
注意:原则上每次对控制器进行读/写操作之前,都必须进行读写检测,确保STA7为0.实际上,由于单片机的操作慢于液晶控制器的反应速度,因此可以不进行读/写检测,或只进行短暂的延时即可。
6.数据指针设置
控制器内部设有一个数据地址指针,用户可以通过它们访问内部的全部80B的RAM,如图7.2.4所示。
for(i = xms;i > 0;i--)
for(j = 110;j > 0;j--);
}
void lcd_wcmd(uchar cmd)
{ //写入指令数据到LCD
LCD_RS = 0;
LCD_RW = 0;
LCD_EP = 0;
P0 = cmd;
delay(10);
LCD_EP = 1;
delay(10);
uchar code table4[] = {"You Press Key4"};
uchar i;
void delay(uint xms)
{ //延时函数
uint i,j;
for(i = xms;i > 0;i--)
for(j = 110;j > 0;j--);
通用LCD1602液晶显示模块使用手册
接口控制
自动执行
MPU
写操作 数据 读操作
写操作 DR 数据
读操作
DDRAM(CGRAM)
z 忙标志位 BF 忙标志 BF=1 时,表明模块正在进行内部操作,此时不接受任何外部指令和数据。当 RS=0、R/W=1
以及 E 为高电平时,BF 输出到 DB7。每次操作之前最好先进行状态字检测,只有在确认 BF=0 之后,MPU 才能访问模块;
通用 1602 液晶显示模块使用手册
☆☆☆☆ Email: support@
通用 1602
液晶显示模块使用手册
伟纳电子
-1-
通用 1602 液晶显示模块使用手册
☆☆☆☆ Email: support@
一. 基本特征
四 操作时序图 1 写操作时序
-4-
RS R/W E DB0~DB7
通用 1602 液晶显示模块使用手册
☆☆☆☆ Email: support@
VIH1 VIL1
tAS
VIH1 VIL1
tAHBiblioteka VIL1tErVIH1 VIL1
PWEN
VIH1 VIL1
tDSW
VIL1
tAH tEr
二 电气参数: 1 极限参数
项
电源电压
输入电压 操作温度 储存温度 湿度
目 逻辑 LCD 驱动
符号 Vdd
Vdd – Vee Vi Top Tstg —
最小值 0 0 0 0 -20 —
1602液晶显示汉字程序
1602 液晶显示汉字程序利用1602 显示汉字也不是新鲜的内容,今天不想颓废了。
只是需要自己事先定义一下汉字的字模,就是显示出来的汉子字体结构。
要定义字模就需要知道1602 的CG RAM 地址和显示字符的地址DD RAM图1: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 40 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F 第一行第一个字符的地址是( 0x80) ,后面的字符地址以此类推第二行第一个字符的地址为( 0x80 + 0x40) ,需要在第一行的基地址后面加上一个偏移量0x40 ,后面的地址在此基址上再依次加一。
void delay(unsigned int time_i){ int i;for (;tim>0;tim--){for (i=0;i<10;i++); } }void command_out (char out_data) {RW=0;RS=0;EN=1;DB=out_data;EN=0;delay(10);}void OUTD(char out_data){RS=1;RW=0;EN=1;DB= out_data;EN=0;delay(10);}OUTI() 是写入指令的函数,OUTD() 是写入数据的函数。
如:左上角第一个5*7 的显示数据为:0x00,0x01,0x81,0x12,0x24,0x41,0x81,0x10蓝色区域的相应位为1这样就可以写出全部 4 个 5*7 点阵的显示数据了,把它封装在一个数组中,如数组, hanzi[]={OxOO,OxO1,Ox81,Ox12,Ox24,Ox41,Ox81,Ox1O,} 之后利用命令:OUTI(0X40); for (i=0;i<64;i++){ OUTD(neu[i]);} 将这个数组中的数据赋值到 1602 内部 CGRAM 中。
1602显示中文
1602液晶有提供了两种字符形式,一种是一般使用的固化的字符,直接写入字符的代码,即可显示该字符到LCD上面,比如我们需要显示A字母,就只需要lcd_rw(1, 0, 'A', 1);就可以了。
另外一种就是8个自定义的字符,存放在CGRAM中的数据,他们是0x00~0x07或者0x08~0x0f,只能使用一组。
字符地址代码 CGRAM 地址0x00(0x08) 0x00~0x070x01(0x09) 0x08~0x0F0x02(0x0A) 0x10~0x170x03(0x0B) 0x18~0x1F0x04(0x0C) 0x20~0x270x05(0x0D) 0x28~0x2F0x06(0x0E) 0x30~0x370x07(0x0F) 0x38~0x3F其中,0x08~0x0f的地址在使用5X8时,这个地址里边存放的跟0x00~0x07一样的数据,所以两组只能用一组。
在1602中,地址的设置有两种,一种是CGRAM地址设置,另外一种是DDRAM地址设置,他们的命令分别是一下。
DDRAM 地址设置指令:Bit D7 D6 D5 D4 D3 D2 D1 D0功能 1 A6 A5 A4 A3 A2 A1 A0该指令将7 位的DDRAM地址写入地址指针计数器AC当中,随后的操作就可以通过lcd_rw(1, 0, 'A', 1);对DDRAM进行读/写操作。
CGRAM 地址设置指令:Bit D7 D6 D5 D4 D3 D2 D1 D0功能 0 1 A5 A4 A3 A2 A1 A0该指令将6位的CGRAM 地址写入地址指针计数器AC 内,随后的操作是将CGRAM的读/写的数字操作。
我们首先是要将想显示的符号的值用字模工具或者手动的形式写入CGRAM中,分两个步骤:1,设定CGRAM的值;2,将数据写进去。
如果采用5X8的格式,那么我们就需要做一个8次的循环,每次设置了地址,接着就写入数据,程序的代码如下所示-----------------------------------------代码开始------------------------------------------void lcd_setchar(uchar usr_add, uchar usr_char[]) //usr_add为字符地址,usr_char为数组地址{uchar i;usr_add = ((usr_add<<3)&0x3f)|0x40; //左移以完成字符地址到CGRAM地址的转换//确保写入的值(命令)不能大于0x40,以免设置到别的参数for(i = 0; i < 8; i++) //一个字符有8行{lcd_rw(0, 0, (usr_add++), 1); //写入命令,usr_add已经加上了命令的设定值lcd_rw(1, 0, usr_char[i], 1); //写入数据}}-----------------------------------------代码结束------------------------------------------将这些字模的数据按照从上到下的顺序,排列成三组数组,分别为uchar LCD_year[] ={0x08, 0x0f, 0x12, 0x0f, 0x0a, 0x1f, 0x02, 0x02}; //年 uchar LCD_month[]={0x0f, 0x09, 0x0f, 0x09, 0x0f, 0x09, 0x0b, 0x11}; //月uchar LCD_date[] ={0x0f, 0x09, 0x09, 0x0f, 0x09, 0x09, 0x09, 0x0f}; //日使用lcd_setchar(0x00, LCD_year);lcd_setchar(0x01, LCD_month);lcd_setchar(0x02, LCD_date);将字符写入之后,就可以使用lcd_rw(1, 0, 0x00, 1); //年lcd_rw(1, 0, 0x01, 1); //月lcd_rw(1, 0, 0x02, 1); //日来显示他们了。
通用型1602LCD自定义字符的显示
通用型1602LCD自定义字符的显示【摘要】LCD1602主要用来显示数字、字母、图形以及少量自定义字符。
由于其显示控制简单,性价比高,广泛用于电子表、冰箱、空调、汽车电子仪表等装置。
本文主要研究一下如何在LCD1602显示自定义字符。
虽然技术含量不高,但是注意编程的细节还是很有必要去探讨一番。
【关键词】单片机;LCD1602;CGRAM1.引言液晶显示器的英文名是Liquid Crystal Display,简称LCD。
液晶显示器作为显示器件具有体积小、重量轻、功耗低,性价比高等优点,所以LCD日渐成为各种便携式电子产品的理想显示器,1602液晶也叫1602字符型液晶,它是一种专门用来显示字母、数字、符号等的点阵型液晶模块,它有若干个5X7或5X11点阵字符位组成,每个点阵字符位都可以显示一个字符。
每位之间有一个点距的间隔,每行之间也有间隔,起到了字符间距和行间距的作用,正因为如此,所以它不能像12864一样显示图形,但是有时候很想要用图形表示,那么LCD1602提供了8个空间的自定义字符,如图1所示,显示的年月日,.C就是自定义字符。
2.通用型LCD1602操作方法LCD1602是指显示的内容为16X2,即可以显示两行,每行16个字符液晶模块(显示字符和数字)。
目前市面上字符液晶绝大多数是基于HD44780液晶芯片的,控制原理是完全相同的,因此基于HD44780写的控制程序可以很方便地应用于市面上大部分的字符型液晶。
如图2所示,字符型LCD1602通常有14条引脚线或16条引脚线的LCD,多出来的2条线是背光电源线VCC(15脚)和地线GND(16脚),从左到右分别是1引脚到16引脚在这里要说明的是:(1)要用1602型LCD显示字符必须解决3个问题:a.待显示字符ASCII 标准码产生;b.液晶显示模式的设置;c.字符显示位置的指定。
(2)若想在00H处显示数据的话,则必须将00H加上80H,即0x00H+0x80H,若要在01H处显示数据,也必须加0x80H,例如要将某字符显示在第2行第5列,则确定地址的指令代码应为80H+44H=C4H。
1602的使用方法及3个代码
void delay(uint xms)
{ //延时函数
uint i,j;
for(i = xms;i > 0;i--)
for(j = 110;j > 0;j--);
}
/*******************************************************************/
(2)读/写控制设置为写模式,即低电平。
(3)将数据或命令送达数据线上。
(4)将E一个高脉冲将数据送入液晶控制器,完成写操作。
1602
/*程序功能:在1602液晶上显示1 2 3 4 5*/
#include <reg52.h>
typedef unsigned char uchar;
typedef unsigned int uint;
{
lcd_wcmd(0x38); //16*2显示,5*7点阵,8位数据
delay(1);
lcd_wcmd(0x0c); //设置开显示,不显示光标
delay(1);
lcd_wcmd(0x06); //写一个字符后地址指针加1
delay(1);
lcd_wcmd(0x01); //显示清0,数据指针清0
{
lcd_wcmd(0x18); //全屏字符同时左移一格,写在屏幕外的字符慢慢显示出来
delay(800); //控制移动时间
}
}
}
综合实验三:按键控制
/*此程序功能:按下4个按键可在1602液晶上显示不同字样*/
#include <reg52.h> //52系列单片机头文件
【精品】液晶显示屏1602的使用
Proteus仿真图C程序:/******************************************实例81:用LCD显示字符'A'*******************************************/#include<reg51.h>//包含单片机寄存器的头文件#include<intrins.h>//包含_nop_()函数定义的头文件sbitRS=P2^0;//寄存器选择位,将RS位定义为P2.0引脚sbitRW=P2^1;//读写选择位,将RW位定义为P2.1引脚sbitE=P2^2;//使能信号位,将E位定义为P2.2引脚sbitBF=P0^7;//忙碌标志位,,将BF位定义为P0.7引脚/*****************************************************函数功能:延时1ms(3j+2)*i=(3×33+2)×10=1010(微秒),可以认为是1毫秒***************************************************/ voiddelay1ms(){unsignedchari,j;for(i=0;i<10;i++)for(j=0;j<33;j++) ;}/*****************************************************函数功能:延时若干毫秒入口参数:n***************************************************/ voiddelay(unsignedcharn){unsignedchari;for(i=0;i<n;i++)delay1ms();}/*****************************************************函数功能:判断液晶模块的忙碌状态返回值:result。
用1602液晶显示自定义字符
⽤1602液晶显⽰⾃定义字符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显示模块控制指令
I/D:
表示地址计数器的变化情况,即光标的移动方向。
I/D=1:计数器地址自动加1,光标右移一字符位置。
I/D=0:计数器地址自动减1,光标左移一字符位置。
S:
显示屏上画面向左或向右全部移动一个字符位。
S=1,I/D=1:显示画面左移;S=1,I/D=0:显示画面右移
序号
11指令
清显示
光标返回
置输入模式
显示开/关控制
光标或字符移动
置功能
置字符存储器地址
置数据存储器地址
读忙标志或地址
写数到CGRAM或DDRAM
RS 01R/W 10
1D1
BF D1DD400001DL D30001
S/C
N D2001D R/L F D101I/D C **D01*S B **字符发生器存储地址(AGG)显示数据存储器地址(ADD)计数器地址(AC)
(10)指令10:写数据。
(11)指令11:读数据。
要写的数据内容
读出的数据内容
从CGRAM或DDRAM读数1:增量/减量
S=1:全显示屏移动:显示屏移动/光标移动:左移/右移
:8位/4位
:2行/1行
:5*10点阵/5*7点阵:内部操作正在进行/允许指令操作
*:
无关项
(1)指令1:清显示,光标复位到地址00H位置。
(2)指令2:光标复位,光标返回到地址00H.
(6)指令6:功能设置命令。
DL=1时:
内部数据总线为4位宽度DB7~DB4;DL=0时,内部总线为8位宽度。
N=0时,单行显示;N=1时,双行显示。F=0时,显示字形5*7点阵;F=1时,5*10。
大橡树常用液晶的使用之LCD1602显示自定义字符及汉字1
一、常用液晶的使用之LCD1602显示自定义字符及汉字2010年12月22日星期三 11:00好久没写单片机的文章了,一直以来比较忙,早就想写一个关于常见液晶的使用方法的,但是一直没机会写,只得抽些时间写一下了,总共介绍两款液晶吧,LCD1602和LCD12864,原本还想加上NOKIA5110的,但是Proteus仿真库里面没有就不写了!呵呵,有什么不妥的地方,还望大家指正啊!第一篇讲解一下LCD1602,学过单片机的朋友们都知道它了吧,可以说是用的最广,最简单,也是学液晶入门级别的一块液晶了。
LCD1602顾名思义就是两行显示的液晶,每行最多显示16个字符(里面总共有160个字符),其中包括阿拉伯数字、英文字母的大小写,常用符号,及日文的假名!每个字符对应一个ASCII 码,我们通过向液晶送相应符号的ASCII码来显示这个字符。
下面看一下Proteus软件中的LCD1602,在Proteus软件的元件库中,LCD1602为LM016L,下面是这块液晶的引脚图:具体的相关引脚和功能设定参看LCD1602的PDF文档资料,由于篇幅问题,这里就不赘述了!还有一点要说的就是大家在仿真LCD1602时,要是用的是DB7~DB0连单片机的P0口的话,一定要加上拉电阻,要不然驱动不了,因为单片机的四组IO口就P0的内部无上拉,驱动能力弱!看下面的图:在P0口加了排阻(RESPACK-8)对于自带字符的显示,只需要将对应的ASCII码写入LCD中显示即可,这个是每个人开始学习液晶最开始要学会的了,看看数据手册,写写程序,想必大家都会了,这里就不做介绍,本篇着重讲解一下怎样自定义显示字符,比如显示自定的字符、显示汉字等等这些!要显示我们自定义的字符,就要用到LCD中的CGRAM存储器(character generate RAM),而我们之前用的显示自带的字符用到的是DDRAM,两个是不同的。
看液晶手册我们知道,CGRAM的容量是64个字节,而一个字符是8个字节,所以一共能显示8个自定义的字符。
1602命令与字库
第一章前言“HY”是深圳誉信电子公司字符型液晶显示模块(LCM)标号的代码词头,该系列是目前国际品种最全的字符型LCM系列之一,它具有8 ⨯ 1 ~ 40 ⨯ 4(字符⨯行)各种规格,广泛应用于智能仪表、通讯、办公自动化及军工等领域。
字符型液晶显示模块由字符型液晶显示屏(LCD),控制驱动主电路HD44780及其扩展驱动电路HD44100,少量阻、容元件,结构件等装配在PCB板上而成。
字符型液晶显示模块目前在国际上已经规范化,无论显示屏规格如何变化,其电特性和接口形式都是统一的。
因此只要设计出一种型号的接口电路,在指令设置上稍加改动即可使用各种规格的字符型液晶显示模块。
第二章字符型液晶显示模块的基本特点1、液晶显示屏是以若干个5⨯8或5⨯11点阵块组成的显示字符群。
每个点阵块为一个字符位,字符间距和行距都为一个点的宽度。
2、主控制驱动电路为HD44780(HITACHI)及其他公司全兼容电路,如SED1278(SEIKOEPSON)、KS0066(SAMSUNG)、NJU6408(NER JAPAN RADIO)。
3、具有字符发生器ROM可显示192种字符(160个5⨯7点阵字符和32个5⨯10点阵字符,见附录一)4、具有64个字节的自定义字符RAM,可自定义8个5⨯8点阵字符或四个5⨯11点阵字符。
5、具有80个字节的RAM。
6、标准的接口特性,适配M6800系列MPU的操作时序。
7、模块结构紧凑、轻巧、装配容易。
8、单+5V电源供电。
9、低功耗、长寿命、高可靠性。
第三章HY字符型液晶显示模块特性一、HY系列接口特性及时序1、HD44780读、写操作(时序见附录二)(1)(2)(3)2注:15、16两管脚用于带背光模块,不带背光的模块这两个管脚悬空不接。
二、HY系列电特性(1)绝对最大值范围(2三、HY系列供电电路(见附录三)第四章 HY字符型液晶显示模块指令集一、指令集功能:清DDRAM和AC值。