还剩13页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
1602字符液晶目录简介http://baike.baidu.com/view/
1871999.htm\l1#1管脚功能http://baike.baidu.com/view/
1871999.htm\l2#2字符集http://baike.baidu.com/view/
1871999.htm\l3#3显示地址http://baike.baidu.com/view/
1871999.htm\l4#4指令集http://baike.baidu.com/view/
1871999.htm\l5#5 http://baike.baidu.com/i__ge/7e7f7909049bacd63ac76365\o查看__\t_blankHYPERLINKhttp://baike.baidu.com/image/7e7f7909049bacd63ac76365\t_blankINCLUDEPICTUREhttp://imgsrc.baidu.com/baike/abpic/item/7e7f7909049bacd63ac
76365.jpg\*MERGEFORMAT 编辑本段http://baike.baidu.com/view/
1871999.htm简介 工业字符型液晶,能够同时显示16x02即32个字符(16列2行) 注为了表示的方便,后文皆以1表示高电平,0表示低电平编辑本段http://baike.baidu.com/view/
1871999.htm管脚功能 http://baike.baidu.com/i__ge/a005b33416dab__dd0a2d3a7\o查看__\t_blankHYPERLINKhttp://baike.baidu.com/image/a005b33416dab89dd0a2d3a7\t_blankINCLUDEPICTUREhttp://imgsrc.baidu.com/baike/abpic/item/a005b33416dab89dd0a2d3a
7.jpg\*MERGEFORMAT引脚说明1602字符型LCD通常有14条引脚线或16条引脚线的LCD,多出来的2条线是背光电源线 VCC15脚和地线GND16脚,其控制原理与14脚的LCD完全一样,其中 引脚符号功能说明1VSS一般接地2VDD接电源(+5V)3V0液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高(对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度)4RSRS为寄存器选择,高电平1时选择数据寄存器、低电平0时选择指令寄存器5R/WR/W为读写__线,高电平1时进行读操作,低电平0时进行写操作6EE或EN端为使能enable端,下降沿使能7DB0底4位三态、双向数据总线0位(最低位)8DB1底4位三态、双向数据总线1位9DB2底4位三态、双向数据总线2位10DB3底4位三态、双向数据总线3位11DB4高4位三态、双向数据总线4位12DB5高4位三态、双向数据总线5位13DB6高4位三态、双向数据总线6位14DB7高4位三态、双向数据总线7位(最高位)(也是busyflag)15BLA背光电源正极16BLK背光电源负极 寄存器选择控制表 RSR/W操作说明00写入指令寄存器(清除屏等)01读busyflag(DB7),以及读取位址计数器(DB0~DB6)值10写入数据寄存器(显示各字型等)11从数据寄存器读取数据 注关于E=H脉冲——开始时初始化E为0,然后置E为1,再清
0. busyflag(DB7)在此位为被清除为0时,LCD将无法再处理其他的指令要求编辑本段http://baike.baidu.com/view/
1871999.htm字符集 1602液晶模块内部的字符发生存储器(CGROM已经存储了160个不同的点阵http://baike.baidu.com/view/
545607.htm\t_blank字符图形,这些字符有___数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码,比如大写的英文字母“A”的代码是0_____01B(41H),显示时模块把地址41H中的点阵字符图形显示出来,我们就能看到字母“A” 因为1602识别的是ASCII码,试验可以用ASCII码直接赋值,在单片机编程中还可以用字符型常量或变量赋值,如A’ 以下是1602的16进制ASCII码表 http://baike.baidu.com/i__ge/ae10eddec72a867e95ee3774\o查看__\t_blankHYPERLINKhttp://baike.baidu.com/image/ae10eddec72a867e95ee3774\t_blankINCLUDEPICTUREhttp://imgsrc.baidu.com/baike/abpic/item/ae10eddec72a867e95ee
3774.jpg\*MERGEFORMAT (__打开是大图) 读的时候,先读上面那列,再读左边那行,如感叹号!的ASCII为0x21,字母B的ASCII为0x42(前面加0x表示十六进制)编辑本段http://baike.baidu.com/view/
1871999.htm显示地址 1234567891011121314151600H01H02H03H04H05H06H07H08H09H0AH0BH0CH0DH0EH0FH40H41H42H43H44H45H46H47H48H49H4AH4BH4CH4DH4EH4FH编辑本段http://baike.baidu.com/view/
1871999.htm指令集 1602通过D0~D7的8位数据端传输数据和指令 显示模式设置初始化 00111000[0x38]设置16×2显示,5×7点阵,8位数据接口; 显示开关及光标设置初始化 00001DCBD显示1有效、C光标显示1有效、B光标闪烁1有效 000001NSN=1读或写一个字符后地址指针加1光标加1, N=0读或写一个字符后地址指针减1光标减1, S=1且N=1当写一个字符后,整屏显示左移 s=0当写一个字符后,整屏显示不__ 数据指针设置 数据首地址为80H,所以数据地址为80H+地址码0-27H,40-67H 其他设置 01H显示清屏,数据指针=0,所有显示=0;02H显示回车,数据指针=0 通常推荐的初始化过程 延时15ms 写指令38H 延时5ms 写指令38H 延时5ms 写指令38H 延时5ms (以上都不检测忙__) (以下都要检测忙__) 写指令38H 写指令08H关闭显示 写指令01H显示清屏 写指令06H光标__设置 写指令0cH显示开及光标设置 完毕 Proteus仿真 使用Proteus仿真1602--即LM016L--依照数据手册说明可能遇到困难,可以尝试采用以__案解决
1、数据手册中可能介绍1602内部D0~D7已有上拉,可以使用P0口直接驱动在Proteus里LM016L内部可能没有应该人为 加上拉电阻建议不要使用排阻,使用普通电阻一个一个拉应该可以解决问题;
2、可能碰到不能检测忙__的问题,尝试使用延时把忙__拖过去 参考资料http://hi.baidu.com/lpxyhncn/blog/item/a15b2bc353622b130ff
47731.html1602液晶的引脚定义2009年06月10日星期三14:191602液晶的引脚定义来自网络http://hi.baidu.com/txz01/blog/index/1http://hi.baidu.com/txz01/blog/index/1LCD1602已很普遍了,具体介绍我就不多说了,市面上字符液晶绝大多数是基于HD44780液晶芯片的,控制原理是完全相同的,因此HD44780写的控制程序可以很方便地应用于市面上大部分的字符型液晶字符型LCD通常有14条引脚线或16条引脚线的LCD,多出来的2条线是背光电源线VCC15脚和地线GND16脚,其控制原理与14脚的LCD完全一样,定义如下表所示 字符型LCD的引脚定义HD44780内置了DDRAM、CGROM和CGRAMDDRAM就是显示数据RAM,用来寄存待显示的字符代码共80个字节,其地址和屏幕的对应关系如下表也就是说想要在LCD1602屏幕的第一行第一列显示一个A字就要向DDRAM的00H地址写入“A”字的代码就行了但具体的写入是要按LCD模块的指令格式来进行的,后面我会说到的那么一行可有40个地址呀?是的,在1602中我们就用前16个就行了第二行也一样用前16个地址对应如下 DDRAM地址与显示位置的对应关系我们知道文本文件中每一个字符都是用一个字节的代码记录的一个汉字是用两个字节的代码记录在PC上我们只要打开文本文件就能在屏幕上看到对应的字符是因为在操作系统里和BIOS里都固化有字符字模什么是字模?就代表了是在点阵屏幕上点亮和熄灭的信息数据例如“A”字的字模 01110 ○■■■○ 10001 ■○○○■ 10001 ■○○○■ 10001 ■○○○■ 11111 ■■■■■ 10001 ■○○○■ 10001 ■○○○■上图左边的数据就是字模数据,右边就是将左边数据用“○”代表0,用“■”代表1看出是个“A”字了吗?在文本文件中“A”字的代码是41H,PC收到41H的代码后就去字模文件中将代表A字的这一组数据送到显卡去点亮屏幕上相应的点,你就看到“A”这个字了刚才我说了想要在LCD1602屏幕的第一行第一列显示一个A字就要向DDRAM的00H地址写入“A”字的代码41H就行了,可41H这一个字节的代码如何才能让LCD模块在屏幕的阵点上显示“A”字呢?同样,在LCD模块上也固化了字模存储器,这就是CGROM和CGRAMHD44780内置了192个常用字符的字模,存于字符产生器CGROMCharacterGeneratorROM中,另外还有8个允许用户自定义的字符产生RAM,称为CGRAMCharacterGeneratorRAM下图说明了CGROM和CGRAM与字符的对应关系从上图可以看出,“A”字的对应上面高位代码为0100,对应左边低位代码为0001,合起来就是0_____01,也就是41H可见它的代码与我们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条指令
1.清屏指令功能1清除液晶显示器,即将DDRAM的内容全部填入空白的ASCII码20H; 2光标归位,即将光标撤回液晶显示屏的左上方; 3将地址计数器AC的值设为
02.光标归位指令功能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值减1 0 1 光标右移1格,且AC值加1 1 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地址指令功能设定下一个要存入数据的CGRAM的地址
9.读取忙__或AC地址指令功能1读取忙碌__BF的内容,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=数据 输出无看了那么多是不是有些晕?我也是啊,不过慢慢理解还是没问题的实际上面说了那么多具体怎么操作我还是没会啊?好!咱就简单点举个实例,就在LCD1602屏幕上第一行第一列显示个“A”字
1.先初始化(老大!好像上面没初始化这条指令啊!) 先别拿东西扔我,说明书上是这么说的也就先写入些指令//先定义接口#includeAT__x
51.h/***************************************** P1------DB0~DB7 P
2.0------RS P
2.1------RW P
2.2------E*****************************************/#defineLCD_DB P1 __it LCD_RS=P2^0; __it LCD_RW=P2^1; __it LCD_E=P2^2;/******定义函数****************/#defineucharunsignedchar#defineuintunsignedintvoidLCD_initvoid;//初始化函数voidLCD_write_com__nducharcom__nd;//写指令函数voidLCD_write_datauchardat;//写数据函数voidLCD_disp_charucharxucharyuchardat;//在某个屏幕位置上显示一个字符X(0-16y1-2//voidLCD_check_busyvoid;//检查忙函数我没用到此函数,因为通过率极低voiddelay_n40usuintn;//延时函数//********************************//*******初始化函数***************voidLCD_initvoid{LCD_write_com__nd0x38;//设置8位格式,2行,5x7LCD_write_com__nd0x0c;//整体显示,关光标,不闪烁LCD_write_com__nd0x06;//设定输入方式,增量不移位LCD_write_com__nd0x01;//清除屏幕显示delay_n40us100;//实践证明,我的LCD1602上,用for循环200次就能可靠完成清屏指令}//********************************//********写指令函数************voidLCD_write_com__nduchardat{LCD_DB=dat;LCD_RS=0;//指令LCD_RW=0;//写入LCD_E=1;//允许LCD_E=0;delay_n40us1;//实践证明,我的LCD1602上,用for循环1次就能完成普通写指令}//*******************************//********写数据函数*************voidLCD_write_datauchardat{LCD_DB=dat;LCD_RS=1;//数据LCD_RW=0;//写入LCD_E=1;//允许LCD_E=0;delay_n40us1;}//********************************//*******显示一个字符函数*********voidLCD_disp_charucharxucharyuchardat{ucharaddress;ify==1 address=0x80+x;else address=0xc0+x;LCD_write_com__ndaddress;LCD_write_datadat;}//********************************/*******检查忙函数*************voidLCD_check_busy //实践证明,在我的LCD1602上,检查忙指令通过率极低,以{ //至于不能正常使用LCD因此___再用检查忙函数而使do //用了延时的方法,延时还是非常好用的我试了一下,用 {LCD_E=0; //for循环作延时,普通指令只要1次循就可完成清屏指令 LCD_RS=0; //要用200次循环便能完成 LCD_RW=1; LCD_DB=0xff; LCD_E=1; }whileLCD_DB^7==1;}******************************///********延时函数***************voiddelay_n40usuintn{uinti; ucharj; fori=n;i0;i-- forj=0;j2;j++; //在这个延时循环函数中我只做了2次循环,} //实践证明我的LCD1602上普通的指令只需1次循环就能可靠完成//*******************************//*********主函数*****************void__invoid{ LCD_init; LCD_disp_char01A; while1;}//*******************************词条图册更多图册http://baike.baidu.com/albums/1871999/
1871999.html\t_blankj__ascript:void0;j__ascript:void0;。