16×2字符型液晶显示实例
单片机程序设计实践教程_第14章_16×2液晶显示
图14-4 1602LCD的读操作时序
17
图14-5 1602LCD的写操作时序
18
读状态
写指令
输入
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=高脉冲
21
在对液晶显示器的初始化中要先设置其显示模式,在液晶显示器
显示字符时光标是自动右移的,无需人工干预。每次输入指令前都 要判断液晶显示器是否处于忙的状态。
1602液晶显示器内部的字符发生存储器(CGROM)已经存储
了160个不同的点阵字符图形,如图14-7所示。这些字符有阿拉伯 数字、英文字母的大小写、常用的符号和日文假名等,每一个字符
都有一个固定的代码,比如大写英文字母'A'的代码是01000001B
(41H),显示时模块把地址41H中的点阵字符图形显示出来,就 能看到字母'A'。
22
图14-7 1602LCD的CGROM字符代码与图形对应图 23
14.6.4 项目系统及程序分析
如图14-8是1602液晶显示器项目的系统功能图,图中保留了与 本项目相关的各个控制、数据和地址信号,其中信号RS、R/W和E 的功能在表14-1中已被列出。根据前文所述,1602液晶显示器的 E端为使能端,由表14-3可知,当E端为高电平或由高跳变成低电
26
其余3种情况的端口地址也可用该方法确定,引入主函数前的
端口地址定义: #define LCDCMDPort XBYTE[0x5ffc] //LCD命令字的地址 #define LCDStatusPort XBYTE[0x5ffd] //LCD状态标志端口 #define LCDWdataPort XBYTE[0x5ffe] //LCD写数据端口 #define LCDRdataPort XBYTE[0x5fff] //LCD读数据端口 #define Busy 0x80 //LCD忙判别位 学习了以上知识后,结合项目中C语言源程序的注解,读者不 难理解所有程序代码。值得一提的是,前文提及1602液晶显示器 相对于STC单片机来说是一个“慢”设备,每次STC单片机对其进 行读写操作时,必须检测LCD的忙标志位。由表14-2的指令9可知, 当BF为高电平表示忙,此时液晶显示器不能接收指令或者数据;如 果为低电平表示不忙。则液晶显示器可以接收指令或数据。
字符型液晶显示实验
实验十二字符型液晶显示实验(1602C)一、实验目的与要求了解字符型液晶模块的控制方法;了解它与单片机的接口逻辑。
二、实验设备STAR系列实验仪一套、PC机一台。
三、实验内容1、1602C液晶显示器(1) 字符型液晶显示器,可以显示二行,每行最多16个字符(2) 采用8位数据总线并行输入输出和3条控制线。
(3) 指令简单,7种指令2、实验过程在1602C液晶上,第一行显示“STAR ES598PCIS”,第二行滚动显示“Shanghai Xingyan Electronics Co.,LTD.”。
四、实验原理图五、实验步骤1、主机连线说明:2、运行程序,验证显示结果。
六、流程图1主程序流程图①子程序延时15ms ②子程序延时5ms③子程序DL50ms ④子程序 DelayTime_Move⑤子程序:DL05S ⑥子程序:WrconNoBusy⑦子程序:写指令子程序:WR_Con⑧子程序:写数据子程序WR_Data⑨子程序:Clear_LCD 10子程序:Close_Cursor关光标子程序11:清行A:哪一行Clear_Line子程序12:设置光标A--光标位置子程序13:Set_DdramCursor设置光标A--光标位置A=00H~13H,光标在第一行;A=40H~53H,光标在第二行A=14H~27H,光标在第三行;A=54H~67H,光标在第四行Set_CgramCursor七、实验现象在1602C液晶上,第一行显示“STAR ES598PCIS”,第二行滚动显示“Shanghai Xingyan Electronics Co.,LTD.”。
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”。
(001)基于HD44780液晶芯片的16×2字符型液晶(1602)简介
(001)基于HD44780液晶芯片的16×2字符型液晶(1602)简介声明:本文内容选自《AVR单片机与CPLD/FPGA综合应用入门》及《smc 1 602A LCM 使用说明书》,自用资料存档,请勿转载!否则因此引起的版权问题本人概不负责!液晶显示器以其微功耗、小体积、使用灵活等诸多优点在袖珍式仪表和低功耗应用系统中得到越来越广泛的应用。
液晶显示器通常可分为两大类,一类是点阵型,另一类是字符型。
点阵型液晶通常面积较大,可以显示图形;而一般的字符型液晶只有两行,面积小,只能显示字符和一些很简单的图形,简单易控制且成本低。
目前市面上的字符型液晶绝大多数是基于HD44780液晶芯片的,所以控制原理是完全相同的,为HD44780写的控制程序可以很方便地应用于市面上大部分的字符型液晶。
字符型LCD通常有14条引脚线(市面上也有很多16条引脚线的LCD,多出来的2条线是电源线VCC(15脚)和地线GND(16脚),其控制原理与14脚的LCD 完全一样),定义如下表所示:字符型LCD的引脚定义┌────┬────┬────┬──────┬────────────┐ㄧ引脚号ㄧ引脚名ㄧ电平ㄧ输入/输出ㄧ作用ㄧ├────┼────┼────┼──────┼────────────┤ㄧ 1 ㄧ Vss ㄧㄧㄧ电源地ㄧ├────┼────┼────┼──────┼────────────┤ㄧ 2 ㄧ Vcc ㄧㄧㄧ电源(+5V)ㄧ├────┼────┼────┼──────┼────────────┤ㄧ 3 ㄧ Vee ㄧㄧㄧ对比调整电压ㄧ├────┼────┼────┼──────┼───────────ㄧ 4 ㄧ RS ㄧ 0/1 ㄧ输入ㄧ 0=输入指令ㄧㄧㄧㄧㄧㄧ 1=输入数据ㄧ├────┼────┼────┼──────┼────────────┤ㄧ 5 ㄧ R/W ㄧ 0/1 ㄧ输入ㄧ 0=向LCD写入指令或数据ㄧㄧㄧㄧㄧㄧ 1=从LCD读取信息ㄧ├────┼────┼────┼──────┼────────────┤ㄧ 6 ㄧ E ㄧ 1,1→0 ㄧ输入ㄧ使能信号,1时读取信息,ㄧㄧㄧㄧㄧㄧ 1→0(下降沿)执行指令ㄧ├────┼────┼────┼──────┼────────────┤ㄧ 7 ㄧ DB0 ㄧ 0/1 ㄧ输入/输出ㄧ数据总线line0(最低位)ㄧ├────┼────┼────┼──────┼────────────┤ㄧ 8 ㄧ DB1 ㄧ 0/1 ㄧ输入/输出ㄧ数据总线line1ㄧ├────┼────┼────┼──────┼────────────┤ㄧ 9 ㄧ DB2 ㄧ 0/1 ㄧ输入/输出ㄧ数据总线line2ㄧ├────┼────┼────┼──────┼────────────┤ㄧ 10 ㄧ DB3 ㄧ 0/1 ㄧ输入/输出ㄧ数据总线line3ㄧ├────┼────┼────┼──────┼────────────┤ㄧ 11 ㄧ DB4 ㄧ 0/1 ㄧ输入/输出ㄧ数据总线line4ㄧ├────┼────┼────┼──────┼───────────ㄧ 12 ㄧ DB5 ㄧ 0/1 ㄧ输入/输出ㄧ数据总线line5ㄧ├────┼────┼────┼──────┼────────────┤ㄧ 13 ㄧ DB6 ㄧ 0/1 ㄧ输入/输出ㄧ数据总线line6ㄧ├────┼────┼────┼──────┼────────────┤ㄧ 14 ㄧ DB7 ㄧ 0/1 ㄧ输入/输出ㄧ数据总线line7(最高位)ㄧ└────┴────┴────┴──────┴────────────┘HD44780内置了192个常用字符,存于字符产生器CGROM(Character Gener ator ROM)中,另外还有几个允许用户自定义的字符产生RAM,称为CGRAM(C haracter Generator RAM)。
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-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 背光源正极图10-55 读操作时序图10-56 写操作时序1602LCD的RAM地址映射及标准字库表:液晶显示模块是一个慢显示器件,所以在执行每条指令之前一定要确认模块的忙标志为低电平,表示不忙,否则此指令失效。
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。
液晶字符显示
液晶字符显示————————————————————————————————作者:————————————————————————————————日期: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内建有192个5X7点阵的字型的字符发生器CGROM 8个可由用户自定义的5X7的字符发生器CGRAM3特性应用+3.3V电压,对比度可调内含复位电路提供各种控制命令,如:清屏、字符闪烁、光标闪烁、显示移位等多种功能有80字节显示数据存储器DDRAM内建有192个5X7点阵的字型的字符发生器CGROM8个可由用户自定义的5X7的字符发生器CGRA。
液晶显示控制(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++)
单片机ATMega16-的1602液晶显示两行字母
#include "iom16v.h" //ICC AVR环境下的ATmega16库函数定义了所有的寄存器及其位的标号#include "macros.h"#define LCM_RS_1 PORTB|=(1<<7) //RS为1,定义为PB口的第7位#define LCM_RS_0 PORTB&=(~(1<<7)) //RS为0,定义为PB口的第7位#define LCM_RW_1 PORTB|=(1<<6) //RW为1,定义为PB口的6位#define LCM_RW_0 PORTB&=(~(1<<6)) //RW为0,定义为PB口的6位#define LCM_E_1 PORTB|=(1<<5) //E为1,定义为PB口的第5位#define LCM_E_0 PORTB&=(~(1<<5)) //E为1,定义为PB口的第5位const unsigned char LCM_Dis_String[]="hello hcit";const unsigned char LCM_Dis_WJ[]="welcome to txx";/****************************************************************************** 函数功能:延时1us(4M晶振,0.25微秒的指令执行周期)入口参数:无函数说明:4*0.25=1(微秒)******************************************************************************/ void Delay_1_us(void){NOP();NOP();NOP();NOP();}/****************************************************************************** ********函数功能:延时若干微秒*********************************************************************入口参数:n_us******************/void Delay_n_us(unsigned int n_us){unsigned int cnt_i;for(cnt_i=0;cnt_i<n_us;cnt_i++){Delay_1_us();}}/****************************************************************************** ********函数功能:延时1ms(4M晶振,0.25微秒的指令执行周期)入口参数:无函数说明:(3×cnt_j+2)×cnt_i=(3×33+2)×40*0.25=1010(微秒),可以近似认为是1毫秒******************************************************************************* ********/void Delay_1_ms(void){unsigned char cnt_i,cnt_j;for(cnt_i=0;cnt_i<40;cnt_i++){for(cnt_j=0;cnt_j<33;cnt_j++){}}}/****************************************************************************** ********函数功能:延时若干毫秒入口参数:n_ms******************************************************************************* ********/void Delay_n_ms(unsigned int n_ms){unsigned int cnt_i;for(cnt_i=0;cnt_i<n_ms;cnt_i++){Delay_1_ms();}}/****************************************************************************** ********函数功能:读取忙标志和AC的值入口参数:无******************************************************************************* ********/unsigned char LCM_Re_BAC(){unsigned char status;//LCM_Dat为输入DDRA=0x00;//选择命令通道LCM_RS_0;//选择读操作LCM_RW_1;//使能线置1LCM_E_1;//等待信号线稳定Delay_n_us(1);//读入status=PINA;//使能线置0LCM_E_0;return status;}/****************************************************************************** ********函数功能:写入命令入口参数:命令代码******************************************************************************* ********/void LCM_Wr_CMD(unsigned char cmd_dat){//判忙while(LCM_Re_BAC()>=0x80);//LCM_Dat为输出DDRA=0xFF;//选择命令通道LCM_RS_0;//选择写操作LCM_RW_0;//使能线置1LCM_E_1;//设置命令数据PORTA=cmd_dat;//等待信号线稳定Delay_n_us(1);//送命令数据LCM_E_0;}/****************************************************************************** ********函数功能:写入数据入口参数:数据代码******************************************************************************* ********/void LCM_Wr_DAT(unsigned char dis_dat){//判忙while(LCM_Re_BAC()>=0x80);//LCM_Dat为输出DDRA=0xFF;//选择数据通道LCM_RS_1;//选择写操作LCM_RW_0;//使能线置1LCM_E_1;//设置数据数据PORTA=dis_dat;//等待信号线稳定Delay_n_us(1);//送数据数据LCM_E_0;Delay_n_us(40);}/****************************************************************************** ********函数功能:初始化入口参数:无******************************************************************************* ********/void LCM_1602_Init(void){LCM_Wr_CMD(0x38); //显示模式设置:16×2显示,5×7点阵,8位数据接口Delay_n_ms(5); //延时5msLCM_Wr_CMD(0x38);Delay_n_ms(5);LCM_Wr_CMD(0x38);Delay_n_ms(5);LCM_Wr_CMD(0x0f); //显示模式设置:显示开,无光标,光标无闪烁Delay_n_ms(5);LCM_Wr_CMD(0x06); //显示模式设置:光标右移,字符不移Delay_n_ms(5);LCM_Wr_CMD(0x01); //清屏幕指令,将以前的显示内容清除Delay_n_ms(5);}unsigned char Get_Key_Val(){unsigned char Key_Val;Key_Val=PINC;switch(Key_Val){case 0xfe:Key_Val=1;break;case 0xfd:Key_Val=2;break;case 0xfb:Key_Val=3;break;default:Key_Val=0;break;}while(PINC==0xFF);return Key_Val;}void main(void){unsigned char cnt_temp,Key_Val;DDRB=0xFF;DDRA=0xFF;DDRC=0x00;PORTC=0xFF;while(1){LCM_1602_Init();Key_Val=Get_Key_Val();switch(Key_Val){case 1:{cnt_temp=0;LCM_Wr_CMD(0x80);while(LCM_Dis_String[cnt_temp]!='\0'){LCM_Wr_DAT(LCM_Dis_String[cnt_temp++]);Delay_n_ms(100);}break;}case 2:{cnt_temp=0;LCM_Wr_CMD(0xC0);while(LCM_Dis_WJ[cnt_temp]!='\0'){LCM_Wr_DAT(LCM_Dis_WJ[cnt_temp++]);Delay_n_ms(100);}break;}case 3:{cnt_temp=0;LCM_Wr_CMD(0x80);while(LCM_Dis_String[cnt_temp]!='\0'){LCM_Wr_DAT(LCM_Dis_String[cnt_temp++]);Delay_n_ms(100);}cnt_temp=0;LCM_Wr_CMD(0xC0);while(LCM_Dis_WJ[cnt_temp]!='\0'){LCM_Wr_DAT(LCM_Dis_WJ[cnt_temp++]);Delay_n_ms(100);}break;}}}}。
51单片机LCD1602液晶显示的接法
51单片机综合学习之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字节相对应,每一字节的内容和显示屏上相应位置的亮暗对应。
通用型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字符型液晶显示篇
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;。
字符型液晶LCD模块原理及设计学习
字符型液晶(LCD)模块原理及设计学习17.1 液晶显示器概述在小型的智能化电子产品中,普通的7段LED数码管只能用来显示数字,若遇到要显示英文字母或图像、汉字时,则必须选择使用液晶显示器(简称LCD)。
LCD显示器的应用很广,简单的如手表、计算器上的液晶显示器,复杂如笔记本电脑上的显示器等,都使用LCD。
在一般的商务办公机器上,如复印机和传真机,以及一些娱乐器材、医疗仪器上,也常常看见LCD的足迹。
LCD可分为两种类型,一种是字符模式LCD,另一种为图形模式LCD。
这里要介绍的LCD为字符型点矩阵式LCD模组(Liquid Crystal Display Module简称LCM),或称字符型LCD。
市场上有各种不同厂牌的字符显示类型的LCD,但大部分的控制器都是使用同一块芯片来控制的,编号为HD44780,或是兼容的控制芯片。
字符型液晶显示模块是一类专门用于显示字母、数字、符号等的点阵型液晶显示模块。
在显示器件的电极图形设计上,它是由若干个5*7或5*11等点阵字符位组成。
每一个点阵字符位都可以显示一个字符。
点阵字符位之间空有一个点距的间隔起到了字符间距和行距的作用。
目前常用的有16字*1行、16字*2行、20字*2行和40字*2行等的字符模组。
这些LCM 虽然显示的字数各不相同,但是都具有相同的输入输出界面。
这里我们以16字*2行(简称16*2)字符型液晶显示模块为例,详细介绍字符液晶显示模块的应用技术。
读者朋友经过学习并实践实际的LCD程序设计,那么当你学完后,将掌握字符形液晶显示模块的程序设计技术,使液晶显示器听你的指挥显示出各种字符及信息,用到你设计的产品中后添色不少并增强市场竞争力。
字符LCD模块的控制器主要为日立公司的HD44780及其替代集成电路,驱动器为HD44100及其替代的兼容集成电路。
17.2 16*2字符型液晶显示模块(LCM)特性1.+5V电压,反视度(明暗对比度)可调整。
LCD1602原理及显示程序
在日常生活中,我们对液晶显示器并不陌生。
液晶显示模块已作为很多电子产品的通过器件,如在计算器、万用表、电子表与很多家用电子产品中都可以看到,显示的主要是数字、专用符号和图形。
在单片机的人机交流界面中,一般的输出方式有以下几种:发光管、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字节相对应,每一字节的内容和显示屏上相应位置的亮暗对应。
LCD1602液晶显示总结
LCD1602液晶显示应用总结一、1602里面存储器有三种:CGROM、CGRAM、DDRAMCGROM保存了厂家生产时固化在LCM中的点阵型显示数据;CGRAM是留给用户自己定义点阵型显示数据的;DDRAM则是和显示屏的内容对应的。
1602内部的DDRAM有80字节,而显示屏上只有2行×16列,共32个字符,所以两者不完全一一对应。
默认情况下,显示屏上第一行的内容对应DDRAM中80H到8FH的内容,第二行的内容对应DDRAM 中C0H到CFH的内容。
DDRAM中90H到A7H、D0H到E7H 的内容是不显示在显示屏上的,但是在滚动屏幕的情况下,这些内容就可能被滚动显示出来了。
注:这里列举的DDRAM的地址准确来说应该是DDRAM地址+80H 之后的值,因为在向数据总线写数据的时候,命令字的最高位总是为1。
DDRAM(Display Data RAM)就是显示数据RAM,用来寄存待显示的字符代码。
共80个字节,其地址和屏幕的对应关系如下:DDRAM相当于计算机的显存,我们为了在屏幕上显示字符,就把字符代码送入显存,这样该字符就可以显示在屏幕上了。
同样LCD1602共有80个字节的显存,即DDRAM。
但LCD1602的显示屏幕只有16×2大小,因此,并不是所有写入DDRAM的字符代码都能在屏幕上显示出来,只有写在上图所示范围内的字符才可以显示出来,写在范围外的字符不能显示出来。
这样,我们在程序中可以利用下面的“光标或显示移动指令”使字符慢慢移动到可见的显示范围内,看到字符的移动效果。
为了在液晶屏幕上显示字符,就把字符代码送入DDRAM。
例如,如果想在屏幕左上角显示字符‘A’,那么就把字符‘A’的字符代码41H写入DDRAM的00H 地址处即可。
至于怎么写入,后面会有说明。
那么为什么把字符代码写入DDRAM,就可以在相应位置显示这个代码的字符呢?我们知道,LCD1602是一种字符点阵显示器,为了显示一种字符的字形,必须要有这个字符的字模数据,什么叫字符的字模数据,看看下面的这个图就明白了:A的字模上图的左边就是字符‘A’的字模数据,右边就是将左边数据用“○”代表0,用“■”代表 1。
跟我学51单片机LCD1602液晶显示模块
1、LCD1602的P1.0-P1.4分别连接到51单片机的P0.0-P0.4; 2、LCD1602的P2.0-P2.7分别连接到51单片机的P2.0-P2.7;
3、LCD1602的VSS和VDD分别连接到51单片机的地线和电源; 4、LCD1602的VEE连接到51单片机的+5V;
5、LCD1602的PSB和REST分别直接接地和+5V。
二、LCD1602的应用
1、智能家居系统
智能家居系统是LCD1602的重要应用领域之一。在智能家居系统中,LCD1602 可以作为人机界面,显示各种信息,如温度、湿度、空气质量、电量等。同时, LCD1602还可以显示各种设备的状态,如灯光、空调、电视等,使用户能够更加 方便地控制各种设备。
2、工业控制系统
1、写入指令:通过单片机的I/O 口发送相应的指令码
2、写入数据:通过单片机的I/O 口发送相应的字符编码
显示控制在基础操作的基础上,我们可以进一步实现LCD1602液晶显示模块 的显示控制。下面通过几个实例来介绍如何利用LCD1602液晶显示模块实现文字 显示的控制。
1、静态显示:将一段文本的字符编码逐个写入LCD1602的控制器中,即可实 现文字的静态显示。例如,我们可以使用循环结构,依次将每个字符编码写入 LCD1602的控制器中。
参考内容二
基本内容
液晶显示模块LCD1602是一种常见的显示设备,广泛应用于各种嵌入式系统 和电子产品中。它具有低功耗、体积小、重量轻、高分辨率和长寿命等优点,因 此在许多领域中得到了广泛的应用。
一、LCD1602的概述
LCD1602是一种字符型液晶显示器,它由160个字符显示区域和8个字符显示 位组成。它支持多种字符集,包括英文字符集和数字字符集等。此外,LCD1602 还具有背光功能,可以在暗环境下清晰地显示字符。
Arduino 笔记-2x16 LCD
Arduino 筆記– Lab9 在2x16 LCD 上顯示"Hello World" 訊息2010年12月26日星期日實驗目的練習使用HD44780 相容的文字型LCD(Liquid crystal display),在2x16 LCD 上顯示"Hello World” 訊息。
2x16 LCD 簡介(圖片來源: )HD44780 相容的2x16 LCD 可以顯示兩行訊息,每行16 個字元,它可以顯示英文字母、希臘字母、標點符號以及數學符號,除了顯示訊息外,它還有其它功能,包括訊息捲動(往左和往右捲動)、顯示游標和LED背光等。
(圖片來源: LCD 101)LCD 總共有14 支接腳,如果內建背光的話是16 支,這些腳位的功能整理於下表:日立HD44780 相容的LCD 有4-bit 和8-bit 兩種使用模式,使用4-bit 模式主要的好處是節省I/O 腳位,通訊的時候只會用到 4 個高位元(D4-D7),D0-D3 這四支腳位可以不用接。
每個送到LCD 的資料會被分成兩次傳送–先送4 個高位元,然後才送4 個低位元。
∙麵包板x 1∙Arduino 主板x 1∙HD44780 相容LCD x 1 (本文所用的為14 pin 無背光LCD)∙旋轉式可變電阻x 1∙單心線x N接線∙將LCD 的RS, Enable, D4, D5, D6, D7 依序接到12, 11, 5, 4, 3, 2 等腳位上∙將LCD 的Vss 及R/W 接到GND,Vdd 接到+5V∙可變電阻中間腳位接到LCD 的Vo,剩下的兩支腳位,一支接到5V,另外一支接到GND (註:也可以不使用可變電阻,只要在LCD 的Vo 上串接一顆1k ohm 電阻連到GND 即可)程式碼01/* Lab9 - 在 2x16 LCD 上顯示 "Hello World" 訊息02 The circuit:03 * LCD RS pin to digital pin 1204 * LCD Enable pin to digital pin 1105 * LCD D4 pin to digital pin 506 * LCD D5 pin to digital pin 407 * LCD D6 pin to digital pin 308 * LCD D7 pin to digital pin 209 * 10K Potentiometer:10 * ends to +5V and ground11 * wiper to LCD VO pin (pin 3)1213 This example code is in the public domain.14/en/Tutorial/LiquidCrystal15 */16// 引用 LiquidCrystal Library17#include <LiquidCrystal.h>18// 建立 LiquidCrystal 的變數 lcd19// LCD 接腳: rs, enable, d4, d5, d6, d720// 對應到 Arduino 接腳: 12, 11, 5, 4, 3, 221LiquidCrystal lcd(12, 11, 5, 4, 3, 2);22void setup() {23 // 設定 LCD 的行列數目 (2 x 16)24 lcd.begin(16, 2);25 // 列印 "Hello World" 訊息到 LCD 上26 lcd.print("hello, world!");27}28void loop() {29 // 將游標設到 column 0, line 130 // (注意: line 1 是第二行(row),因為是從 0 開始數起):31 lcd.setCursor(0, 1);32 // 列印 Arduino 重開之後經過的秒數33 lcd.print(millis()/1000);34}如果訊息沒有顯示在螢幕上,或者是模糊朦朧的,首先應該做的事是檢查可變電阻以調整對比。
1602液晶显示汉字
if (0 == y) x |= 0x80; //当要显示第一行时地址码+0x80; else x |= 0xC0; //在第二行显示是地址码+ห้องสมุดไป่ตู้xC0; Write_com(x); //发送地址码 Write_dat(Data); //发送要显示的字符编码 } 显示字符“A”调用过程如下代码: DisplayOneChar(0,0,0x41) ;//功能:在第1行 第1个字符 显示一个大写字母A 在C语言操作时,还可以显示整个字符串。定义一个字符串显示函数,可以通过直接输入字符方式进行显示 //功能:按指定位置显示一串字符 //输入:列显示地址x(取值范围0-15) 行显示地址y(取值范围0-1), 指定字符串指针*p,要显示的字符个数count (取值范 围1-16) void Disp_1602(unsigned char x,unsigned char y,unsigned char *p,unsigned char count) { unsigned char i; for(i=0;i<count;i++) { if (0 == y) x |= 0x80; //当要显示第一行时地址码+0x80; else x |= 0xC0; //在第二行显示是地址码+0xC0; Write_com(x); //发送地址码 Write_dat(*p); //发送要显示的字符编码 x++; p++; } } 调用方法如下: DisplayListChar(0,0,"hello world",11); //液晶1602第一行显示 //液晶1602第二行显示二、显示自定义字符。 DisplayListChar(0,1,"",12);
FPGA实验之1602字符液晶设计资料
FPGA实验之1602字符液晶设计1. 实验目的:通过本次实验,掌握使用HDL语言操作1602字符液晶的方法。
2. 实验原理:(1)1602字符液晶简介上一课我们学会了LED数码管的原理及使用,下面,我们再来学习字符型液晶模块的使用。
液晶屏显示模块与数码管相比,它显得更为与业、漂亮。
液晶显示屏以其微功耗、体积小、显示内容丰富、超薄轻巧、使用方便等诸多优点,在通讯、仪器仪表、电子设备、家用电器等低功耗应用系统中得到越来越广泛的应用,使这些电子设备的人机界面变得越来越直观形象,目前已广泛应用与电子表、计算器、IC卡电话机、液晶电视机、便携式电脑、掌上型电子玩具、复印机、传真机等许多方面……1602字符液晶在实际的产品中运用的也比较多了。
而且对于FPGA的学习而言,掌握最常见的液晶屏1602的驱动与用法是每一个学习者必然要经历的过程。
所谓1602是指显示的内容为16*2,即可以显示两行,每行16个字符。
目前市面上字符液晶绝大多数是基于SPLC780C液晶芯片的,控制原理是完全相同的,因此基于SPLC780C 写的控制程序可以很方便地应用于市面上大部分的字符型液晶。
目前市面上最常见的1602液晶背光主要有两种,一种是普通的黄绿色背光,黑色的文字。
另一种显示屏是蓝色背光白色字体,如下图所示。
前者使用更加广泛,成本低廉。
后者显示的效果更加美观,但是价格也相对较高。
此外还分别有单芯片与双芯片的版本。
LCD背面的黑块内部就封装了控制芯片,市面上许多低廉的1602都是单芯片驱动,性能不稳定,双芯片的价格要上高一些,但是稳定性要远远好于单芯片的1602。
本实验板采用了深圳亚斌电子有限公司生产的蓝色背光的双芯片YB1602A 液晶模块。
YB1602A采用COB工艺制作,结构稳定,使用寿命长,可以应用于智能仦器仦表,通讯,办公自动化以及军工领域。
1602液晶的正面(绿色背光,黑色字体)1602液晶的背面(绿色背光,黑色字体)YB1602A主要特性如下:◆8位并行数据接口,适配M6800系列时序;◆可选4位并行数据方式;◆具有字符发生器ROM,含10880位;◆192 种5×8 点字体字符;◆64 种5×10 点字体字符;◆具有字符发生器RAM,含512位;◆8 种5×8 点字体字符;◆4 种5×10 点字体字符;◆低功耗,高可靠性。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
{
LocateXY( x, y ); // 定位显示地址
WriteLcdData( Wdata ); // 写字符
}
/********************************
函数名称: void LcdReset( void )
功能 :在指定位置显
示出一个字符
说明 : 无
入口参数:x为光标的横坐标,y为光标的纵坐标,Wdata为要显示的字符
返回值 :无
********************************/
说明 : E =1 RS=1 RW=0
入口参数:dataW为要显示的字符
返回值 :无
********************************/
void WriteLcdData( char dataW )
{
WaitEnable(); // 检测忙信号
RS = 1;
RW = 0;
posy &= 0x1;
if ( posy )temp |= 0x40;
temp |= 0x80;
WriteLcdCommand(temp,0);
}
/********************************
函数名称: void DispOneChar(Uchar x,Uchar y,Uchar Wdata)
返回值 :无
********************************/
void Delay400Ms(void)
{
Uchar i = 5;
Uint j;
while(i--)
{
j=7269;
while(j--);
};
}
WriteLcdCommand( 0x01, 1); // 显示清屏
WriteLcdCommand( 0x06, 1); // 显示光标移动设置
WriteLcdCommand( 0x0c, 1); // 显示开及光标设置
}
/********************************
WriteLcdCommand( 0x38, 0); // 共三次
Delay5Ms();
WriteLcdCommand( 0x38, 0);
Delay5Ms();
WriteLcdCommand( 0x38, 1); // 显示模式设置(以后均检测忙信号)
WriteLcdCommand( 0x08, 1); // 显示关闭
函数名称: void Delay5Ms(void)
功能 :短延时函数
说明 :在单片机工作在12MH是大约延时5毫秒
入口参数:无
返回值 :无
********************************/
void Delay5Ms(void)
{
Uint i = 5552;
while(i--);
void LcdReset( void );
void Display( Uchar dd );
void DispOneChar(Uchar x,Uchar y,Uchar Wdata);
void ePutstr(Uchar x,Uchar y, Uchar code *ptr);
//主程ቤተ መጻሕፍቲ ባይዱ
void WriteLcdCommand( Uchar CMD,Uchar AttribC )
{
if (AttribC)
WaitEnable(); // 检测忙信号?
RS = 0;
RW = 0;
_nop_();
Data = CMD; // 送控制字子程序
_nop_();
Elcm = 1;
_nop_();
_nop_();
Elcm = 0; // 操作允许脉冲信号
}
/********************************
函数名称: void WriteLcdData( char dataW )
功能 :当前位置写字符
说明 : 无
入口参数:posx为光标的横坐标,posy为光标的纵坐标
返回值 :无
********************************/
void LocateXY( char posx,char posy)
{
Uchar temp;
temp = posx & 0xf;
入口参数:x为横坐标,y为纵坐标,*ptr为指向显示字符串的指针
返回值 :无
********************************/
void ePutstr(Uchar x,Uchar y, Uchar code *ptr)
{
Uchar i,l=0;
while (ptr[l]>31){l++;};
#include <reg51.h>
#include<intrins.h>
//变量类型标识的宏定义
#define Uchar unsigned char
#define Uint unsigned int
// 控制引脚定义
sbit RS = P2^0; //数据/命令选择,高电平表示传送的是数据,低电平则表示是命令
void Delay400Ms(void);
void Delay5Ms(void);
void WaitEnable( void );
void WriteLcdData( char dataW );
void WriteLcdCommand( Uchar CMD,Uchar AttribC );
功能 :检测LCD控制器状态
说明 :正常读写操作之前必须检测LCD控制器状态:CS=1 RS=0 RW=1
DB7: 0 LCD控制器空闲; 1 LCD控制器忙
入口参数:无
返回值 :无
********************************/
void WaitEnable( void )
sbit RW = P2^1; // 读写选择,高电平表示从1602读数据,低电平则表示写数据到1602
sbit Elcm = P2^6; //使能信号
#define Data P0 //定义数据端口
#define By 0x80
code char emp[]="For an example";
功能 :初始化液晶屏
说明 : 无
入口参数:无
返回值 :无
********************************/
void LcdReset( void )
{
WriteLcdCommand( 0x38, 0); // 显示模式设置(不检测忙信号)
Delay5Ms();
_nop_();
Data = dataW;
_nop_();
Elcm = 1;
_nop_();
_nop_();
Elcm = 0; // 操作允许脉冲信号
}
/********************************
函数名称: void WaitEnable( void )
功能 :在1602第一行显示dd到dd+15
说明 : 无
入口参数:dd为要显示的第一个数
返回值 :无
********************************/
void Display( Uchar dd )
{
Uchar i;
for (i=0;i<16;i++) {
DispOneChar(i,1,dd++);
dd &= 0x7f;
if (dd<32) dd=32;
}
}
/********************************
函数名称: void LocateXY( char posx,char posy)
功能 :在指定位置显示光标定位
【实例40】16×2字符型液晶显示实例
/*---------------
文件名称: 1602_test.C
功能 :SMC1602A的C51驱动程序
说明 :在 SMC1602A上显示字符
----------------*/
for (i=0;i<l;i++)
{
DispOneChar(x++,y,ptr[i]);
if ( x == 16 )
{
x = 0; y ^= 1;
}
}
}
/********************************
函数名称: void Display( Uchar dd )
void main(void)
{
Uchar temp;
Delay400Ms();
LcdReset();
temp = 32;
ePutstr(0,0,emp); // 显示一个预定字符串“For an example”