这是什么lcd?lcd1602第三脚怎么接 20脚

1602液晶的引脚定义_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
1602液晶的引脚定义
&&LCD1602有关的资料
阅读已结束,下载本文需要
想免费下载更多文档?
定制HR最喜欢的简历
下载文档到电脑,同时保存到云知识,更方便管理
加入VIP
还剩7页未读,
定制HR最喜欢的简历
你可能喜欢LCD1602_百度百科
清除历史记录关闭
声明:百科词条人人可编辑,词条创建和修改均免费,绝不存在官方及代理商付费代编,请勿上当受骗。
LCD1602是一种工业字符型液晶,能够同时显示16x02即32个字符。LCD1602液晶显示的原理是利用液晶的物理特性,通过电压对其显示区域进行控制,即可以显示出图形。
LCD1602简介
工业字符型液晶,能够同时显示16x02即32个字符。(16列2行)
注:为了表示的方便 ,后文皆以1表示高电平,0表示低电平。
1602液晶也叫1602字符型液晶,它是一种专门用来显示字母、数字、符号等的型液晶模块。它由若干个5X7或者5X11等点阵字符位组成,每个点阵字符位都可以显示一个字符,每位之间有一个点距的间隔,每行之间也有间隔,起到了字符间距和行间距的作用,正因为如此所以它不能很好地显示图形(用自定义CGRAM,显示效果也不好)。
1602LCD是指显示的内容为16X2,即可以显示两行,每行16个字符液晶模块(显示字符和数字)。
市面上字符液晶大多数是基于HD44780液晶芯片的,控制原理是完全相同的,因此基于HD44780写的控制程序可以很方便地应用于市面上大部分的字符型液晶。
LCD1602管脚功能
1602采用标准的16脚接口,其中:
第1引脚:GND为
第2引脚:VCC接5V电源正极
第3引脚:V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高(对比度过高时会 产生“鬼影”,使用时可以通过一个10K的电位器调整对比度)。
第4引脚:RS为选择,高电平1时选择、低电平0时选择。
第5引脚:RW为读写信号线,高电平(1)时进行读操作,  
以51为例的简单原理图
低电平(0)时进行写操作。
第6引脚:E(或EN)端为使能(enable)端,高电平(1)时读取信息,负跳
变时执行指令。
第7~14引脚:D0~D7为8位双向数据端。第15~16脚:或背灯电
源。第15引脚背光正极,第16引脚背光负极。
3.3V或5V工作电压,对比度可调
内含复位电路
提供各种控制命令,如:清屏、字符闪烁、光标闪烁、显示移位等多种功能
有80显示数据存储器
内建有192个5X7的字型的字符发生器
8个可由用户自定义的5X7的字符发生器CGRAM
微功耗、体积小、显示内容丰富、超薄轻巧,常用在袖珍式仪表和低功耗应用系统中。
注:关于E=H脉冲——开始时初始化E为0,然后置E为1。
1602液晶模块内部的发生()已经存储了160个不同的字符图形,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码,比如大写的英文字母“A”的代码是B(41H),显示时模块把地址41H中的点阵字符图形显示出来,我们就能看到字母“A”。
在编程中还可以用字符型或变量赋值,如'A’。因为CGROM储存的字符代码与我们PC中的字符代码是基本一致的,因此我们在向DDRAM写C51字符代码程序时甚至可以直接用P1=‘A’这样的方法。PC在编译时就把'A'先转换为41H代码了。
CGROM中字符码与字符字模关系对照表
字符代码0x00~0x0F为用户自定义的字符图形RAM(对于5X8点阵的字符,可以存放8组,5X10点阵的字符,存放4组),就是CGRAM了。
0x20~0x7F为标准的ASCII码,0xA0~0xFF为日文字符和希腊文字符,其余字符码(0x10~0x1F及0x80~0x9F)没有定义。
以下是1602的16进制ASCII码表地址:读的时候,先读上面那行,再读左边那列,如:感叹号!的ASCII为0x21,字母B的ASCII为0x42(前面加0x表示十六进制)。
RSR/WD7D6D5D4D3D2D1D0说明清显示0000000001将DDRAM填满&20H&,并且设定DDRAM的地址计数器(AC)到&00H&归位000000001*设定DDRAM的地址计数器(AC)到&00H&,并且将游标移到开头原点位置;这个指令不改变DDRAM 的内容显示开关控制指令0000001DCB[D=1: 整体显示 ON],[C=1: 游标ON],[B=1:游标位置反白允许]
进入模式设置指令00000001I/D
SI/D=1,光标或闪烁向右移动,AC增加1。I/D=0,光标或闪烁向左移动,AC减少1,S整个显示移动光标或显示移位指令000001S/CR/L**光标或显示移位指令可使光标或显示在没有读写数据的情况下,向左或向右移动,指令不改变DDRAM 的内容功能设定00001DLNF**[DL=0/1:4/8位数据],[N=0/1,单行/双行显示],[F=0/1,5*8/5*10点阵显示模式]设置CGRAM地址
0001AC5AC4AC3AC2AC1AC0CGRAM地址设置指令设置CGRAM地址指针,设定DDRAM地址0010AC5AC4AC3AC2AC1AC0DDRAM地址设置指令设置DDRAM地址。一行地址范围00H~4FH,两行DDRAM地址第一行00H~27H,第二行40H~67H,加上高2位,[一行:80H-A7H],[二行:C0H-E7H]读忙标志和地址01BFAC6AC5AC4AC3AC2AC1AC0BF:忙标志位,BF=1,模块正在进行内部操作,此时模块不接受任何外部指令和数据。BF=0,模块可以接受外部的指令和数据;同时可以读出地址计数器(AC)的值。写RAM指令10D7D6D5D4D3D2D1D0将数据D7-D0写入到内部的RAM (DDRAM/CGRAM/IRAM/GRAM),将用户自定义的字符写入CGRAM中,D7~D5为000,D4~D0为5点的字模数据读RAM指令11D7D6D5D4D3D2D1D0从内部RAM读取数据D7——D0(DDRAM/CGRAM/IRAM/GRAM)
清除历史记录关闭LCD1602显示模块_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
LCD1602显示模块
阅读已结束,下载本文需要
想免费下载本文?
定制HR最喜欢的简历
下载文档到电脑,同时保存到云知识,更方便管理
加入VIP
还剩5页未读,
定制HR最喜欢的简历
你可能喜欢LCD1602液晶显示完全资料
我的图书馆
LCD1602液晶显示完全资料
一、关于LCD1602:
在编写LCD1602程序前,我们必须了解其手册上一些非常重要的信息,如果这些信息不能理解透彻,编程可能会遇到或多或少的问题,在此先大致归纳几点。
1602共16个管脚,但是编程用到的主要管脚不过三个,分别为:RS(数据命令选择端),R/W(读写选择端),E(使能信号);以后编程便主要围绕这三个管脚展开进行初始化,写命令,写数据。
以下具体阐述这三个管脚:
RS为寄存器选择,高电平选择数据寄存器,低电平选择指令寄存器。
R/W为读写选择,高电平进行读操作,低电平进行写操作。
E端为使能端,后面和时序联系在一起。
&&& 除此外,D0~D7分别为8位双向数据线。
2.操作时序:
写入指令码D0~D7
读取输出的D0~D7状态字
写入数据D0~D7
从D0~D7读取数据
注:关于E=H脉冲——开始时初始化E为0,然后置E为1,再清0.
读取状态字时,注意D7位,D7=1,禁止读写操作;D7=0,允许读写操作;
所以对控制器每次进行读写操作前,必须进行读写检测。(即后面的读忙子程序)
3.指令集:
LCD_1602 初始化指令小结:
0x38&& 设置16*2显示,5*7点阵,8位数据接口
0x01&& 清屏
0x0F&& 开显示,显示光标,光标闪烁
0x08&& 只开显示
0x0e&& 开显示,显示光标,光标不闪烁
0x0c&& 开显示,不显示光标
0x06&& 地址加1,当写入数据的时候光标右移
0x02&& 地址计数器AC=0;(此时地址为0x80) 光标归原点,但是DDRAM中断内容不变
0x18&& 光标和显示一起向左移动
4.显示地址:
LCD1602内部RAM显示缓冲区地址的映射图,00~0F、40~4F分别对应LCD1602的上下两行的每一个字符,只要往对应的RAM地址写入要显示字符的ASCII代码,就可以显示出来。
5.读写时序:
时序图1602手册中有,这里不引用了。时序图很重要,编程就是根据时序图设置寄存器,让LCD工作。
二、LCD1602程序编写流程:
LCD1602在了解完以上信息后便可以编写,这里我们把程序分为以下几步:
1.定义LCD1602管脚,包括RS,R/W,E。这里定义是指这些管脚分别接在单片机哪些I/O口上。
现举例如下:
sbit EN=P3^4;
sbit RS=P3^5;
sbit RW=P3^6;
2.显示初始化,在这一步进行初始化及设置显示模式等操作,包括以下步骤:
设置显示方式
清理显示缓存
设置显示模式
通常推荐的初始化过程如下:
注:以上写38H指令可以看情况省略1~2步
(以上都不检测忙信号)
(以下都要检测忙信号)
写指令08H 关闭显示
写指令01H 显示清屏
写指令06H 光标移动设置
写指令0cH 显示开及光标设置
3.设置显示地址(写显示字符的位置)。
4.写显示字符的数据。
三、LCD1602各子程序模块及主程序编写:
现在按照上面编写程序的流程,给出各子程序模块及主程序的例子。
1.头文件,宏定义,定义管脚等:
#include&reg52.h&
#include &string.h&
#define uchar unsigned char
#define uint unsigned int
sbit EN=P3^4;
sbit RS=P3^5;
sbit RW=P3^6;
uchar code table0[]={"QQ:"};& //此条语句为显示字符串时定义的字符串数组
2.LCD1602基本初始化子程序:
void LCD1602()
&P0=0&& //这里P0为与LCD D0~D7相连的I/O口
3.读忙子程序:
void read_busy()
&&while(P0&0x80);&& //P0和相与,D7位若不为0,停在此处
&&EN=0;&&&&&&&&&&&& //若为0跳出进入下一步;这条语句的作用就是检测D7位
}&&&&&&&&&         //若忙在此等待,不忙跳出读忙子程序执行读写指令
4.写指令写数据子程序:
void write(uchar i,bit j)
&&read_busy();
&&P0=i;& //其中i=0,写指令;i=1,写数据;
5.延时子程序:
void delay(uint c)&&& //功能为提供初始化等其他子程序中的延时1xc MS
&&uint a,b;
&&for(a=0;a&c;a++)
&&for(b=0;b&120;b++);
6.LCD1602初始化子程序:
void init()&&& //完全按照要求初始化流程来,中间省略了一步写指令38H
&&delay(15);
&&write(0x38,0);
&&delay(5);
&&write(0x38,0);
&&write(0x08,0);
&&write(0x01,0);
&&write(0x06,0);
&&write(0x0c,0);
7.显示单个字符子程序:
void display_lcd_byte(uchar y,uchar x,uchar z)&&& //Y=0,1(起始行)X=0~15(起始列)Z=想写字符的ASCII码
{&&&&&&&&&
    if(y)&&&&& //是否显示在第二行(若在第一行Y=0,不进入IF语句,若在第二行,进入IF语句
&&{&&&&&&&&
&&&x+=0x40;&& //第二行起始地址加上列数为字符显示地址
&&x+=0x80;&&&&& //设置数据指针位置
&&write(x,0);&&
&&write(z,1);&& //写入数据
8.显示字符串子程序:
void display_lcd_text(uchar y,uchar x,uchar table[])&&& //Y,X同上字符显示,table[]字符串数组&
&&uchar z=0;
&&t=strlen(table)+x;&& //& 求得字符串长度加上起始列位置
&&while(x&t)&&&&&&& //功能为LCD显示到字符串最后一个字符,防止字符串
&&{&&&&&&&&&&&&&&&& //没有16个字符,从而不够位产生乱码;
&&&&display_lcd_byte(y,x,table[z]);&&& //逐位显示数组内字符
9.主程序:
主程序里除了放入初始化程序外就是加入自己编写的显示子程序,根据你所要的不用功能可以编写各种类型的显示子程序,这里不做详细介绍,以下举例为显示一个字符和显示字符串的显示子程序。
void main()
&&LCD1602();
&&display_lcd_byte(0,0,'A');&&&&& //& 显示一个字符
&&display_lcd_text(1,3,table);&&& //& 显示字符串
&&while(1);
到此,让LCD1602显示的操作流程和编程思想基本可以告一段落了,这里有一个完整的显示程序可显示2行英文: ,大家可依样画瓢,自己修改运行,&但是1602的功能实现远不止这些。利用1602你可以做出动态效果的显示,并且除了显示一般字符外,1602还支持自定义字符等等其他一些功能,下面在最后简单介绍下显示动态效果和自定义字符。
一、显示动态效果:
&&& 显示动态效果包括让一个字符或字符串原位置闪烁,或者前后移动等等。其实动态效果原理很简单,就是简单的利用延时。
&&& 例如让字符原位置闪烁,可以认为是先让1602显示字符,延时一段时间后,可以显示空格或者直接清屏操作都可以达到让字符消失不见的效果,再延时一段时间后再让1602显示这个字符。
&&& 同理,让字符前后移动也是这样,例如让字符在第一个位置显示,延时一段时间后让其在后面第二个位置显示,只要显示地址加1,然后显示即可。字符串也是同样的道理。
&&& 在这里补充一点就是如何让字符串从1602第16个地址外进入,动态向前移动。其实可以通过显示地址表我们知道起始位置开始后1602一行只能显示16个字符,但是一行的地址却远远不止16个。大家可以看到第一行显示地址是从00~27,然而能显示在1602可见范围的只有00~0F,后面的位置其实就是起到一个缓冲的作用,你完全可以让字符数据存在在10地址后的RAM中,只不过,我们无法看到就是了,如果存在10前的地址我们就能看到显示。
&&& 因此,我们可以先把显示起始地址设在10地址后的某一个位置,然后让字符显示地址每次加1,当加到0F时,我们就可以看到字符串第一个字符出现在1602的最末一位,然后继续向前移动。
下面给出一段字符串移动显示的例子:
&void display_lcd_byte(uchar y,uchar x,uchar z)
&&&&x+=0x40;
&&&x+=0x80;
&&&write(x,0);
&&&write(z,1);
void display_lcd_text(uchar y,uchar x,uchar table[])
&uchar z=0;
&t=strlen(table)+x;
&while(x&t)
&&&display_lcd_byte(y,x,table[z]);
&display_lcd_byte(y,x,' ');&
//前两个子程序是显示子程序
void main()
&LCD1602();
&for(i=16;i&=0;i--)&& //这里的循环就是为了字符串从后往前显示
&&display_lcd_text(0,i,table0);&& //i减一次,首个字符就往前去一位
&&delay(200);
&while(1);
二、显示自定义字符:
要想显示自定义字符,首先就得取得想要的图形或者字符的字模数组,可以通过手动提取的方法,取得相应的字模。
如下图所示,对应一个字符显示区域。每8个字节,组成一个点阵数组。
要想让某一格子显示就让那一位为1,每行自定义5位,全白为0x00;全黑为0x1f。一共8行,每行一位数据。
将生成的点阵数组保存到CGRAM存储器中,生成自定义字符。1602内部CGRAM用于自定义的字符点阵的存储,总共64字节。由上一步点阵提取可知,每一个字符由8个字节数据组成。所以64字节CGRAM存储器,能够存储8组自定义字符的点阵数组。按照CGRAM地址划分为 0~7为第一组,8~15为第二组,依次类推56~63为第8组数据。
CHARACTER CODE是数据的显示地址,0-7的范围,能存储8位自定义的字符。(能存八个自定义,每个字符存放的)
CGRAM ADDRESS是存储数据的地址,从0-63共64个字节.存储64个数据。我们写入的数据是0x40~0x7F,共128位。(把字符数组内的8个数送进这8个地址,每存完一个字符的8位,下次地址直接转到0x48)
CGRAM DATA 字模每一行5位数据存
内部常用字符显示时,显示编码是从0x20开始的。0x00~0x0F是专门留给自定义字符显示的。0x00~0x07和0x08~0x0F内容是一样的。例如:调用0x01 位置和0x09位置,显示的内容是一样的。
LCD1602自定义显示字符的方式共四步,如下面所示:
1.设置向CGRAM中存入这个数据.初始地址是0x40。然后存一位向后加8,
总共能存8位自定义的字符。
2.然后可以把自定义的数据送入到LCD的CGRAM中。
3.向LCD写指令,送入需要显示数据的地址。
4.向LCD写指令,把显示的数据指向LCD的CGRAM存储的位置,显示出自定义字符。
举例如下:
1.建立一个字符数组;
uchar LCD_Data1[]={0x01,0x03,0x1D,0x11,0x1D,0x03,0x01,0x00};
2.设置CGRAM地址,写指令;
Write_LCD(0x40,0);
3.把数据送入CGRAM地址内;
for(i = 0; i & 8 ; i ++ )
Write_LCD(LCD_Data1[i],1);
4.写需要显示的位置指令;
Write_LCD(0x80,0);
5.把CGRAM的0位的数据送向LCD1602,显示数据存储的数据;
Write_LCD(0x00,1);&&
TA的最新馆藏[转]&
喜欢该文的人也喜欢郭天祥msp430驱动1602液晶程序中LcdWriteData(0x20);是什么意思?括号内为什么是0x20? - MSP430技术论坛 -
中国电子技术论坛 -
最好最受欢迎电子论坛!
后使用快捷导航没有帐号?
郭天祥msp430驱动1602液晶程序中LcdWriteData(0x20);是什么意思?括号内为什么是0x20?
22:16:46  
#include&&&msp430.h&
#include&&&BoardConfig.h&
#include&&&Cry1602.h&
uchar *s1 = &welcome!@&;
void main( void )
& & WDTCTL = WDT_ADLY_1000;& && && && && &//间隔定时器,定时16ms
& & BoardConfig(0xb8);& && && && && && & //关闭数码管、流水灯和电平转换
& & LcdReset();
& & DispStr(3,0,s1);
& & //LocateXY(0,9);& && && && && && && & //确定写入字符的显示位置
& & LcdWriteCommand(0x07, 1);& && && &&&//整体显示左移
& & for(i = 12; i & 0; i--)
& && &&&LcdWriteData(0x20);& && && &//为什么是0x20?这句话是什么意思?
& && &&&//延时250ms
& && &&&IFG1 &= ~WDTIFG;
& && &&&while(!(IFG1 & WDTIFG));
& && &&&IFG1 &= ~WDTIFG;
& & while(1)
& && &&&LcdWriteCommand(0x05, 1);& && && &&&//整体显示右移
& && &&&for(i = 25; i & 0; i--)&&
& && && && &LcdWriteData(0x20);& && &//为什么是0x20?这句话是什么意思?
& && && && &//延时250ms
& && && && &IFG1 &= ~WDTIFG;
& && && && &while(!(IFG1 & WDTIFG));
& && && && &IFG1 &= ~WDTIFG;
& && &&&LcdWriteCommand(0x07, 1);& && && &&&//整体显示左移
& && &&&for(i = 25; i & 0; i--)
& && && && &LcdWriteData(0x20);//为什么是0x20?这句话是什么意思?
& && && && &//延时250ms
& && && && &IFG1 &= ~WDTIFG;
& && && && &while(!(IFG1 & WDTIFG));
& && && && &IFG1 &= ~WDTIFG;
已退回2积分
08:55:50  
楼主感觉是叫你先空一格的意思0x20在ascall码中代表空格。本人菜鸟学51遇到像似的问题
20:08:37  
功能:&1& 清除液晶显示器,即将DDRAM的内容全部填入&空白&的ASCII码20H;
空白符-0x20
Powered by
供应链服务
版权所有 (C) 深圳华强聚丰电子科技有限公司

我要回帖

更多关于 lcd1602显示程序 的文章

 

随机推荐