三种不同字符/字型的选择编码范围为:
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的地址计数器自动加一,当水平地址=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字节
数据转换日期:
2018-7-2817:
10:
17
------------------------------------------------------------------------------*/
0x40,0x42,0xCC,0x00,0x00,0x40,0x30,0x1E,0x10,0xF0,0x10,0x10,0x18,0x10,0x00,0x00,
0x00,0x00,0x3F,0x10,0x08,0x01,0x01,0x01,0x01,0x7F,0x01,0x01,0x01,0x01,0x00,0x00
}。
charcodeHz_ping[]=