原创 【博客大赛】MCU之心路分享—偷偷爱你--12864液晶(八)

2014-3-10 20:29 6101 16 18 分类: MCU/ 嵌入式 文集: MCU之心路分享

 

     时隔3个月没有更新《MCU之心路分享》了,不知道我是否有幸,让胖螃蟹小编对我拍拍砖呢?嘿嘿…….这3个月,一直都没有离开过EDN,一直都潜伏着,这3个月中,见证,陪伴,小小地参与了《与单片机牵手的那些年》一书一点一滴的成长,感觉自己是幸福的,也是幸运的!

     2月,参与了简爱基金公益组织——“在爱中行走”寻梦海南,徒步环岛,来到了祖国最南端-----美丽的三亚,我们走过海口,文昌,万宁,琼海,陵水,五指山,三亚等等城市,在穷游的行走路上,我们一路商战,一路公益,一路成长着,忍受过饥饿,忍受过寒冷,………睡过公园,睡过操场,睡过图书馆,…..…..累似乎都不算什么了,最重要的是我们都当过屌丝,奇葩了呀!哈哈………在此,也借助强大的EDN,随便宣传下简爱基金,让更多大学生参与公益,去穷游,去体验生活与人生,让我们未来的路在爱中行走,在爱中醉爱电子吧!

     3月,当然是好好过年,什么都不想啦,一年没有回家的孩子确实好好陪陪爸妈了!、、......打住,说多都是泪,还是进入正题吧!

 

———————————————————————————————————————

本小节目录:

            8.1,12864液晶的简介

            8.2,12864液晶连接单片机原理图         

            8.3,12864时序图的分析和程序编写

      液晶是非常能给人视觉享受的东西啦!例如手机的液晶屏,液晶电视,………,浪漫点的还有液晶灯,迷人的液晶鞋,炫酷的液晶手表,,,,,,等等!但不管怎么说,还是学会使用最简单的液晶吧!

8.1.112864液晶的简介

 常用的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行内容,可实现文字与图形混合显示功能、可以自由的设置光标、显示移位功能、垂直画面旋转功能、反白显示功能、休眠模式等

  1.jpg

                            图1  12864液晶实物图

 

 

212864液晶接口说明:

2.jpg

                                                        图2 12864液晶接口图

简介上图:

    1,引脚3(VL):一般接一个103的电位器,用于调节液晶的显示亮度。

    2,引脚15(PSB):高电平时选择并口,低电平时选择串口

3,引脚16(NC):空脚即不需要接任何管脚即可。

 

312864状态字说明

表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.212864指令说明

  表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)绘图坐标分布图

     3.jpg

                       图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.212864液晶连接单片机原理图

4.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.312864时序图的分析和程序编写

这里本人只介绍并行操作,串行操作基本留给感兴趣的读者去探索吧!

 

1) 并行写操作时序图

5.jpg

                                                                图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版)

 

 

                                                                                                于2014年03月10日

PARTNER CONTENT

文章评论2条评论)

登录后参与讨论

用户1659913 2014-3-22 11:02

用串口2线,配合STM32F051是绝配。 开辟1K内存做缓冲,读点就可以不用忙检测了。

用户403664 2014-3-13 16:01

怎敢拍砖。希望可以看到徒步环岛的美图~
相关推荐阅读
流年一束光 2014-05-20 13:32
有时候,我也不知道我是否还能坚持下去
       退学?真的要退学么? 这个问题伴随着我整个大学,从第一天开始就一直到现在!       一面是对未来,或许说是梦想的追求,渐渐清晰地看见,并学会接受现实,走在自己选择未来的电子路...
流年一束光 2014-04-07 00:55
【博客大赛】MCU之心路分享-----前言
        如果你想要得到从未有过的东西,那就去做你从未做过的事情!!!                                                          ...
流年一束光 2014-04-07 00:46
【博客大赛】MCU之心路分享--倾听你的改变--AD/DA转换(十一)
         用勇气来改变可以改变的事情,用胸怀来接受不可改变的事情,用智慧来分辨两者的不同                                                  ...
流年一束光 2014-04-05 17:28
【博客大赛】MCU之心路分享—有种爱叫:IIC(十)
         在工科男的世界里,连IIC都能想象成浪漫的牵手,而一个对单片机充满热爱的工科男,有什么理由不去认识它,学会它,并去驾驭它啊!当然,在我知道的世界里,貌似大学老师从来都没有真正教过...
流年一束光 2014-03-20 00:34
【博客大赛】MCU之心路分享—你小小的心令我感动(九)
          如果说,学过单片机,却连单片机最小系统都没有焊接过或者搭建过!甚至连电烙铁都没有摸过,那是个多么巨大的笑话呀?          但现实不幸的是,这样的笑话,一直重演在许多...
EE直播间
更多
我要评论
2
16
关闭 站长推荐上一条 /1 下一条