LCD1602⾼⼿使⽤详解
前⾯总算⾛完了对AVR MEGA16这块单⽚机的⼀些基本的应⽤⽅式了,这时候⼤家对AVR的⼀些内部资源⽐如定时
器,ADC,最主要的IO⼝的使⽤⽅式应该有了⼀个虽⽐较粗浅但是却⽐较形象的认识了。这节我们来看使⽤单⽚机的另外⼀⼤主题,就是⽤单⽚机来实现芯⽚控制。
在前⾯的数码管显⽰⼀⽂中,就已经涉及到了⽤单⽚机来控制芯⽚为我们⼯作,CEPARK AVR开发板,为了达到增强驱动能⼒和节省IO⼝的作⽤,运⽤了移位寄存器74HC595来驱动两个四位⼋段数码管,是⼀个⼗分有创意的设计。但是前⾯的内容重⼼还是集中于对AVR的IO⼝的控制,所以,我们从这节开始要正式逐渐深⼊的接触各种芯⽚了。
先做个引⼦。单⽚机是⼀种微控制器,本⾝内部集成了数种资源⽐如CPU、内存、内部和外部总线系统,⽬前⼤部分还会具有外存。他的主要任务是利⽤各种资源实现电平控制,可以以此控制与它相连的下级系统,⼴泛⽤于⼯业⾃动控制领域。我们就从这句话出发,⾸先单⽚机⽤来做控制⽤的,⽽且是利⽤的是本⾝的内部资源。但是,它的功能再强⼤,资源再丰富也总有⼀个上限,总有枯竭的⼀天。所以我们常常利⽤单⽚机外接芯⽚来弥补或者增强单⽚机的功能来完成我们所需功能的电路。⽐如程序存储器不⾜,可以外接外部存储器,⽐如单⽚机内部中断级不⾜,可以外接中断控制器等等。⼤家可以从这个⾓度来理解芯⽚控制的意义罢。
今天我们⽤AVR单⽚机来实现对LCD1602液晶显⽰芯⽚的控制。
⾸先从这个名字讲起,LCD:英⽂全称为Liquid Crystal Display,即为液态晶体显⽰,也就是我们常说的液晶显⽰了。(平时⽼说LCDLCD,可能⼤家也都不怎么注意过这个全称吧,呵呵,当增加词汇量了)1602则是表⽰这个液晶⼀共能显⽰2⾏数据,每⼀⾏显⽰16个字符。这个就是LCD1602的全部来由。
液晶显⽰的使⽤有多⼴泛我就不多说了,LCD1602好像10元左右就可以拿到了的,不算贵。我们来看看现在市⾯都有哪些样⼦的1602,下⾯从⽹上搜罗了⼏个(我⼿上的这个是蓝⾊背光⽩⾊字体的):
其实显⽽易,见也就是背光和字体的颜⾊不⼀样罢,不过⽼实说,蓝⾊背光的1602看上去显得确实⽐较亮,也许是⼈眼视觉的关系。
接下来进⼊LCD1602使⽤的重点:操作时序。操作时序永远使⽤是任何⼀⽚IC芯⽚的最主要的内容。⼀个芯⽚的所有使⽤细节都会在它的官⽅器件⼿册上包含。所以使⽤⼀个器件事情,要充分做好的第⼀件事就是要把它的器件⼿册上有⽤的内容提取,掌握。介于中国⽬前的芯⽚设计能⼒有限,所以⼤部分的器件都是外国⼏个IC巨头⽐如TI、AT、MAXIM 这些公司⽣产的,器件资料⾃然也是英⽂的多,所以,英⽂的基础要在阅读这些数据⼿册时得到提⾼哦。即便有中⽂翻译版本,还是建议看英⽂原版,看不懂时不妨再参考中⽂版,这样⽐较利于提⾼。
我们⾸先来看1602的引脚定义,1602的引脚是很整齐的SIP单列直插封装,所以器件⼿册只给出了引脚的功能数据表:
我们只需要关注以下⼏个管脚:
3脚:VL,液晶显⽰偏压信号,⽤于调整LCD1602的显⽰对⽐度,⼀般会外接电位器⽤以调整偏压信号,注意此脚电压为0时可以得到最强的对⽐度。
4脚:RS,数据/命令选择端,当此脚为⾼电平时,可以对1602进⾏数据字节的传输操作,⽽为电平时,则是进⾏命令字节的传输操作。命令字节,即是⽤来对LCD1602的⼀些⼯作⽅式作设置的字节;数据字节,即使⽤以在1602上显⽰的字节。值得⼀提的是,LCD1602的数据是8位的。
5脚:R/W,读写选择端。当此脚为⾼电平可对LCD1602进⾏读数据操作,反之进⾏写数据操作。笔者认为,此脚其实⽤处不⼤,直接接地永久置为低电平也不会影响其正常⼯作。但是尚未经过复杂系统验证,保留此意见。
6脚:E,使能信号,其实是LCD1602的数据控制时钟信号,利⽤该信号的上升沿实现对LCD1602的数据传输。7~14脚:8位并⾏数据⼝,使得对LCD1602的数据读写⼤为⽅便。现在来看LCD1602的操作时序:
在此,我们可以先不读出它的数据的状态或者数据本⾝。所以只需要看两个写时序:
①当我们要写指令字,设置LCD1602的⼯作⽅式时:需要把RS置为低电平,RW置为低电平,然后将数据送到数据⼝D0~D7,最后E引脚⼀个⾼脉冲将数据写⼊。
②当我们要写⼊数据字,在1602上实现显⽰时:需要把RS置为⾼电平,RW置为低电平,然后将数据送到数据⼝D0~D7,最后E引脚⼀个⾼脉冲将数据写⼊。
发现了么,写指令和写数据,差别仅仅在于RS的电平不⼀样⽽已。以下是LCD1602的时序图:
⼤家要慢慢学会看时序图,要知道操作⼀个器件的精华便蕴藏在其中,看懂看准了时序,你操控这个芯⽚就是⾮常容易的事了。1602的时序是我见过的⼀个最简单的时序:
1、注意时间轴,如果没有标明(其实⼤部分也都是不标明的),那么从左往右的⽅向为时间正向轴,即时间在增长。2、上图框出并注明了看懂此图的⼀些常识:
(1).时序图最左边⼀般是某⼀根引脚的标识,表⽰此⾏图线体现该引脚的变化,上图分别标明了RS、R/W、E、DB0~DB7四类引脚的时序变化。
(2).有线交叉状的部分,表⽰电平在变化,如上所标注。
(3).应该⽐较容易理解,如上图右上⾓所⽰,两条平⾏线分别对应⾼低电平,也正好吻合(2)中电平变化的说法。(4).上图下,密封的菱形部分,注意要密封,表⽰数据有效,Valid Data这个词也显⽰了这点。
3、需要⼗分严重注意的是,时序图⾥各个引脚的电平变化,基于的时间轴是⼀致的。⼀定要严格按照时间轴的增长⽅向来精确地观察时序图。要让器件严格的遵守时序图的变化。在类似于18B20这样的单总线器件对此要求尤为严格。
4、以上⼏点,并不是LCD1602的时序图所特有的,绝⼤部分的时序图都遵循着这样的⼀般规则,所以⼤家要慢慢的习惯于这样的规则。
也许你还注意到了上⾯有许多关于时间的标注,这也是个⼗分重要的信息,这些时间的标注表明了某些状态所要维持的最短或最长时间。因为器件的⼯作速度也是有限的,⼀般都跟不上主控芯⽚的速度,所以它们直接之间要有时序配合。话说现在各种处理器的主频也是疯狂增长,⽇后搞不好出现个双核单⽚机也不⼀定就是梦话。下⾯是时序参数表:
⼤家要懂得估计主控芯⽚的指令时间,可以在官⽅数据⼿册上查到MCU的⼀些级别参数。⽐如我们现在⽤AVR M16做为主控芯⽚,外部12MHz晶振,指令周期就是⼀个时钟周期为(1/12MHz)us,所以⾄少确定了它执⾏⼀条指令的时间是us级别的。我们看到,以上给的时间参数全部是ns级别的,所以即便我们在程序⾥不加延时程序,也应该可以很好的配合LCD1602的时序要求了。怎么看这个表呢?很简单,我们在时序图⾥可以找到TR1,对应时序参数表,可以查到这个是E上升沿/下降沿时间,最⼤值为25ns,表⽰E引脚上的电平变化,必须在最⼤为25ns之内的时间完成。⼤家看是不是这个意思?现在我来解读我对这个时序图的理解:
当要写命令字节的时候,时间由左往右,RS变为低电平,R/W变为低电平,注意看是RS的状态先变化完成。然后这
时,DB0~DB7上数据进⼊有效阶段,接着E引脚有⼀个整脉冲的跳变,接着要维持时间最⼩值为tpw=400ns的E脉冲宽度。然后E引脚负跳变,RS电平变化,R/W电平变化。这样便是⼀个完整的LCD1602写命令的时序。下⾯来看看CEPARK AVR开发板的1602显⽰部分原理图:
如你所见,KID画的这个也太能省了,就直接接1k电阻了事…….只有⼀点要说,就是这个解法,VL脚也就是偏压信号脚的电压就是不可调的了,即对⽐度固定。
下⾯附上源程序,⾥⾯做了详细注释,希望第⼀次接触时序图的朋友可以好好对照⼀下时序图来分析程序。请点击下载附件:作⼏点说明:
1、 LCD1602对写进去的数据字节呢是以ASCII码识别的,所以写进去⽤以显⽰的字符数据必须是某⼀个ADCII码,当然如果你不想查ASCII表的话,可以⽤字符来代替,即⽤单引号包含的字符常量。所以,也由此推出,’0’和30H(0的ASCII码)是等价的。
2、操作1602,要先对1602进⾏初始化,数据⼿册⾥写的⽐较清楚,并且对各个命令字的写⼊并没有先后要求。3、 1602是有⾃定义字符的功能的,⼤家熟悉基本操作之后可以尝试⾃⾏拓展
4、在每次写完数据之后,应该要将E引脚置为低电平,为下⼀次E的⾼脉冲做准备。延伸来说,这叫释放时钟线,要养成释放时钟线的好习惯。对配合时序⼤有裨益。
5、可以将所要显⽰的字符⼀次定义在⼀个字符数组⾥,以调⽤字符数组的形式调⽤显⽰数据,这样程序会变得简洁⽽⾼效。6、记住时序的要求,往往是对最⼩时间有要求,在你严格配合时序的情况下仍然的不到理想的结果时,可以尝试插⼊延时。这个并不违反时序的要求。况且相当多的器件⼿册并没有详细的讲述最⼩时间要求。最后附上运⾏照⽚,照的还是蛮清晰的~:
果然还是蓝⾊的看着舒服……希望能给有需要的⼈⼀点帮助。⼤家加油啊再来个官⽅介绍:1.简介
⼯业字符型液晶,能够同时显⽰16x02即32个字符。(16列2⾏)注:为了表⽰的⽅便,后⽂皆以1表⽰⾼电平,0表⽰第电平。2.管脚功能
1602采⽤标准的16脚接⼝,其中:第1脚:VSS为电源地第2脚:VDD接5V电源正极
第3脚:V0为液晶显⽰器对⽐度调整端,接正电源时对⽐度最弱,接地电源时对⽐度最⾼(对⽐度过⾼时会产⽣“⿁影”,使⽤时可以通过⼀个10K的电位器调整对⽐度)。
第4脚:RS为寄存器选择,⾼电平1时选择数据寄存器、低电平0时选择指令寄存器。第5脚:RW为读写信号线,⾼电平(1)时进⾏读操作,低电平(0)时进⾏写操作。第6脚:E(或EN)端为使能(enable)端。第7~14脚:D0~D7为8位双向数据端。
第15~16脚:空脚或背灯电源。15脚背光正极,16脚背光负极。3.操作控制操作控制表操作读状态写指令读数据写数据输⼊
RS=0,RW=1,E=1RS=0,RW=0,D0~7=指令码,E=H脉冲RS=1,RW=1,E=1
RS=1,RW=0,D0~7=数据,E=H脉冲
注:关于E=H脉冲——开始时初始化E为0,然后置E为1,再4.字符集
1602液晶模块内部的字符发⽣存储器(CGROM)已经存储了160个不同的点阵字符图形,这些字符有:阿拉伯数字、英⽂字母的⼤⼩写、常⽤的符号、和⽇⽂假名等,每⼀个字符都有⼀个固定的代码,⽐如⼤写的英⽂字母“A”的代码是01000001B(41H),显⽰时模块把地址41H中的点阵字符图形显⽰出来,我们就能看到字母“A”。
因为1602识别的是ASCII码,试验可以⽤ASCII码直接赋值,在单⽚机编程中还可以⽤字符型常量或变量赋值,如'A’。以下是1602的16进制ASCII码表地址:
读的时候,先读左边那列,再读上⾯那⾏,如:感叹号!的ASCII为0x21,字母B的ASCII为0x42(前⾯加0x表⽰⼗六进制)。
[编辑本段]指令集
1602通过D0~D7的8位数据端传输数据和指令。显⽰模式设置: (初始化)
0011 0000 [0x38] 设置16×2显⽰,5×7点阵,8位数据接⼝;显⽰开关及光标设置: (初始化)
0000 1DCB D显⽰(1有效)、C光标显⽰(1有效)、B光标闪烁(1有效)0000 01NS N=1(读或写⼀个字符后地址指针加1 &光标加1),N=0(读或写⼀个字符后地址指针减1 &光标减1),S=1 且 N=1 (当写⼀个字符后,整屏显⽰左移)s=0 当写⼀个字符后,整屏显⽰不移动数据指针设置:
数据⾸地址为80H,所以数据地址为80H+地址码(0-27H,40-67H)其他设置:
01H(显⽰清屏,数据指针=0,所有显⽰=0);02H(显⽰回车,数据指针=0)。
因篇幅问题不能全部显示,请点此查看更多更全内容