




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、无字库12864液晶的驱动方法在制作单片机系统时,一般都需要用显示器件来显示单片机的工作状态并显示输出结果,如LED数码管和液晶显示器等。LED最简单,但能给出的信息很少。数码管能清晰地显示数字和部分字母,但是耗电较大,不适合使用电池供电的装置。常见的液晶显示器有段式液晶、字符液晶和图形液晶等。其中,段式液晶最省电,但对于通用显示使用起来不很方便,只能显示固定式 数字或符号,而且需要专用驱动电路或特殊的单片机。字符液晶(如1602)用得比较多,容易和单片机配合,但是一般都需要5V工作电压,虽然现在也有3V就可以工作的模块,但是体积还是较大,而且只能显示数字和西文字符,无法显示图形和汉字。点阵液
2、晶模块既可以显示 ASCII字符,又可以显示汉字和图形,相对于前面几种,具有更大的灵活性,所以使用得越来越多。不过常用 的图形液晶因为显示面积增加,体积比字符液晶(如 1602)更大,价格也更贵。初学者要注意的是,12864图形点阵液晶随着厂家设计 使用的驱动芯片不同,驱动程序有所区别,不像 1602那样基本通用。几种常见的12864图形点阵模块12864点阵液晶模块分为带汉字库和不带汉字库两大类,目前带汉字库的通常是ST792C驱动,它可以工作在汉字字符方式和图形点阵方式,很多制作都用它,如果需要显示较多汉字,用它最为方便。在显示汉字数量很少的场合,我们可以使用更加廉价的、不带字库的点阵液晶
3、模块,这正是本文重点介绍的。它们的控制电路有KS0108 和ST7565两种:KS0108艮简单,一共只有7条指令,可是它没有串行接口;ST7565有20多条指令(最常用的也就几条),有串行接口,可选串行或并行工作。KS0108W ST7565勺指令和上述带字库的ST792C区别较大,所以初学者买液晶时一定要搞清楚是哪种驱动电路。 即使同样的驱动电路,不同厂家或者不同型号的产品,具体细节仍可能不同。例如有的片选信号是高电平有效,有的却是低电平有效, 有的把显示区分为左右两半分别选取,有的却不加区分。所以使用前要仔细看厂家说明,如果没有,就要看液晶模块背面给出的具体型 号,根据这个型号去查找使用
4、手册。笔者最近在淘宝网上搜寻到一款12864的图形点阵液晶,只有4cm宽、3.5cm高,显示面积为3.2cm宽、1.95cm高,非常小巧。更加难能 可贵的是它可以在3V低电压工作,很适合我们制作小型便携装置。该液晶模块型号是 SP12864FPD-12CSBE由北京集粹电子设备公司出 品,它的外形见图1。图1 12864图形点阵液晶模块图2小小日历钟(文字界面)图3小小日历钟(图形界面)图2、图3所示为笔者用它制作的一个小小日历钟,它的特点是具有可以随意转换的文字和图形界面。文字界面除了显示年月日时分秒, 在右上角还有一个小鸡啄米的小动画,图形界面用指针在刻度上指示出时分秒,是不是有点新意呢?
5、图4所示是调频收音机的显示屏,用进度条指示音量,用刻度尺显示信号强度,比1602只能显示数字和字母要生动多了。没有字库用起来是否很麻烦?其实搞清了图形点 阵的基本工作原理,用起来并不麻烦却更灵活,不带字库我们就按需要打造字符!£7£ . " yr二S-ii!"? E JrA.yNna£:- 彳?K、J$iw 二 浴彳衣L.虑j«-r.:r;fJ? r,电H*/yd,;w 厂门A 、 c< o: J. <>>A *V.Y10 陰 <A*5亠“y £l_:s士.,至昙H FT- 一:*y 2I ;=
6、。.-.4'.汐J、j 、亠SEEK ?6 MHz ;ImlRSSI VOL >!'. r二 -20-13:3115rr0 12 3 127列列列歹U列图4调频收音机 图5液晶模块采用 COG”封装 图6点阵液晶显示原理下面就谈谈这个液晶的驱动方法,以后将给出一些制作实例,以帮助初学者用它做出具有个性的东西。液晶模块SO12864-12Q简介此型号小液晶包括一系列子型号,详见。这次所用的 SO12864FPD-12CSB只是其中的一种,我们先来了解一下它的主要特性:逻辑或电源电压2.85.5V;蓝色背光,背光电压3V;串行接口,用8个焊盘引出包括电源、背光、地和控制线数据
7、线;不带字库,需要自己编辑外部字模数组;速度较快,用时钟1MHz的AVR单片机驱动,编程时无须附加脉冲额外延时;使用ST7565电路,命令代码一共23条。显然,它十分适合低压小尺寸场合应用,串行接口最大限度减少了液晶和单片机的连线,虽说比并行慢一点,实际上如果不是频繁刷屏 影响并不大。要自己编制字库确实比较麻烦,但是只要显示的文字量少,制作小字模也不困难,反而可以自己打造个性化的字体,使得 显示具有特色。把液晶模块翻过来,如图5所示,发现电路板上没有通常液晶模块的黑胶封装集成电路,原来这个液晶采用的是“COG封装,就是把集成电路直接绑定在液晶玻璃板上。它的8个接口焊盘位于模块上方,定义如下:1
8、. 片选CS它为低电平才能进行操作,在加载数据后至少维持40ns低电平。2. 复位RES启动时至少维持1卩s低电平以使液晶内部复位,然后升高,再过 1卩s完成复位,以后才能对液晶进行操作。3. 命令数据选择A0:高电平为数据,低电平为命令。4. 串行时钟SCL顶底宽度至少25ns,低时AC和SI至少稳定20ns,然后在上升沿加载数据或命令。5. 串行数据SI :同上,在SCL上升沿加载后至少还要保持10ns稳定。6. 电源正VCC最低2.8V,标准3V,最大5.5V。7. 地 VSS8. 背光LED+蓝色背光最低2.8V,标准3V,最大3.2V,使用时要注意不要超过。在串行模式时,一个命令或数
9、据字节要分为 8次加载,从最高位开始。图形点阵的显示原理12864点阵液晶的图形显示原理都差不多。液晶屏x方向(水平)具有128列像素从左到右为第0列第127列,y方向(垂直)具有64行像素。每8行组成1页,从上到下就是第0页第7页。这样以列号和页号为坐标,就可以指定交叉位置的8个像素。例如第0、1、2、 3列第1页的8个像素,如图6所示。在液晶内部有一块显示缓存区,按照列号和页号就可以对显缓区的某个字节写数,该字节的8位二进制数就对应了液晶屏同样位置的像素的亮灭,如对第1列第1页的那个缓存单元写入0X80即0b10000000,那么液晶对应位置的最下面一点 7亮(低位在上高位在下)其余都灭,
10、如果第 2列第1页写入0X0F即0b00001111,贝U该位置上方4个点0123亮,其余像素不亮,第3列第1 页写0X33,则该处间隔2点亮。这样就可以通过程序控制液晶屏的任意像素了。 不同的液晶屏指令代码可能不同(例如这个屏和常见的7920 驱动不一样),屏幕划分也可能不同,例如有的是分为左右两半,每半边64列,有的是分为上下两半等。液晶SO12864-12C的编程要点控制液晶最基本的工作就是往液晶的控制器写入命令码或往显缓区写入数据码,是命令还是数据由加到上述A0的电平高低决定:高,数据;低,命令。因为现在是串行传送,所以只能由高到低一位位写。串行只能写不能读。以前要靠读来判定液晶是否忙
11、,这个液晶速度较高,实际使用证明串行传输不用读忙。编程就是用单片机的几根口线按照所需的时序发出高低电平,再往液晶里送入代码或数据。控制脉冲和代码脉冲的时序关系如图7所示CS 片 1LTSI为命令A0命令数据选择XSI为数据SCL时钟(SI命令码或数据XD7 X 06图7控制脉冲和代码脉冲的时序关系最常用的几个命令1. 显示开/关:代码:OXAF开),OXAE关)启动复位后为“关”,必须在液晶初始化时置“开”。2. 页地址定位:代码:OXBO0XB7,对应第0页到第7页,复位后自动安置为第0页。3. 列地址定位:列地址是0X000X7F,但不是直接用列地址而要转换为双字节代码。方法是0X10加原
12、高4位和0X00加原低4位。例如第33列,本是0X21,现在应该转换为0X12和0X01,分2次写入。4. 写显示数据:代码就是显示数据,控制脉冲A0为高。5. 复位:代码0XE2通过程序使得液晶恢复各种起始默认状态。有了这几条命令就已经可以使液晶画出以像素点为基础的图形或字符了。有些其他命令(如对比控制、亮度、偏压等)就取默认值,无 需修改(初始化要用一下),还有些很有用的命令(如反向列页扫描、起始行、反白显示等),需要时再去查资料不迟。有了上述命令代 码,我们就可以通过汇编或 C语言,按照控制时序编出子程序或函数,以便在程序中使用。C语言因为易读性好、通用性好、移植性好所以用得较多,下面就
13、给出一些 C的函数,由它们就构成了液晶的驱动。驱动液晶的基本C函数我们用C语言编程,在C语言里,用“函数”把单片机的一系列具体操作包装起来起个函数名,需要时直接按名调用即可,非常方便。首先必须解决怎样对液晶串行写数据的问题,然后按照A(线的高低,我们就可以自行编出写数据函数和写命令函数。一下只列出函数说明和用法举例,函数的具体内容可到无线电网站上下载C程序代码。1. 串行传送1字节数据函数,参数为待传字节。void LcdWriByte( un sig ned char nn) nn就是待写字节这个是最基本的函数,不过我们不直接用它而是把它放在其他写数据函数里调用。2. 写命令。参数为命令码。
14、void LcdWriComma nd(un sig ned char comma nd);例如,打开显示:LcdWriComma n(0XAF);3. 写数据。参数为待写的显示数据。void LcdWriData( un sig ned char data);例如,写显示一个点的数据:LcdWriData(0X01);4. 指定列、页地址。参数为列地址 x和页地址y。void LcdSetxy (un sig ned char x,un sig ned chary);例如:LcdSetxy(68,2); 设置显示地址为第68列、第2页。通常和上一个函数连用,见下一节函数应用举例。在以上基本函
15、数基础上我们还可以根据命令码推演出几个便于使用的功能函数。5. 开显示。void Lcd On(v oid ); 例:LcdOn();6. 关显示。void LcdOff(void );例:LcdOff();7. 软复位。用它可以在任何时刻使液晶屏回到起始状态而显示缓冲区内容不变。void LcdReset(void );例:LcdReset();8. 刷屏。void LcdCls( un sig ned char data );就是用数据data写满显示缓冲区,data如果为0,那全屏刷白(无像素显示),如果data为0XFF则全屏刷黑(像素全部亮)。如果为0XAA 呢?感兴趣的读者不妨实验
16、一下。例:LcdCls(0 );最后给出该液晶的初始化函数,在系统启动后,MCI初始化以后就进行液晶初始化。9. LCD初 始化。Void Lcdn i();通常在程序开始阶段进行,对各种参数进行设置,具体初始化项目请参看函数内容和注解。 函数应用举例1. 在指定位置画1点先给定页和列坐标,就指定了 1列8个像素点,1个点的位置从上到下对应数值为0X01、0X02、0X04 0X08 0X10 0X20 0X40 0X80 例如在第9列、第3页最低位画点:LcdSetxy(9,3); LcdWriData(0X80);2. 在指定位置画连续8个点构成的短竖线 例如位置同上,则LcdSetxy(
17、9,3);LcdWriData(0XFF);3. 画水平线例如从第10列起在第3页底部画1根长度50像素点的连续直线:un sig ned char i; LcdSetxy(10,3);for (i=0;i<50;i+)LcdWriData(0X80); / 循环中列地址自动递增明白了以上基础,我们就可以进一步画出长短竖线、更粗的水平线、水平双线矩形方框、黑块等,这样就可以画简单图形了。怎样显示字符或汉字字符和汉字实质是在一个矩形区域内由一系列像素点构成的图形,也就是点阵图。例如在一个8X 8点阵区域内,字母“ L”点阵如图8左所示。如果要在第0页第0第7列显示这个字符,那么就应该在相应
18、的显示缓冲区装入相应的数据如右边图所示,这里用1表示显示像素,不显示的像素都是0,为清楚起见图中就不标出,上方表示列号 07,那么从0列开始,各列的二进数和16进数分别表示为: 0B00000000 : 0X000B01000010 : 0X420B01111110 : 0X7E0B01000010 : 0X820B01000000 : 0X400B01000000 : 0X400B01100000 : 0X600B00000000 : 0X00所以我们就用一个8元素的数组来表示这个“ L”:const un sig ned char L8=0X00,0X42,0X7E,0X82,0X40,0
19、X40,0X60,0X00;要在液晶上的第3页第6列显示这个“ L”,就使用如下函数:LcdShow88( un sig ned x,un sig ned y, const char *p);其中p指向8点阵字符数组,那么具体代码为:LcdShow88(6,3, L);打造字模就是按照所需显示的文字符号一一编制各自的数组,上述8X 8点阵就可以在1页高度内显示,实际上其上下左右都要留空,这样有效的点阵只有6X 6,要显示数字和ASCII字符尚可,简单笔画的汉字也行,可是笔画稍多的汉字就不行了。对于汉字显示我们一般 使用16X 16点阵的字模。这样的汉字高度占2页,宽度是16列,12864的液晶
20、可以显示4行,每行8个字。所有的12864液晶不论尺寸大小都 是如此。16一个16点阵字模数组具有32个元素,每一页有16个元素。因此显示这样的汉字时,就要给同一列的某一页和下一页分别写入各自的 个元素。例如汉字“钟”的字模数组为:constun sig nedcharZHONG?=0x80,0x40,0x70,0xCF,0x48,0x48,0x00,0xF0,0x10,0x10,0xFF,0x10,0x10,0xF8,0x10,0x00,0x02,0x02,0x02,0x7F,0x22,0x12,0x00,0x07,0x02,0x02,0xFF,0x02,0x02,0x07,0x00,0x0
21、0;要在第2页、第6列开始显示“钟”,我们用一个函数:LcdShow1616( un sig ned x,un sig ned y, const char *p);其中参数x是列,y是页,p指向字模数组,具体的代码为:LcdShow1616(6,2, ZHONG);这样,汉字就显出来了。最后,交代一下取得点阵汉字字模的方法。编制字模数组的好帮手一一字模软件的使用因为我们现在需要的汉字量很少,所以可以使用一些字模提取软件自己制作所需的字模。以一个很好用的绿色免费“畔畔字模提取软 件”为例加以说明。此软件在各大程序网站都有下载,下载解压后就可使用,开启界面如图9所示。选取Shape :方形,Mod
22、e C51,取模顺序选第4种,点阵图右上为A,右下为B,左上为C,左下为D,这是按照先右半从上到下,后左半从上到下的顺序取模。10踐畔畔宇模提収软杵(by xQft)氧邑选择r-绿色X色Shape 点方形C凰形Mode r ASM 冷C51提取字根Q左謔9QE0J右 ®9QEfR1到勢贴板(£职複顺序AB CD额色选择-黄色厂绿色到聖贴板£)左旋9Q®L钾右旋9墟旧1Ok80,Ox40,Ok70,OxCF.Ox48,Ox48,OxOO,OxFO,Ox1 0,0x1 O.OxFFXxl 0,0k1 0XkF8,0k1 O.OmOO,OkO2jOx0ZOkO
23、2.Ok7F.Ok22Xh12.0x0O,On07.0«O2,0x0ZOxFF,0xO2,OxO2.CIHO7.OxO0.Ox00探取字模旦找 :比畔畔字摸提取软件(by zsoft)r X色ShapeMode金方形C ASM1r豌a C51图11图12然后在下面输入框里输入汉字回车后, 左边显示点阵字,见图10。对点阵自行修饰改动,用鼠标点选即可,例如竖笔加粗等,这里没改 点右旋90度按钮,点阵汉字右旋90度,其目的是由上往下取码,相当于显示时从左往右显示。点“提取字模”按钮,字模代码呈现在点 阵下面,见图11。注意字模码有2行,上行对应旋转后的右半区域从上往下取码,下行对应左半区域从上往下取码,这就等同于旋转前 的汉字从左往右取码,而上行代码对应的是汉字的上半代码,下行则对应的是汉字的下半代码。正好符合上述汉字显示程序先显示上半 部后显示下半部的要求。这样就取得了例子中的字模代码。可以把所需的汉字逐一取码,然后存在二维表中,就形成了16X16点阵字模数组。因
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 牛和鹅教学课件
- 精细化工安全行业标准
- 面部护理品的选择 关键在于肤质
- 地形模型制作美术教学课程
- 2025年中国果啤稳定剂市场调查研究报告
- 2025年中国成品粮市场调查研究报告
- 互联网广告精准投放算法2025年效果评测与智能广告投放平台技术演进报告
- 2025年中国喷火机用气体市场调查研究报告
- 2025年中国双制动电动葫芦市场调查研究报告
- 2025年中国单弓切片机市场调查研究报告
- 食品安全自查、从业人员健康管理、进货查验记录、食品安全事故处置等保证食品安全规章制度
- 中小学教师家校社协同育人能力的区域调研与思考
- 第三单元 认识立体图形(单元测试)-2024-2025学年一年级上册数学人教版
- ISO 22003-1:2022《食品安全-第 1 部分:食品安全管理体系 审核与认证机构要求》中文版(机翻)
- 员工工资表范本
- 小学二年级下口算题1000道(50道每天)
- 香港私家车转让协议书模板
- 食品经营安全管理制度目录
- 浙江省石材面板保温装饰板外墙外保温系统应用技术规程
- 汽车租赁合同协议电子版
- 模拟电子技术基础智慧树知到期末考试答案章节答案2024年北京航空航天大学
评论
0/150
提交评论