时隔3个月没有更新《MCU之心路分享》了,不知道我是否有幸,让胖螃蟹小编对我拍拍砖呢?嘿嘿…….这3个月,一直都没有离开过 ,一直都潜伏着,这3个月中,见证,陪伴,小小地参与了《与单片机牵手的那些年》一书一点一滴的成长,感觉自己是幸福的,也是幸运的! 2月,参与了简爱基金公益组织——“在爱中行走”寻梦海南,徒步环岛,来到了祖国最南端-----美丽的三亚,我们走过海口,文昌,万宁,琼海,陵水,五指山,三亚等等城市,在穷游的行走路上,我们一路商战,一路公益,一路成长着,忍受过饥饿,忍受过寒冷,………睡过公园,睡过操场,睡过图书馆,…..…..累似乎都不算什么了,最重要的是我们都当过屌丝,奇葩了呀!哈哈………在此, 随便宣传下简爱基金,让更多大学生参与公益,去穷游,去体验生活与人生,让我们未来的路在爱中行走,在爱中醉爱电子吧! 3月,当然是好好过年,什么都不想啦,一年没有回家的孩子确实好好陪陪爸妈了!、、......打住,说多都是泪,还是进入正题吧!
——————————————————————————————————————— 本小节目录: 8.1,12864液晶的简介 8.2,12864液晶连接单片机原理图 8.3,12864时序图的分析和程序编写 液晶是非常能给人视觉享受的东西啦!例如手机的液晶屏,液晶电视,………,浪漫点的还有液晶灯,迷人的液晶鞋,炫酷的液晶手表,,,,,,等等!但不管怎么说,还是学会使用最简单的液晶吧! 8.1.1)12864液晶的简介 常用的12864液晶模块有黄绿背光的、蓝色背光的,有带/不带字库的,其控制芯片主要有如KS0108、T6863、ST7920等,这里本人用的为ST7920为控制芯片的YB12864-ZB液晶屏。但不管用什么类型的12864,其使用操作都大同小异!当然,如果会使用1602了,12864的使用也变得事半功倍啦!
1)关于12864液晶的说明: 1,可显示汉字及图形,内置8192个中文汉字(16X16点阵)、128个字符(8X16点阵)及64X256点阵显示RAM(GDRAM),显然比1602高级! 2,可以选择8位并行或者4位串行操作 3,可以显示128列× 64行内容,可实现文字与图形混合显示功能、可以自由的设置光标、显示移位功能、垂直画面旋转功能、反白显示功能、休眠模式等 [/url] 图1 12864液晶实物图
2)12864液晶接口说明: [url=http://download.bbs.ednchina.com/images/attachments/201402/original/9950240805_TIME_1394415378828.jpg]
图2 12864液晶接口图 简介上图: 1,引脚3(VL):一般接一个103的电位器,用于调节液晶的显示亮度。 2,引脚15(PSB):高电平时选择并口,低电平时选择串口 3,引脚16(NC):空脚即不需要接任何管脚即可。
3)12864状态字说明 表8-1 状态字分布表 STA7 D7 | STA6 D6 | STA5 D5 | STA4 D4 | STA3 D3 | STA2 D2 | STA1 D1 | STA0 D0 | STA0~STA6 | 当前地址指针的数值 | - | STA7 | 读/写操作使能 | 1:禁止 0:使能 | | | | | | | | | | |
严格来说,对控制器每次进行读写操作之前,都必须进行读写检测,确保STA7为0。也即一般程序中所谓的判断忙操作。
8.1.2)12864指令说明 表8-2基本指令表 指令名称 | 指令码 | 指令说明 | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 | 清屏 | L | L | L | L | L | L | L | H | 清屏:1、数据指针清零 2、所有显示清零 | 归位 | L | L | L | L | L | L | H | * | AC = 0,光标、画面回HOME位 | 输入方式 设置 | L | L | L | L | L | H | ID | S | ID=1→AC自动增一; ID=0→AC减一 S=1→画面平移; S=0→画面不动 | 显示开 关控制 | L | L | L | L | H | D | C | B | D=1→显示开;D=0→显示关 C=1→游标显示;C=0→游标不显示 B=1→游标反白;B=0→光标不反白 | 移位控制 | L | L | L | H | SC | RL | * | * | SC=1→画面平移一个字符; SC=0→光标 R/L=1→右移;R/L=0→左移 | 功能设定 | L | L | H | DL | * | RE | * | * | DL=0→8位数据接口; DL=1→4位数据接口 RE=1→扩充指令; RE=0→基本指令 | 设定 CGRAM 地址 | L | H | A5 | A4 | A3 | A2 | A1 | A0 | 设定CGRAM地址到地址计数器(AC),AC范围为00H~3FH需确认扩充指令中SR=0 | 设定 DDRAM 地址 | H | L | A5 | A4 | A3 | A2 | A1 | A0 | 设定DDRAM地址计数器(AC) 第一行AC范围:80H~8FH 第二行AC范围:90H~9FH |
表8-3扩充指令表 指令名称 | 指令码 | 指令说明 | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 | 待命模式 | L | L | L | L | L | L | L | H | 进入待命模式后,其他指令都可以结束待命模式 | 卷动 RAM 地址选择 | L | L | L | L | L | L | H | SR | SR=1→允许输入垂直卷动地址 SR=0→允许输入IRAM地址(扩充指令)及设定CGRAM地址 | 反白显示 | L | L | L | L | L | H | L | R0 | R0=1→第二行反白;R0=0→第一行反白(与执行次数有关) | 睡眠模式 | L | L | L | L | H | SL | L | L | D=1→脱离睡眠模式; D=0→进入睡眠模式 | 扩充功能 | L | L | H | DL | * | RE | G | * | DL=1→8位数据接口; DL=0→4位数据接口 RE=1→扩充指令集; RE=0→基本指令集 G=1→绘图显示开; G=0→绘图显示关; | 设定 IRAM地址 卷动地址 | L | H | A5 | A4 | A3 | A2 | A1 | A0 | SR=1→A5~A0为垂直卷动地址 SR=0→A3~A0为IRAM地址 | 设定 绘图RAM 地址 | H | L | L | L | A3 | A2 | A1 | A0 | 垂直地址范围:AC6~AC0 水平地址范围:AC3~AC0 | A6 | A5 | A4 | A3 | A2 | A1 | A0 |
8.1.3) 12864显示坐标关系 1)汉字显示坐标 表8-4汉字显示坐标地址表 行名称 | 列地址 | 第一行 | 80H | 81H | 82H | 83H | 84H | 85H | 86H | 87H | 第二行 | 90H | 91H | 92H | 93H | 94H | 95H | 96H | 97H | 第三行 | 88H | 89H | 8AH | 8BH | 8CH | 8DH | 8EH | 8FH | 第四行 | 98H | 99H | 9AH | 9BH | 9CH | 9DH | 9EH | 9FH |
2)绘图坐标分布图 [/url] 图3 12864液晶绘图显示坐标 水平方向有128个点,垂直方向有64个点,在更改绘图RAM时,由扩充指令设置GDRAM地址,设置顺序为先垂直后水平地址(连续2个字节的数据来定义垂直和水平地址),最后是2个字节的数据给绘图RAM(先高8位,后低8位)。 最后总结一下12864液晶绘图的步骤,步骤如下: 1) 关闭图形显示,设置为扩充指令模式。 2) 写垂直地址,分上下半屏,地址范围为:0~31。 3) 写水平地址,两起始地址范围分别为:0x80~0x87(上半屏)、0x88~0x8F(下半屏)。 4) 写数据,一帧数据分两次写,先写高8位,后写低8位。 5) 开图形显示,并设置为基本指令模式。
在此说明一点,也是好多新人模糊的地方。ST7920可控制256*32点阵(32行256列),而12864液晶实际的行地址只有0-31行,12864液晶的32-63行是从0-31行的第128列划分出来的。也就是说12864的实质是“256×32”,只是这样的屏“又长又窄”,不适用,所以将后半部分截下来,拼装到下面,因而有了上下两半屏之说。再通俗点说第0行和第32行同属一行,行地址相同;第1行和第33行同属一行,以此类推。 如果还不明白,暂时不需要深究,当会用的时候,自然而然就会明白了!
8.2)12864液晶连接单片机原理图 [url=http://download.bbs.ednchina.com/images/attachments/201402/original/9950240805_TIME_1394415531435.jpg]
图4 麦光单片机开发板中液晶连接单片机图
有些初学者可能会问? 为什么电路图是这样连接的,读者可以对照上图2即知 接口说明: 1)液晶1、2为电源接口; 19、20为背光电源。 2) 液晶3端为液晶对比度调节端,其中连接一个10KΩ电位器来调节液晶对比度第一次使用时,在液晶上电状态下,调节至液晶上面一行显示出黑色小格为止。 3) 液晶4端为向液晶控制器写数据、命令选择端,接单片机的P3.5口。 4)液晶5端为读、写选择端,接单片机的P3.4口。 5)液晶6端为使能信号端,接单片机的P3.3口。 6)液晶15端为串(L)、并(H)口选择端,接单片机的P3.2口。 7)液晶16、18为空管脚口,在硬件上不做连接。 8)液晶7~14为8位数据端口,依次接单片机的P0口。
8.3,12864时序图的分析和程序编写 这里本人只介绍并行操作,串行操作基本留给感兴趣的读者去探索吧!
1) 并行写操作时序图 [url=http://download.bbs.ednchina.com/images/attachments/201402/original/9950240805_tiME_1394415588027.jpg][/url]
图5 12864写操作时序图
相信看懂1602的人都很容易知道时序图了,在此不多说 /************************************************* 函数功能: 写命令数据到LCD 入口参数: Cmd 出口参数: void RS=L; RW=L, E=高脉冲,D0~D7=指令码 **************************************************/ void Write_LCD_Command(Uchar8 Cmd) // 写命令 { LCD_Busy_Wait(); // 忙检测 LCD_Rs = 0; LCD_Rw = 0; LCD_En = 0; P0 = Cmd; Delay_1ms(5); LCD_En = 1; Delay_1ms(5); LCD_En = 0; } /************************************************* 函数功能: 写数据 入口参数: Data 出口参数: void RS = H, RW = L, E= 高脉冲, D0~D7= 数据。 *************************************************/ void Write_LCD_Data(Uchar8 Date) // 写数据 { LCD_Busy_Wait(); // 忙检测 LCD_Rs = 1; LCD_Rw = 0; LCD_En = 0; P0 = Date; Delay_1ms(5); LCD_En = 1; Delay_1ms(5); LCD_En = 0; }
以上程序的说明基本跟1602液晶是一样的 /******************************************************* 函数功能:行列(位置)选择,设定显示位置 入口参数:X(行)、Y(列) 出口参数:无 ******************************************************/ void lcd_pos(Uchar8 X, Uchar8 Y) { Uchar8 pos; if(X ==1) {X = 0x80;} // 第一行 else if(X == 2) {X = 0x90;} // 第二行 else if(X == 3) {X = 0x88;} // 第三行 else if(X == 4) {X = 0x98;} // 第四行 pos = X+Y; Write_LCD_Command(pos); // 显示地址 } 由于程序太长,为了更好编辑,本人已将剩下程序上传,需看可下载。
本人见过有些程序中没有忙检测也是可以的,但个人一直认为:加上忙检测LCD_Busy_Wait()是非常有必要的,为什么?1,对于电子学习的一种严谨,培养这种意识吧 2,为日后我们使用更大,更复杂液晶的时候避免出现不必要的麻烦呀!3,一颗不严谨,不靠谱的心,如何给女人安全感呀?嘿嘿………..
怎么说液晶也算是有点娇气的东东啦!并且很多液晶价格蛮贵的!还是建议看看佳佰科技有关于液晶使用注意事项吧:
1.处理 (1)要避免在处理机械振动和对模块施加外力,都可能使屏不显示或损坏。 (2)不能用手或坚硬工具或物体接触、按压、磨擦显示屏,否则屏上的偏光片被物体划坏。 (3)如果屏破裂液晶材料外漏,液晶可以通过空气被吸入,而且要避免液晶与皮肤接触,如果接,触应立即用酒精冲洗,然后再用水彻底冲洗。 (4)不能使用可溶有机体来清洗显示屏。因为这些可溶的溶剂对偏光片不利,清洗显示屏时,可 用棉花蘸少量石油苯轻轻擦拭或用透明胶带粘起脏物。 (5)要防止高压静电产生的放电,将损坏模块中的 CMOS 电路。 (6)不能把模块放在温度高的地方,尤其不能长时间放在湿度大的地方,最好把模块放在温度为 0℃-35℃,湿度低于 70%的环境中。 (7)模块不能贮存在太阳直射的地方。
2.操作 (1)当电源接通时,不能组装或拆卸模块。 (2)在电源电压的偏差、输入电压的偏差及环境温度等最坏条件下,也不能超过最大的额定值, 否则将损坏 LCD 模块。
说明:所用开发板为:麦光电子单片机开发板
提前告知:《MCU之心路分享》下章更新,最小系统的搭建(万能板焊接,面包板搭建,以及PCB版)
|