当前位置:主页 > 资讯中心 > 技术知识 >

12864液晶模块的介绍

发布时间:2018-07-02

本小节的目录:
            8.1,12864液晶模块的简介
            8.2,12864液晶模块连接到单片机的原理图         
            8.3,12864液晶模块时序图的分析以及程序编写

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

8.1.1)12864液晶模块的简介
 比较常用的12864液晶模块有黄绿背光的、蓝色背光的,有带/不带字库的,其控制芯片主要是KS0108、T6863、ST7920等等,这里本人所使用的为ST7920为控制芯片的JX12864K1液晶屏。但是不管用什么类型的12864,其使用操作都大同小异!当然,如果你会使用1602了,那么12864的使用也会变得事半功倍!
    
1)关于12864液晶模块的说明:
     1,可显示出汉字以及图形,内置有8192个中文汉字(16X16点阵)、128个字符(8X16点阵)以及64X256点阵显示RAM(GDRAM),显然是要比1602高级!
     2,可以选择8位并行或者是4位串行的操作
     3,可以显示出128列× 64行的内容,可以实现文字与图形混合显示功能、可以自由的去设置光标、显示移位功能、垂直画面旋转功能、反白显示功能、休眠模式等等
    12864液晶模块实物图                     
                                          图1  12864液晶模块实物图
 
 
2)12864液晶接口的说明:
12864液晶屏接口图
                                                        图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)绘图坐标分布图
     12864绘图坐标
                       图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  麦光单片机开发板中液晶连接单片机图
 
有些初学者可能会问? 为什么电路图是这样连接的,读者可以对照上图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) 并行写操作时序图
12864写操作时序图
                                                                图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 模块。
 

上一篇:12864LCD屏的基本原理以及使用方法

下一篇:128*64点阵液晶屏程序设计的教程

杭州精显科技有限公司