12864液晶 介绍

本小节目录:

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

  1.jpg

                            图1  12864液晶实物图

 

 

2)12864液晶接口说明:

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

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

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.3,12864时序图的分析和程序编写

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

 

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 模块。

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值