第1脚:VSS为地第2脚:VDD接5V正电源第3脚:V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,对比度过高时会产生"鬼影",使用时可以通过一个10K的电位器调整对比度PC0:第4脚:RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。
PC1:第5脚:RW为读写信号线,高电平时进行读操作,低电平时进行写操作。
当RS和RW共同为低电平时可以写入指令或者显示地址,当RS为低电平RW为高电平时可以读忙信号,当RS为高电平RW为低电平时可以写入数据。
PC2:第6脚:E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。
写命令:PC=0X04;数据PA=??;PC=0X00;PC=0X04;写数据:PC=0X05;数据PA=??;PC=0X01,PC=0X05;第7~14脚:D0~D7为8位双向数据线第15脚背光正极全新产蓝色背光1602 POWERTIP PC1602V ,工作电压5V时可视角度稍差,提高工作电压可以提高可视度液晶显示器以其微功耗、小体积、使用灵活等诸多优点在袖珍式仪表和低功耗应用系统中得到越来越广泛的应用。
液晶显示器通常可分为两大类,一类是点阵型,另一类是字符型。
点阵型液晶通常面积较大,可以显示图形;而一般的字符型液晶只有两行,面积小,只能显示字符和一些很简单的图形,简单易控制且成本低。
目前市面上的字符型液晶绝大多数是基于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 Generator ROM)中,另外还有几个允许用户自定义的字符产生RAM,称为CGRAM(Character Generator RAM)。
下图说明了CGROM和CGRAM与字符的对应关系(由于本书中未用到自定义特殊字符的功能,所以本节不对CGRAM作详细介绍。
以下如未特别说明,则"字符码"指CGROM的字符号,"地址"指DDRAM的地址)。
字符码0x00~0x0F为用户自定义的字符图形RAM(对于5X8点阵的字符,可以存放8组,5X10点阵的字符,存放4组),0x20~0x7F为标准的ASCII码,0xA0~0xFF为日文字符和希腊文字符,其余字符码(0x10~0x1F 及0x80~0x9F)没有定义。
除了CGROM和CGRAM外,LCD部还有一个DDRAM(Display Data RAM),用于存放待显示容,LCD控制器的指令系统规定,在送待显示字符代码的指令之前,先要送DDRAM的地址(即待显示的字符显示位置)。
16×2的字符型LCD的DDRAM地址与显示位置的对应关系如下:DDRAM地址与显示位置的对应关系╭┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈╮┊┊┊00H 01H 02H 03H 04H 05H 06H 07H 08H 09H 0AH 0BH 0CH 0DH 0EH 0FH ┊┊┊┊40H 41H 42H 43H 44H 45H 46H 47H 48H 49H 4AH 4BH 4CH 4DH 4EH 4FH ┊┊┊╰┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈╯如果读者到现在对DDRAM的用法还是很迷惘,希望下面这个简单的例子能帮助读者理解。
假设要在第1行第2列写入字符"A",这时先写入第1行第2列对应的DDRAM的地址:01H(参见上图),然后再往DDRAM中写入"A"的字符码0x41(参见字符与字符码对照表),这样LCD的第1行第2列就会出现字符A了。
也就是说,DDRAM的容对应于把要显示的字符地址,而DDRAM的地址就对应于显示字符的位置。
总而言之,希望在LCD 的某一特定位置显示某一特定字符,一般要遵循"先指定地址,后写入容"的原则;但如果希望在LCD上显示一串连续的字符(如单词等),并不需要每次写字符码之前都指定一次地址,这是因为液晶控制模块中有一个计数器叫地址计数器AC(Address Counter)。
地址计数器的作用是负责记录写入DDRAM数据的地址,或从DDRAM读出数据的地址。
该计数器的作用不仅仅是"写入"和"读出"地址,它还能根据用户的设定自动进行修改。
比如,如果规定地址计数器在"写入DDRAM容"这一操作完成后自动加1,那么在第1行第1列定写入一个字符后,如果不对字符显示位置(DDRAM地址)重新设置,再写入一个字符,则这个新的字符会出现在第1行第2列。
那么如何对DDRAM的容和地址进行操作呢,下面是HD44780的指令集及其设置说明,请浏览该指令集,并找出对DDRAM的容和地址进行操作的指令。
清屏指令┌──────┬─────────────────────────────┬───┐ㄧㄧ指令编码ㄧ执行ㄧㄧ指令功能├──┬──┬──┬──┬──┬──┬──┬──┬──┬──┤时间ㄧㄧㄧ RS ㄧR/W ㄧDB7 ㄧDB6 ㄧDB5 ㄧDB4 ㄧDB3 ㄧDB2 ㄧDB1 ㄧDB0 ㄧ /ms ㄧ├──────┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼───┤ㄧ清屏ㄧ 0 ㄧ 0 ㄧ 0 ㄧ 0 ㄧ 0 ㄧ 0 ㄧ 0 ㄧ 0 ㄧ 0 ㄧ 1 ㄧ 1.64 ㄧ└──────┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴───┘功能:<1> 清除液晶显示器,即将DDRAM的容全部填入"空白"的ASCII码20H;<2> 光标归位,即将光标撤回液晶显示屏的左上方;<3> 将地址计数器(AC)的值设为0。
光标归位指令┌──────┬─────────────────────────────┬───┐ㄧㄧ指令编码ㄧ执行ㄧㄧ指令功能├──┬──┬──┬──┬──┬──┬──┬──┬──┬──┤时间ㄧㄧㄧ RS ㄧR/W ㄧDB7 ㄧDB6 ㄧDB5 ㄧDB4 ㄧDB3 ㄧDB2 ㄧDB1 ㄧDB0 ㄧ /ms ㄧ├──────┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼───┤ㄧ光标归位ㄧ 0 ㄧ 0 ㄧ 0 ㄧ 0 ㄧ 0 ㄧ 0 ㄧ 0 ㄧ 0 ㄧ 1 ㄧ X ㄧ 1.64 ㄧ└──────┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴───┘功能:<1> 把光标撤回到显示器的左上方;<2> 把地址计数器(AC)的值设置为0;<3> 保持DDRAM的容不变。
进入模式设置指令┌──────┬─────────────────────────────┬───┐ㄧㄧ指令编码ㄧ执行ㄧㄧ指令功能├──┬──┬──┬──┬──┬──┬──┬──┬──┬──┤时间ㄧㄧㄧ RS ㄧR/WㄧDB7ㄧDB6 ㄧDB5ㄧDB4ㄧDB3ㄧDB2ㄧDB1ㄧDB0ㄧ /us ㄧ├──────┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼───┤ㄧ进入模式设置ㄧ 0 ㄧ 0 ㄧ 0 ㄧ 0 ㄧ 0 ㄧ 0 ㄧ 0 ㄧ 1 ㄧI/D ㄧ S ㄧ 40 ㄧ└──────┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴───┘功能:设定每次定入1位数据后光标的移位方向,并且设定每次写入的一个字符是否移动。
参数设定的情况如下所示:位名设置I/D 0=写入新数据后光标左移 1=写入新数据后光标右移S 0=写入新数据后显示屏不移动 1=写入新数据后显示屏整体右移1个字符显示开关控制指令┌──────┬─────────────────────────────┬───┐ㄧㄧ指令编码ㄧ执行ㄧㄧ指令功能├──┬──┬──┬──┬──┬──┬──┬──┬──┬──┤时间ㄧㄧㄧ RS ㄧR/W ㄧDB7 ㄧDB6 ㄧDB5 ㄧDB4 ㄧDB3 ㄧDB2 ㄧDB1 ㄧDB0 ㄧ /us ㄧ├──────┼──┼──┼──┼──┼──┼──┼──┼──┼──┼──┼───┤ㄧ显示开关控制ㄧ 0 ㄧ 0 ㄧ 0 ㄧ 0 ㄧ 0 ㄧ 0 ㄧ 1 ㄧ D ㄧ C ㄧ B ㄧ 40 ㄧ└──────┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴───┘功能:控制显示器开/关、光标显示/关闭以及光标是否闪烁。