128*64点阵图形液晶显示屏程序设计教程

使用PROTEUS仿真软件中的液晶显示屏(型号AMPIRE12864)探索点阵液晶的编程方式;该型号液晶屏内部无字库,只能自建字模进行字符显示(使用方法与图形显示方式一致);字模可通过“字模提取”软件提取,省去手工建模

的麻烦。

128*64点阵图形液晶显示屏程序设计教程_第1张图片

整体电路图

功能说明:该电路使用AT89C52作控制器,电路左下方为时钟芯片DS1302;用液晶屏显示当前时间、若干汉字、一幅小图等内容;

电路连线:

1)液晶模块:E=P2^0;RW=P2^1;RS=P2^2;CS2=P2^3;CS1=P2^4;RST(复位信号)=5V

数据口D0~D7接单片机P0口;

2)时钟芯片DS1302RST=P3^6;CLK=P1^6;SDA=P1^7;

电路仿真结果如下:

128*64点阵图形液晶显示屏程序设计教程_第2张图片

首先分析下该液晶模块内部控制器的工作原理:

管脚功能:

管脚名称

LEVER

管脚功能描述

VSS

0

电源地

VDD

+5.0V

电源电压

V0

-

液晶显示器驱动电压(在PROTUES仿真软件中可不接)

RS

1/0

RS=0,表示DB7∽DB0为显示数据

RS=1,表示DB7∽DB0为显示指令数据

R/W

1/0

R/W=1,E=1数据被读到DB7∽DB0

R/W=0,E=“1→0”,数据被写到IR或DR

E

1/0

R/W=0,E信号下降沿锁存DB7∽DB0

R/W=1,E=1,DDRAM数据读到DB7∽DB0

DB0~DB7

1/0

数据线

1/0

0:选择芯片(左半屏)信号

1/0

0:选择芯片(右半屏)信号

1/0

复位信号,低电平复位

VOUT

-10V

LCD驱动负电压(在PROTUES仿真软件中可不接)

12864内部功能器件及相关功能:

1.指令寄存器(IR)

IR是用于寄存指令码,与指令寄存器寄存指令相对应。当RS=0时,在E信号下降沿的作用下,指令码写入IR。

2.数据寄存器(DR)

DR是用于寄存数据的,与数据寄存器数据相对应。当RS=1时,在下降沿作用下,图形显示数据写入DR,或在E信号高电平作用下由DR读到DB7∽DB0数据总线。DR和DDRAM之间的数据传输是模块内部自动执行的。

3.忙标志:BF

BF标志提供内部工作情况。BF=1表示模块在内部操作,此时模块不接受外部指令和数据。BF=0时,模块为准备状态,随时可接受外部指令和数据。利用STATUSREAD指令,可以将BF读到DB7总线,检验模块工作状态。

4.显示控制触发器DFF

此触发器是用于模块屏幕显示开和关的控制。DFF=1为开显示(DISPLAYOFF),DDRAM的内容就显示在屏幕上,DFF=0为关显示(DISPLAYOFF)。DDF的状态是指令DISPLAYON/OFF和RST信号控制的。

5.XY地址计数器

XY地址计数器是一个9位计数器。高3位是X地址计数器,低6位为Y地址计数器,XY地址计数器实际上是作为DDRAM的地址指针,X地址计数器为DDRAM的页指针,Y地址计数器为DDRAM的Y地址指针。

X地址(页地址,页的概念迟点会解释)计数器是没有记数功能的,只能用指令设置。

Y地址(列地址)计数器具有循环记数功能,各显示数据写入后,Y地址自动加1,Y地址指针从0到63。

6.显示数据RAM(DDRAM)

DDRAM是存储图形显示数据的。数据为1表示选择显示,数据为0表示选择非显示。DDRAM与地址和显示位置的关系见DDRAM地址表。

7.Z地址计数器

Z地址计数器是一个6位计数器,此计数器具备循环记数功能,它是用于显示行扫描同步。当一行扫描完成,此地址计数器自动加1,指向下一行扫描数据,RST复位后Z地址计数器为0。

Z地址计数器可以用指令DISPLAYSTARTLINE预置。因此,显示屏幕的起始行就由此指令控制,即DDRAM的数据从哪一行开始显示在屏幕的第一行。此模块的DDRAM共64行,屏幕可以循环滚动显示64行。

12864LCD的指令系统

该类液晶显示模块(即KS0108B及其兼容控制驱动器)的指令系统比较简单,总共只有七种。其指令表如表2所示:

指令名称

控制信号

控制代码

R/W

RS

DB7

DB6

DB5

DB4

DB3

DB2

DB1

DB0

显示开关

0

0

0

0

1

1

1

1

1

1/0

显示起始行设置

0

0

1

1

X

X

X

X

X

X

页设置

0

0

1

0

1

1

1

X

X

X

列地址设置

0

0

0

1

X

X

X

X

X

X

读状态

1

0

BUSY

0

ON/OFF

0

0

0

0

写数据

0

1

写数据

读数据

1

1

读数据

1、显示开/关指令

R/WRS

DB7DB6DB5DB4DB3DB2DB1DB0

00

00111111/0

当DB0=1时,LCD显示RAM中的内容;DB0=0时,关闭显示。

2、显示起始行(ROW)设置指令

R/WRS

DB7DB6DB5DB4DB3DB2DB1DB0

00

11显示起始行(0~63)

该指令设置了对应液晶屏最上一行的显示RAM的行号,有规律地改变显示起始行,可以使LCD实现显示滚屏的效果。

3、页(PAGE)设置指令

R/WRS

DB7DB6DB5DB4DB3DB2DB1DB0

00

10111页号(0~7)

显示RAM共64行,分8页,每页8行。

4、列地址(YAddress)设置指令

R/WRS

DB7DB6DB5DB4DB3DB2DB1DB0

00

01显示列地址(0~63)

设置了页地址和列地址,就唯一确定了显示RAM中的一个单元,这样MPU就可以

用读、写指令读出该单元中的内容或向该单元写进一个字节数据。

5、读状态指令

R/WRS

DB7DB6DB5DB4DB3DB2DB1DB0

10

BUSY0ON/OFF0000

该指令用来查询液晶显示模块内部控制器的状态,各参量含义如下:

BUSY:1-内部在工作0-正常状态

ON/OFF:1-显示关闭0-显示打开

:1-正常状态 0-复位状态

在BUSY和状态时,除读状态指令外,其它指令均不对液晶显示模块产生作用。

在对液晶显示模块操作之前要查询BUSY状态,以确定是否可以对液晶显示模块进行操作。

6、写数据指令

R/WRS

DB7DB6DB5DB4DB3DB2DB1DB0

01

写数据

7、读数据指令

R/WRS

DB7DB6DB5DB4DB3DB2DB1DB0

11

读显示数据

读、写数据指令每执行完一次读、写操作,列地址就自动增一。必须注意的是,进行读操作之前,必须有一次空读操作,紧接着再读才会读出所要读的单元中的数据。

12864由两个完全相同的左右半屏拼成,两个半屏的显示通过CS1和CS2来选择,如CS1=0、CS2=1时选择左半屏显示,每页占8行(指令0xb8~0xbf分别指定页0~页7地址);

写入液晶的数据在屏上为纵向显示,如在指定位置(页0第0列)显示12H:

0xb8指定页0

0x40指定列0

0x12送入数据,该数据的最高位对应“该页该列”最下端的点(第0行)

下面以“你”字为例,分析其字模(16*16点阵,占两页位置)

从最左边上半部开始

上页字模0x80,0x40,0xF0,0x2C,0x43,0x20,0x98,0x0F,0x0A,0xE8,0x08,0x88,0x28,0x1C,0x08,0x00

128*64点阵图形液晶显示屏程序设计教程_第3张图片

下页字模0x00,0x00,0x7F,0x00,0x10,0x0C,0x03,0x21,0x40,0x3F,0x00,0x00,0x03,0x1C,0x08,0x00

你可能感兴趣的:(128*64点阵图形液晶显示屏程序设计教程)