[讨论] 第8/15原创:事无巨细,LCD 12864

losingamong   2010-3-17 11:45 楼主
事无巨细,LCD12864

       次写了1602的使用,这次来写写LCD12864。
       为绝大多数单片机学习板的液晶显示模块之一,LCD12864功能要比LCD1602要强悍许多。仅仅是1602的两行英文字母,数字和各种符号,严格来说勉强能显示几个中文,是无法满足我们的需求的。当需要显示一些稍微复杂的图形的时候,12864的用处就显现出来了。下面是两个正在工作的LCD12864:
1.gif 2.gif   
       1602一样,各种型号的LCD12864在价格,性能,效率上也都是大同小异。据我所知,市场上全新的12864价格在50到80不等,感觉有点贵。不过,如果你要买的话,最好了解清楚它是不是带字库的。什么是字库呢?就是在12864里的CGROM存储器里存放有可调用显示的绝大部分的中文和各种符号。这和我们调用GCC-AVR的各种头文件里的子函数有点类似:如果没有这个头文件,那么你只能自己去编写;同样如果12864没有字库,你也需要自己去编一个字库,只是方式上是通过图形取模软件来转换实现的。建议对自己实力不太自信的朋友购买带字库的LCD12864。
       LCD12864,即像素为128*64的显示液晶。它的每一行横向一共有128个可显示点,每一列纵向有64个,这些“点”其实也都是一个个发光二极管。它可以在一个16*16的点阵区域上显示一个中文;也可以在一个8*16的点阵区域显示一个非中文字符,一般称为半宽字体。即一个中文字所占显示面积是一个非中文字符的两倍。
LCD12864其实还有个叫法叫12864图形点阵,看出关键了么?对了,点阵二字。归根结底,它是一个点阵。既然是点阵,那么它的工作原理就和我们以前接触的LED点阵类似。即在要点亮的“点”上赋予正向压降即可。理解这点,对使用12864的图形显示功能有基础作用。
      于LCD12864的引脚结构和功能,并非全部的LCD12864引脚都是一样的。在此无法一一叙述。我们论坛板子的LCD12864接口是20个引脚,并行数据总线的LCD12864。下文我只以这种情况作论述,但是无论何种LCD12864,一通百通。
      在先看看LCD12864的一些内部存储器:
CGROM,Character Generator ROM,字形产生只读存储器,里面存储了供我们调用的中文。注意改存储器只读不写。
HCGROM,Half CGROM,半宽字形产生只读存储器,里面存储了供我们调用的英文,数字以及符号。也一样只读不写。
CGRAM,Character Generator RAM,字形产生随机存储器,12864允许我们自己自定义字符,CGRAM最多可以提高4组16*16的空间供我们存放自定义字符。
DDRAM,Data DisplayRAM,数据显示随机存储器,即用来存放将被显示的字符数据。
ICON RAM,图标随机存储器,用以存储将被显示的图标数据。
GDRAM,GraphicDynamic RAM,动态图形随机存储器,用以存储供显示的图形。
     下是论坛板子的管脚图:
3.jpg
       们要关注的分别是VL,RS,RW,EN,D0~D7,CS1,CS2还有VEE这些管脚:
VL引脚,是偏压信号脚,外接一个10K电位器可以调整LCD的对比度。说法上是偏压信号,其实决定LCD12864对比度的是流入改引脚的电流,所以如果是用AVR板子的ISP或者电脑的USB作为LCD的驱动电源,会得到十分暗淡的显示效果,所以建议用专用5V电源驱动LCD12864。这点要注意。
RS引脚,寄存器选择功能,当为低电平是选中命令寄存器,反之选中数据寄存器。
RW引脚,读写选择功能,当为低电平时对LCD进行写操作,反之进行读操作。
EN引脚,脉冲信号功能,在负脉冲时将数据从总线写入LCD或将数据从LCD读出总线。
CS1和CS2引脚,分别对应LCD的两个半屏,高电平时对应半屏可用。
注:每一块12864都分为两个半屏,上下两半或者左右两半,制造工艺使然。
     写时序图:
4.jpg

5.jpg

大家仔细观察后可以惊奇的发现,LCD12864的读写时序和LCD1602的几乎一摸一样!!对的,除了时钟脉冲的正负沿之分,这两块LCD的书写时序完全一致,甚至他们的寄存器控制字都非常相似,这使我不禁想象这两个LCD是不是出自同一人之手。
      到8位并口写时序图:
因为是写时序,所以RW引脚为低电平,根据写命令和写数据之分决定RS引脚的电平,之后给EN引脚一个正脉冲,接着将数据送到8位并口数据线,然后EN一个负脉冲将数据写入LCD12864。读时序与写时序只在RW的电平有唯一区别,对比一看便知。
      得一提的是,在每一次向LCD12864写完一个八位字节之后,都要等待12864向数据总线返回一个“忙”或者“闲”的信号,一定要在12864返回“闲”信号之后,才能对12864进行下一次读写。
      多言语也无法详尽表述,以下附上详细注释的源程序希望不明白的朋友可以仔细把每一行都看懂,并不是很长(请下载附件):
LCD 12864.rar (1.31 KB)
(下载次数: 508, 2010-3-17 11:45 上传)

     有许多值得注意的地方:
1、在12864的初始化过程中,注意功能设定寄存器的设置要写两次,因为“同一指令的动作不能同时改变DL 和RE,需先改变DL再改变RE才能确保设置正确”。
2、要在每次读写12864之前检测忙信号,而不是读写完之后。
3、在读出忙信号之前,要将对应的IO口置为上拉电阻使能的输入模式。
4、注意忙信号读出之后,因为其位于寄存器的最高位,所以要做”按位与”处理将其分离。
5、而读出忙信号之后,在下一次写操作之前,要记得将对应IO改回输出模式。
6、注意12864的第一行到第四行的地址依次分别为:0x80,0x90,0x88,0x98;你可以把12864看做是一个每行可以显示16个16*16的点阵图形,共有两行的LCD,只是它把每一

     行都平均截成两段,并且第一行截断后分别作为新四行中的第一和第三行,第二行作为新四行的第二和第四行。所以新四行的第一和第三行的地址是相连的,二四行也是
     相连的。
7、12864每一行可以最多显示8个中文,16个半宽字体。但是,在基本指令状态下,他的起始地址只能以全宽单位定义。即你无法写起始地址为“第1个半宽位置”或者“第3

     个半宽位置”……那如果一定要在某个半宽位置开始显示呢?笔者只是勉强用空格代替半宽字符实现的。应该有更好的办法,希望各位读者可以找出来。
8、注意器件手册中提供了初始化流程,其中各个步骤直接的延时时间不都相同,要严格达到要求。
9、如果实在不想做忙检测,则请在每一次读写完毕之后调用延时函数,确保LCD处于“闲”的状态。
     以上只是粗略说明了LCD12864最基本的用法,但是12864本身是以出色的图形显示甚至是动态图形显示为标榜的。所以大家要在掌握最基本的用法之后,还要深入开拓它

     的图像显示功能,显示出更好的图形。在此笔者已经成功用之显示任意图片,但是篇幅实在太长无法叙述,有兴趣的朋友可以找我,我愿意分享经验,一起学习探讨。
    希望能给有需要的朋友一点帮助。




[ 本帖最后由 losingamong 于 2010-3-17 11:56 编辑 ]

回复评论 (25)

恢复我发帖子时要排版的习惯,嘿嘿
惊奇的发现论坛的编辑器不能给文字加颜色~:L  
召唤soso管理员~~;P
点赞  2010-3-17 11:55
QQ截图未命名.jpg 这个不行吗?
点赞  2010-3-17 13:19
我OUT了
点赞  2010-3-17 14:21
引用: 原帖由 losingamong 于 2010-3-17 14:21 发表
我OUT了




点赞  2010-3-17 16:28
谢谢,分析的已经非常详细了,自己也在搞12864,感觉很有见解
点赞  2010-4-2 14:34
谢谢楼主分享 :)
DIY是一种信仰~~
点赞  2010-4-6 09:36
谢谢楼主分享,无私而强大的人!
点赞  2010-5-6 15:01

9楼 gbx 

楼主,谢谢分享,
点赞  2010-6-19 16:27
不错啊!!!!!!!!!!
点赞  2010-6-19 16:45

学习中


点赞  2010-8-7 18:55
....LCD上的点不是发光二极管哟~~~那就成了OLED了........
点赞  2010-8-7 19:49
谢谢楼主分享
学习
点赞  2010-9-27 21:55

 看了楼主帖子,感觉写的太好了,特意注册了个号~~~

 

 

我用的是C8051f040做的液晶显示程序,晶振如果用内部的6M或12M的都可以正常显示,可我想改成外部的22.1184的晶振就显示全角正常  显示半角就会乱码  汉字对 字母数字空格就乱,能否麻烦楼主帮分析下是什么问题?我怀疑是时序问题,无奈是新手看不太懂时序图的时间,刚刚在楼主这里学了些~~~

点赞  2010-10-21 13:24
一直在用12864,来看看,挺好~
我爱电子!
点赞  2010-10-21 16:32

回复 14楼 huaizhifengcai 的帖子

既然是换晶振出问题,那8成是时序问题,你可以把你程序里面的延时子函数时间延长一下试试
点赞  2010-10-21 18:31
谢谢讲解
点赞  2011-2-28 20:04

回复 楼主 losingamong 的帖子

顶顶楼主,貌似有与众不同的东西哈哈哈
点赞  2011-3-3 09:44
楼主牛 啊  太感谢您了
点赞  2011-7-9 08:41
跟你学习15课
点赞  2011-10-21 17:11
12下一页
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复