想了解lcd1602的,本文通过程序来帮助理解lcd1602的寄存器配置等,简单易懂2010-5-13PM14:19:46ball*理HD44780内置了 DDRAM、CGR0M和 CGRAM。这里的RAM与R0M不懂得话,可以看看我整理的另一篇http://hi.baidu.com/bal648500361blog/item4332fdf8bf505f02b48f3150,ht mlDDRAM就是显示数据RAM,用来寄存待显示的字符代码。共80个字节,其地址和屏幕的对应关系如下表显示位置123464Dr第一行|6HH|2n"|6sH4H|眄|6H|…|27H地址第二行|44142143H445H46167H也就是说想要在LCD1502屏幕的第一行第一列显示一个"A"字,就要向 DDRAM的0地址写入“A”宇的代码就行了。但具体的写入是要按LC模埉的指令格们就用前16个就行了。第二行也一样用前16个地址。对应如在1602中我式来进行的,后面我会说到的。那么一行可有40个地址呀?是的DDRAM地址与显示位置的对应关系55H 1H 52H 53H 5H 55H 56H 57H 58H 59H SAH 5BH SCH ODH SEH 5FH:45H 41H 2H 443H 44+H 55H 46H 47H 48H 49H 4AH bH CH LdH eh 4l我们知道文本文件中每一个字符都是用一个字节的代码记录的。一个汉字是用两个字节的代码记录。在PC上我们只要打开文本文件就能在屏幕上看到对应的字符是因为在操作系统里和B10S里都固化有字符字模。什么是字模?就代表了是在点阵屏幕上点亮和熄灭的信息数据。例如“A”字的字模:01110○口■■1000110001■■■■口PDF文件使用" pdfFactory Pro"试用版本创建第3页ww∴ fineprint,cn2010-5-13PM14:19:47ball*理10001■○○10001上图左边的数据就是字模数据,右边就是将左边数据用“○”代表0,用■”代表1。看出是个“A”字了吗?在文本文件中“A”字的代码是41H,PC收到41H的代码后就去字模文件中将代表A字的这一组数据送到显卡去点亮屏幕上相应的点,你就看到“A”这个字了刚才我说了想要在LCD1602屏幕的笫一行笫一列显示一个"A"字,就要向DDRAM的00H地址写入“A”字的代码41H就行了,可41H这一个字节的代码如何才能让LCD模块在屏幕的阵点上显示“A”字呢?同样,在LCD模块上也固化了字模存储器,这就是CGR0N和 CGRAM。HD44780内置了192个常用字符的字模,存于字符产生器CGR0M( Character gener a t0rR0N)中,另外还有8个允许用户自定义的字符产生RAM,称为 CGRAM( Character generat or ram)。下图说明了CGR0M和 CGRAM与字符的对应关系。cGRM中宇符码与字字符宇模关系对照表00|0010o00|0o|10101111|10016|ooo1no1111x00000eaRL列Px00×0001(2)∏向aP子2当x0×0010(3)山2BRbr亻Wxx0×0011(4)# iSCsix000100(5)李4DTdt、壬卜tHkxxx0101(6)5E凵ex00110(7)6FF刁加P2xxx0111()27Gg*2x01000(1)8HKh4本J突x0o1001e[>+TJIL-Inl日JZJz工nLx00×01011(4)t9 kix0×1100(5)N→n÷彐→x0xX1111(8)1?0-a台-5口wentao. programran.coImb⊥ag.11 wentao,netPDF文件使用" olFactory P试用版本樹建页,第e,cn2010-5-13PM14:19:47ball*理从上图可以看出,“A”字的对应上面高位代码为0100,对应左边低位代码为0001,合起来就是010001,也就是41H。可见它的代码与我们PC中的字符代码是基本一致的因此我们在向DRAM写C51字符代码程序时甚至可以直接用P1='A'这样的方法。PC在编译时就把“A”先转为41H代码了字符代码0X00-0×0F为用户自定义的字符图形RAM(对于5X8点阵的字符存放8组,5X10点阵的字符,存放4组),就是 CGRAM了。后面我会详细说0×20-0X7F为标准的ASC1码,0XA0~0xFF为日文字符和希腊文字符,其佘字符码(0x10~0X1F及0x80~0x9日没有定义那么如何对 DDRAM的内容和地址进行具体操作呢。下面先说说HD44780的指令集及其设置说明,请浏览该指令集,并找出对DRAM的内容和地址进行操作的指共11条指令1.清屏指令指令编码执行指令功能RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0/ms清屏060.。011.64功能:<1〉清除液晶显示器,即将 DDRAM的内容全部填入"空白"的ASC!I码20H<2>光标归位,即将光标撤回液晶显示屏的左上方<3>将地址计数器(AC)的值设为02.光标归位指令指令编码执指令令功能RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DBS/ms光标归位80·X1.64功能:<1>把光标撤回到显示器的左上方;<2>把地址计数器(AC)的值设置为0;<3〉保持DRAM的内容不变PDF文件使用" pdfFactory Pro"试用版本创建.5页ww「" imprint,cn2010-5-13PM14:19:47ball*理3.进入模式设置指令指令编码执行指令功能RS R/W DB7 DB6 DB5 DB4 I DB3 DB2 DB1 DB0/us进入模式设置0I/D功能:设定毎次定入1位数据后光标的移位方向,并且设定每次写入的一个字符是否移动。参数设定的情况如下所示:位名设置/D0=写入新数据后光标左移1=写入新数据后光标右移0=写入新数据后显示屏不移动1=写入新数据后显示屏整体右移1个字符4.显示开关控制指令指令编码执指令功力能时RS R/W DB6 DB5 DB4 DB3 DB2 DB1 DB0 /us显示开关控制|00DCB功能:控制显示器开关、光标显示关闭以及光标是否闪烁。参数设定的情沉如下位名设置0=显示功能关1=显示功能开0=无光标1=有光标0=光标闪烁1=光标不闪烁5,设定显示屏或光标移动方向指令指令编码执行指令功能RS i R/W i DB7 DB6 i DB5 i DB4 i DB3 DB2i DB1 i DBoi/Us设定显示屏或00S/C R/L X光标移动方向PDF文件使用" olFactory P试用版本樹建页,第e,cn2010-5-13PM14:19:47bal1*理功能:使光标移位或使整个显示屏幕移位。参数设定的情况如下:R/L设定情况光标左移1格,且AC值减1光标右移1格,且AC值加1显示器上字符全部左移一格,但光标不动显示器上字符全部右移一格,但光标不动6.功能设定指令指令编码执指令功能RS i R/W i DB7 i DB6 i DBs i DB4 i DB3 i DB2 i DB1iDB0i/us功能设定NFXψB功能:设定数据总线位数、显示的行数及字型。参数设定的情况如下:位名设置0=数据总线为4位1=数据总线为8位0=显示1行1=显示2行0=5×7点阵/每字符1=5×10点阵/每字符7,设定 CGRAM地址指令指令编码指令功能RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1DB0设定cGRCGRAM的地址(6位)地址功能:设定下一个要存入数据的 CGRAM的地址DB5DB4DB3为字符号,也就是你将来要显示该字符时要用到的字符地址。(000~111)(能定义八个字符)DB2DB1DB0为行号。(000~111)(八行)8,设定 DDRAM地址指令PDF文件使用" pdfFactory Pro"试用版本创建第7页ww∴ fineprint,cn2010-5-13PM14:19:48ball*理指令编码指令功能RS R/W I DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0/us设定 DDRAMGRAN的地址(7位)地址功能:设定下一个要存入数据的DRAM的地址9.读取忙信号或AC地址指令指令编码执指令功能RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0/us读取忙碌信号日A内容(7位或RC地址功能:<1〉读取忙碌信号旰F的内容,BF=1表示液晶显示器忙,暂时无法接收单片机送来的数据或指令;当BF=时,液品显示器可以接收单片机送来的数据或指令2>读取地址计数器(AC)的内容。10.数据写入 DDRAM或 CGRAM指令一览指令编码指令功能RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0/us数据写入到DDRAM或要写入的数据D7~D8CGRAM功能:<1>将字符码写入DRAM,以使液晶显示屏显示出相对应的字符;<2>将使用者自己设计的图形存入 CGRAM。DB7DB5DB5可为任何数据,一般取“000DB4DB3DB2DB1DB0对应于毎行5点的字模数据11.从 CGRAM或 DDRAM读出数据的指令一览PDF文件使用" pdfFactory Pro"试用版本创建.8页ww.fineprint.cn2010-5-13PM14:19:48ball整理指令编码执行指令功能RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0/us从CGR或DDRAM读卖出要读出的数据D7~D04日数据功能:读取 DDRAM或 CGRAM中的内容。基本操作时序读状态输入:RS=L,RW=H,E=H输出:DB0-DB7=状态字写指令输入:RS=,RW,E=下降沿脉冲,DB0~DB7=指令码输出:无读数据输入:RS=H,RW=H,E=H输出:DB0~DB7=数据写数据输入:RS=H,RW=,E下降沿脉冲,DB0B7=数据输出:无2.显示字符看了那么多是不是有些晕?我也是啊、不过慢慢理解还是没问题的。实际上面说了那么多具体怎么操作我还是没会啊?好!咱就简单点举个实例,就在LCD1602屏幕上第一行第一列显示个“A”字。1.先初始化。(老大!好像上面没初始化这条指令啊!)先別拿东西扔我,说明书上是这么说的。也就先写入些指令。先定义接口t include