Protues仿真12864液晶显示.docx
《Protues仿真12864液晶显示.docx》由会员分享,可在线阅读,更多相关《Protues仿真12864液晶显示.docx(68页珍藏版)》请在冰豆网上搜索。
![Protues仿真12864液晶显示.docx](https://file1.bdocx.com/fileroot1/2023-1/30/47e535c5-e63e-4eb9-a855-c6a6fb2f1fae/47e535c5-e63e-4eb9-a855-c6a6fb2f1fae1.gif)
Protues仿真12864液晶显示
Protues仿真液晶显示
目录
1LCD12864简介2
2LCD12864显示原理6
2.1汉字和英文显示原理6
2.2图形显示7
2.3应用说明8
2.4指令描述9
3软件仿真12
3.1汉字显示12
3.2图形显示17
3.3同时显示多个汉字23
3.4向上滚动显示30
4小结39
1LCD12864简介
(1)ST7920类这种控制器带中文字库,为用户免除了编制字库的麻烦,该控制器的液晶还支持画图方式。
该类液晶支持68时序8位和4位并口以及串口。
(2)KS0108类这种控制器指令简单,不带字库。
支持68时序8位并口。
(3)T6963C类这种控制器功能强大,带西文字库。
有文本和图形两种显示方式。
有文本和图形两个图层,并且支持两个图层的叠加显示。
支持80时序8位并口。
(4)COG类常见的控制器有S6B0724和ST7565,这两个控制器指令兼容。
支持68时序8位并口,80时序8位并口和串口。
COG类液晶的特点是结构轻便,成本低。
ST7920 GND VCC V0 RS R/W E DB0-DB7 PSB RES VOUT BLA BLK
KS0108 GNDVCCV0RSR/WEDB0-DB7CS1CS2RESVOUTBLABLK
T6963C FG GNDVCCV0WRRDDB0-DB7 RSCSRESFS BLA BLK
S6B0724GNDVCCRSWRRDCSDB0-DB7RES BLA BLK
12864是一种图形点阵液晶显示器,它主要由行驱动器/列驱动器及128×64全点阵液晶显示器组成。
可完成图形显示,也可以显示8×4个(16×16点阵)汉字。
管脚名称
LEVER
管脚功能描述
VSS
0
电源地
VDD
+5.0V
电源电压
V0
-
液晶显示器驱动电压
D/I(RS)
H/L
D/I=“H”,表示DB7∽DB0为显示数据
D/I=“L”,表示DB7∽DB0为显示指令数据
R/W
H/L
R/W=“H”,E=“H”数据被读到DB7∽DB0
R/W=“L”,E=“H→L”数据被写到IR或DR
E
H/L
R/W=“L”,E信号下降沿锁存DB7∽DB0
R/W=“H”,E=“H”DDRAM数据读到DB7∽DB0
DB0
H/L
数据线
DB1
H/L
数据线
DB2
H/L
数据线
DB3
H/L
数据线
DB4
H/L
数据线
DB5
H/L
数据线
DB6
H/L
数据线
DB7
H/L
数据线
CS1
H/L
H:
选择芯片(右半屏)信号
CS2
H/L
H:
选择芯片(左半屏)信号
RET
H/L
复位信号,低电平复位
VOUT
-10V
LCD驱动负电压
LED+
-
LED背光板电源
LED-
-
LED背光板电源
在使用12864LCD前先必须了解以下功能器件才能进行编程。
12864内部功能器件及相关功能如下:
1.指令寄存器(IR)
IR是用于寄存指令码,与数据寄存器数据相对应。
当D/I=0时,在E信号下降沿的作用下,指令码写入IR。
2.数据寄存器(DR)
DR是用于寄存数据的,与指令寄存器寄存指令相对应。
当D/I=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的指令系统
模块控制芯片提供两套控制命令,基本指令和扩充指令如下:
指令表1:
(RE=0:
基本指令)
指
指令码
功能
令
RS
R/W
D7
D6
D5
D4
D3
D2
D1
D0
清除
显示
0
0
0
0
0
0
0
0
0
1
将DDRAM填满"20H",并且设定DDRAM的地址计数器(AC)到"00H"
地址
归位
0
0
0
0
0
0
0
0
1
X
设定DDRAM的地址计数器(AC)到"00H",并且将游标移到开头原点位置;这个指令不改变DDRAM的内容
显示状态开/关
0
0
0
0
0
0
1
D
C
B
D=1:
整体显示ON
C=1:
游标ON
B=1:
游标位置反白允许
进入点
设定
0
0
0
0
0
0
0
1
I/D
S
指定在数据的读取与写入时,设定游标的移动方向及指定显示的移位
游标或显示移位控制
0
0
0
0
0
1
S/C
R/L
X
X
设定游标的移动与显示的移位控制位;这个指令不改变DDRAM的内容
功能
设定
0
0
0
0
1
DL
X
RE
X
X
DL=0/1:
4/8位数据
RE=1:
扩充指令操作
RE=0:
基本指令操作
设定CGRAM
地址
0
0
0
1
AC5
AC4
AC3
AC2
AC1
AC0
设定CGRAM地址
设定DDRAM
地址
0
0
1
0
AC5
AC4
AC3
AC2
AC1
AC0
设定DDRAM地址(显示位址)
第一行:
80H-87H
第二行:
90H-97H
读取忙标志和地址
0
1
BF
AC6
AC5
AC4
AC3
AC2
AC1
AC0
读取忙标志(BF)可以确认内部动作是否完成,同时可以读出地址计数器(AC)的值
写数据到RAM
1
0
数据
将数据D7——D0写入到内部的RAM(DDRAM/CGRAM/IRAM/GRAM)
读出RAM的值
1
1
数据
从内部RAM读取数据D7——D0
(DDRAM/CGRAM/IRAM/GRAM)
指令表2:
(RE=1:
扩充指令)
指
指令码
功能
令
RS
R/W
D7
D6
D5
D4
D3
D2
D1
D0
待命
模式
0
0
0
0
0
0
0
0
0
1
进入待命模式,执行其他指令都棵终止
待命模式
卷动地址开关开启
0
0
0
0
0
0
0
0
1
SR
SR=1:
允许输入垂直卷动地址
SR=0:
允许输入IRAM和CGRAM地址
反白
选择
0
0
0
0
0
0
0
1
R1
R0
选择2行中的任一行作反白显示,并可决定反白与否。
初始值R1R0=00,第一次设定为反白显示,再次设定变回正常
睡眠
模式
0
0
0
0
0
0
1
SL
X
X
SL=0:
进入睡眠模式
SL=1:
脱离睡眠模式
扩充
功能
设定
0
0
0
0
1
CL
X
RE
G
0
CL=0/1:
4/8位数据
RE=1:
扩充指令操作
RE=0:
基本指令操作
G=1/0:
绘图开关
设定绘图RAM
地址
0
0
1
0
AC6
0
AC5
0
AC4
AC3
AC3
AC2
AC2
AC1
AC1
AC0
AC0
设定绘图RAM
先设定垂直(列)地址AC6AC5…AC0
再设定水平(行)地址AC3AC2AC1AC0
将以上16位地址连续写入即可
备注:
当IC1在接受指令前,微处理器必须先确认其内部处于非忙碌状态,即读取BF标志时,BF需为零,方可接受新的指令;如果在送出一个指令前并不检查BF标志,那么在前一个指令和这个指令中间必须延长一段较长的时间,即是等待前一个指令确实执行完成。
2、字符显示
带中文字库的128X64-0402B每屏可显示4行8列共32个16×16点阵的汉字,每个显示RAM可显示1个中文字符或2个16×8点阵全高ASCII码字符,即每屏最多可实现32个中文字符或64个ASCII码字符的显示。
带中文字库的128X64-0402B内部提供128×2字节的字符显示RAM缓冲区(DDRAM)。
字符显示是通过将字符显示编码写入该字符显示RAM实现的。
根据写入内容的不同,可分别在液晶屏上显示CGROM(中文字库)、HCGROM(ASCII码字库)及CGRAM(自定义字形)的内容。
三种不同字符/字型的选择编码范围为:
0000~0006H(其代码分别是0000、0002、0004、0006共4个)显示自定义字型,02H~7FH显示半宽ASCII码字符,A1A0H~F7FFH显示8192种GB2312中文字库字形。
字符显示RAM在液晶模块中的地址80H~9FH。
字符显示的RAM的地址与32个字符显示区域有着一一对应的关系,其对应关系如下表所示。
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
2LCD12864显示原理
2.1汉字和英文显示原理
在数字电路中,所有的数据都是以0和1保存的,对LCD控制器进行不同的数据操作,可以得到不同的结果。
对于显示英文操作,由于英文字母种类很少,只需要8位(一字节)即可。
而对于中文,常用却有6000以上,于是我们的DOS前辈想了一个办法,就是将ASCII表的高128个很少用到的数值以两个为一组来表示汉字,即汉字的内码。
而剩下的低128位则留给英文字符使用,即英文的内码。
那么,得到了汉字的内码后,还仅是一组数字,那又如何在屏幕上去显示呢?
这就涉及到文字的字模,字模虽然也是一组数字,但它的意义却与数字的意义有了根本的变化,它是用数字的各位信息来记载英文或汉字的形状,如英文的'A'在字模的记载方式如图1所示:
图1“A”字模图
而中文的“你”在字模中的记载却如图2所示:
图2“你”字模图
根据芯片的不同取模的方式不同,有多种取模方式:
单色点阵液晶字模,横向取模,字节正序,单色点阵液晶字模,横向取模,字节倒序,单色点阵液晶字模,纵向取模,字节正序,单色点阵液晶字模,纵向取模,字节倒序等等。
2.2图形显示
先设垂直地址再设水平地址(连续写入两个字节的资料来完成垂直与水平的坐标地址)
垂直地址范围AC5...AC0
水平地址范围AC3…AC0
绘图RAM的地址计数器(AC)只会对水平地址(X轴)自动加一,当水平地址=0FH时会重新设为00H
但并不会对垂直地址做进位自动加一,故当连续写入多笔资料时,程序需自行判断垂直地址是否需重新设定。
GDRAM的坐标地址与资料排列顺序如下图:
2.3应用说明
用带中文字库的128X64显示模块时应注意以下几点:
①欲在某一个位置显示中文字符时,应先设定显示字符位置,即先设定显示地址,再写入中文字符编码。
②显示ASCII字符过程与显示中文字符过程相同。
不过在显示连续字符时,只须设定一次显示地址,由模块自动对地址加1指向下一个字符位置,否则,显示的字符中将会有一个空ASCII字符位置。
③当字符编码为2字节时,应先写入高位字节,再写入低位字节。
④模块在接收指令前,向处理器必须先确认模块内部处于非忙状态,即读取BF标志时BF需为“0”,方可接受新的指令。
如果在送出一个指令前不检查BF标志,则在前一个指令和这个指令中间必须延迟一段较长的时间,即等待前一个指令确定执行完成。
指令执行的时间请参考指令表中的指令执行时间说明。
⑤“RE”为基本指令集与扩充指令集的选择控制位。
当变更“RE”后,以后的指令集将维持在最后的状态,除非再次变更“RE”位,否则使用相同指令集时,无需每次均重设“RE”位。
2.4指令描述
1、显示开/关设置
CODE:
R/W
D/I
DB7
DB6
DB5
DB4
DB3
DB2
DB1
DB0
L
L
L
L
H
H
H
H
H
H/L
功能:
设置屏幕显示开/关。
DB0=H,开显示;DB0=L,关显示。
不影响显示RAM(DDRAM)中的内容。
2、设置显示起始行
CODE:
R/W
D/I
DB7
DB6
DB5
DB4
DB3
DB2
DB1
DB0
L
L
H
H
行地址(0-63)
功能:
执行该命令后,所设置的行将显示在屏幕的第一行。
显示起始行是由Z地址计数器控制的,该命令自动将A0-A5位地址送入Z地址计数器,起始地址可以是0-63范围内任意一行。
Z地址计数器具有循环计数功能,用于显示行扫描同步,当扫描完一行后自动加一。
3、设置页地址
CODE:
R/W
D/I
DB7
DB6
DB5
DB4
DB3
DB2
DB1
DB0
L
L
H
L
H
H
H
页地址(0-7)
功能:
执行本指令后,下面的读写操作将在指定页内,直到重新设置。
页地址就是DDRAM的行地址,页地址存储在X地址计数器中,A2-A0可表示8页,读写数据对页地址没有影响,除本指令可改变页地址外,复位信号(RST)可把页地址计数器内容清零。
DDRAM地址映像表
Y地址
0
1
2
………………………
61
62
63
DB0
∫ PAGE0
DB7
X=0
DB0
∫ PAGE1
DB7
X=1
∷
∷
∷
∷
DB0
∫ PAGE6
DB7
X=7
DB0
∫ PAGE7
DB7
X=8
4、设置列地址
CODE:
R/W
D/I
DB7
DB6
DB5
DB4
DB3
DB2
DB1
DB0
L
L
L
H
列地址(0-63)
功能:
DDRAM的列地址存储在Y地址计数器中,读写数据对列地址有影响,在对DDRAM进行读写操作后,Y地址自动加一。
5、状态检测
CODE:
R/W
D/I
DB7
DB6
DB5
DB4
DB3
DB2
DB1
DB0
H
L
BF
L
ON/OFF
RET
L
L
L
L
功能:
读忙信号标志位(BF)、复位标志位(RST)以及显示状态位(ON/OFF)。
BF=H:
内部正在执行操作; BF=L:
空闲状态。
RST=H:
正处于复位初始化状态; RST=L:
正常状态。
ON/OFF=H:
表示显示关闭; ON/OFF=L:
表示显示开。
6、写显示数据
CODE:
R/W
D/I
DB7
DB6
DB5
DB4
DB3
DB2
DB1
DB0
L
H
D7
D6
D5
D4
D3
D2
D1
D0
功能:
写数据到DDRAM,DDRAM是存储图形显示数据的,写指令执行后Y地址计数器自动加1。
D7-D0位数据为1表示显示,数据为0表示不显示。
写数据到DDRAM前,要先执行“设置页地址”及“设置列地址”命令。
7、读显示数据
CODE:
R/W
D/I
DB7
DB6
DB5
DB4
DB3
DB2
DB1
DB0
H
H
D7
D6
D5
D4
D3
D2
D1
D0
功能:
从DDRAM读数据,读指令执行后Y地址计数器自动加1。
从DDRAM读数据前要先执行“设置页地址”及“设置列地址”命令。
8、屏幕显示与DDRAM地址映射关系
Y1
Y2
Y3
Y4
…………
Y62
Y63
Y64
X=0
Line0
1/0
1/0
1/0
1/0
…………
1/0
1/0
1/0
DB0
Line1
1/0
1/0
1/0
1/0
…………
1/0
1/0
1/0
DB1
Line2
1/0
1/0
1/0
1/0
…………
1/0
1/0
1/0
DB2
Line3
1/0
1/0
1/0
1/0
…………
1/0
1/0
1/0
DB3
Line4
1/0
1/0
1/0
1/0
…………
1/0
1/0
1/0
DB4
Line5
1/0
1/0
1/0
1/0
…………
1/0
1/0
1/0
DB5
Line6
1/0
1/0
1/0
1/0
…………
1/0
1/0
1/0
DB6
Line7
1/0
1/0
1/0
1/0
…………
1/0
1/0
1/0
DB7
…………
…………
…………
X=7
Line60
1/0
1/0
1/0
1/0
…………
1/0
1/0
1/0
DB4
Line61
1/0
1/0
1/0
1/0
…………
1/0
1/0
1/0
DB5
Line62
1/0
1/0
1/0
1/0
…………
1/0
1/0
1/0
DB6
Line63
1/0
1/0
1/0
1/0
…………
1/0
1/0
1/0
DB7
3软件仿真
3.1汉字显示
在Protues软件中选择所需元件,搭建的电路图如图1所示。
图1仿真硬件原理图
将编写的代码烧写到单片机里,运行液晶显示不正常,如图2所示。
图2运行图
开始我还以为是程序问题,把程序看了又看,改了又改,显示结果还是一样。
后来问了下张勇生,出现这种情况的原因是P0口没接上拉电阻。
因为P0口是开漏的,不管它的驱动能力多大,相当于它是没有电源的,需要外部的电路提供,绝大多数情况下P0口是必需加上拉电阻的。
接上拉电阻后,重新运行这下运行正常了,如图3所示。
图3正常显示
代码如下所示:
#include
#defineLCDLCDDisp_Off0x3e
#defineLCDLCDDisp_On0x3f
#definePage_Add0xb8//页地址
#defineLCDCol_Add0x40//列地址
#defineStart_Line0xC0//行地址
/*****液晶显示器的端口定义*****/
#definedata_oraP0/*液晶数据总线*/
sbitLCDMcs=P2^1;/*片选1*/
sbitLCDScs=P2^2;/*片选2*/
sbitRESET=P2^3;/*复位信号*/
sbitLCDDi=P2^4;/*数据/指令选择*/
sbitLCDRW=P2^5;/*读/写选择*/
sbitLCDEnable=P2^6;/*读/写使能*/
charcodeHz_xu[]=
{
/*------------------------------------------------------------------------------
源文件/文字:
F:
\LD测试仪\液晶\字模提取+排版软件\液晶字模提取\图例\wo.bmp
宽×高(像素):
16×
字模格式/大小:
单色点阵液晶字模,纵向取模,字节倒序/32字节
数据转换日期:
2010-7-2817:
10:
17
------------------------------------------------------------------------------*/
0x40,0x42,0xCC,0x