基于STC12C5A60S2系列1T 8051单片机的带字库液晶显示器LCD12864数据传输并行模式显示32行点x32列点字模的应用
- STC12C5A60S2系列1T 8051单片机管脚图
- STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式及配置
- STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式介绍
- 液晶显示器LCD12864简单介绍一
- 液晶显示器LCD12864简单介绍二
-
- 一、LCD12864点阵型液晶显示器介绍
-
- 1、DDRAM(Data Display Ram)
- 2、CGROM(Character Generation ROM)
- 3、CGRAM(Character Generation RAM)
- 4、GDRAM(Graphic Display RAM)
- 5、HCGROM(Half height Character Generation ROM)
- 6、LCD12864点阵型液晶显示器 DDRAM(Data Display Ram:数据显示随机存储器)、CGROM(Character Generation ROM:字符发生只读存储器)、CGRAM(Character Generation RAM:字符发生随机存储器) 、HCGROM(Half height Character Generation ROM:半宽字符发生只读存储器)各自作用
- 7、LCD12864点阵型液晶显示器 DDRAM(Data Display Ram:数据显示随机存储器)、CGROM(Character Generation ROM:字符发生只读存储器)、CGRAM(Character Generation RAM:字符发生随机存储器) 、HCGROM(Half height Character Generation ROM:半宽字符发生只读存储器)之间的联系
- 二、LCD12864点阵型液晶显示器尺寸图
- 三、LCD12864点阵型液晶显示器示意图
- 四、LCD12864点阵型液晶显示器连接原理图
- 五、LCD12864点阵型液晶显示器引脚功能列表
- 六、LCD12864点阵型液晶显示器读写操作
- 七、LCD12864点阵型液晶显示器内部存储器详细介绍
-
- 1、DDRAM(Data Display Ram:数据显示随机存储器)
-
- (1)、DDRAM是什么?
- (2)、DDRAM有什么作用?
- (3)、DDRAM内存地址
- (4)、DDRAM(Data Display Ram:数据显示随机存储器)与LCD12864点阵型液晶显示器显示位置对应关系
- (5)、DDRAM(Data Display Ram:数据显示随机存储器)内部数据读写
- (6)、单片机驱动LCD12864点阵型液晶显示器内部ST7920芯片给LCD2864点阵型液晶显示器传送数据的模式
- (7)、字符编码在DDRAM中存储的事项说明
-
- <1>、每次对DDRAM的操作单位是一个字,也就是2个字节。当往DDRAM写入数据时,首先写地址,然后连续送入2个字节的数据,先送高字节数据,再送低字节数据。读数据时也是如此,先写地址,然后读出高字节数据,再读出低字节数据(注意:读数据时先假读一次)。
- <2>、显示ASCII码半宽字符时,往每个地址送入2个字节的ASCII编码,对应LCD12864点阵型液晶显示器显示位置就会显示2个半宽字符,左边的为高字节字符,右边的为低字节字符。
- <3>、显示汉字时,汉字编码的2个字节必须存储在同一地址空间中,不能分开放在2个地址存放,否则显示的就不是你想要的字符。每个字中的2个字节自动结合查找字模并显示字符。所以,如果我们往一个地址中写入的是一个汉字的2字节编码就会正确显示该字符,若编码高字节存放在前一地址低字节,编码低字节存放在后一地址高字节,显然他们就不会结合查找字模,而是与各地址相应字节结合查找字模。
- 2、CGROM(Character Generation ROM:字符发生只读存储器)
- 3、CGRAM(Character Generation RAM:字符发生随机存储器)
- 4、GDRAM(Graphic Display RAM:图形显示随机存储器)
- 5、HCGROM(Half height Character Generation ROM:半宽字符发生只读存储器)
- 八、LCD12864点阵型液晶显示器内部ST7920芯片控制指令(提供2套控制指令集,分别是基本指令和扩充指令。)
- 通过液晶显示器LCD12864显示32行点x32列点字模
STC12C5A60S2系列1T 8051单片机管脚图
STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式及配置
STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式介绍
液晶显示器LCD12864简单介绍一
液晶显示器LCD12864简单介绍二
一、LCD12864点阵型液晶显示器介绍
LCD12864点阵型液晶显示器是一种具有4 位或8 位并行、2 线或3线串行多种接口方式,内部可含有或不含有国标一级、二级简体中文字库的点阵型液晶显示器。其中LCD12864点阵型液晶显示器中128表示128列,64表示64行,总共有128x64=8192个点。常见LCD12864点阵型液晶显示器内部控制器以ST7920芯片为主,内置了DDRAM(Data Display Ram:数据显示随机存储器)、CGROM(Character Generation ROM:字符发生只读存储器)、CGRAM(Character Generation RAM:字符发生随机存储器)、GDRAM(Graphic Display RAM:图形显示随机存储器)、HCGROM(Half height Character Generation ROM:半宽字符发生只读存储器)。在此分别介绍LCD12864点阵型液晶显示器内部控制器ST7920芯片中的五种存储器,如下所示。
1、DDRAM(Data Display Ram)
数据显示随机存储器,往里面写啥,屏幕就会显示啥。
2、CGROM(Character Generation ROM)
字符发生只读存储器,里面存储了2M的8192个字符(包括中文、英文字母、数字、符号、ASCII码、日文字符、希腊文)的字模。在LCD12864点阵型液晶显示器界面可用16(行)x16(列)点阵来显示一个中文汉字。
3、CGRAM(Character Generation RAM)
字符发生随机存储器,可以产生128K的字符,用于用户自定义字符,一次可以自定义4个字符。在LCD12864点阵型液晶显示器界面可用16(行)x16(列)点阵来显示。
4、GDRAM(Graphic Display RAM)
图形显示随机存储器,里面存储了一块16384个点的文字图形区域,用于写文字绘图,往里面写啥绘啥,屏幕就会显示啥,它与DDRAM(数据显示随机存储器)的区别在于,往DDRAM(数据显示随机存储器)中写的数据是字符的编码,字符的显示先是在CGROM(字符发生只读存储器)中找到字模,然后映射到屏幕上,而往GDRAM(图形显示随机存储器)中写的数据是图形的点阵信息,每个点用1bit来保存其显示与否。
5、HCGROM(Half height Character Generation ROM)
半宽字符发生只读存储器,里面存储了16K的126个字符,就是字母、数字、符号。在LCD12864点阵型液晶显示器界面可用16(行)x8(列)点阵来显示一个英文字母或数字或符号。
6、LCD12864点阵型液晶显示器 DDRAM(Data Display Ram:数据显示随机存储器)、CGROM(Character Generation ROM:字符发生只读存储器)、CGRAM(Character Generation RAM:字符发生随机存储器) 、HCGROM(Half height Character Generation ROM:半宽字符发生只读存储器)各自作用
(1)、DDRAM(Data Display Ram:数据显示随机存储器)
把读到的数据(包括中文、英文字母、数字、符号、ASCII码、日文字符、希腊文以及自定义字符)显示到LCD12864点阵型液晶显示器界面。
(2)、CGROM(Character Generation ROM:字符发生只读存储器)
存储了中文、英文字母、数字、符号、ASCII码、日文字符、希腊文字符的字模编码,是液晶屏出厂时被固化在控制芯片中,用户不能改变其中的存储内容,只能读取调用。
(3)、CGRAM(Character Generation RAM:字符发生随机存储器)
留给用户存储自定义的字模编码。
(4)、HCGROM(Half height Character Generation ROM:半宽字符发生只读存储器)
存储英文字母、数字、符号的字模编码。
7、LCD12864点阵型液晶显示器 DDRAM(Data Display Ram:数据显示随机存储器)、CGROM(Character Generation ROM:字符发生只读存储器)、CGRAM(Character Generation RAM:字符发生随机存储器) 、HCGROM(Half height Character Generation ROM:半宽字符发生只读存储器)之间的联系
打个比方,CGRAM(Character Generation RAM:字符发生随机存储器)和CGROM(Character Generation ROM:字符发生只读存储器)中存储的字模信息相当于厨房中的食品,CGRAM(Character Generation RAM:字符发生随机存储器)是用户自行制作的菜肴,CGROM(Character Generation ROM:字符发生只读存储器)是厨房中现成的熟食,这些食品都要通过托盘转移一下,才能送到餐桌上食用。这类似于LCD12864点阵型液晶显示器界面要显示字符,先从CGROM(Character Generation ROM:字符发生只读存储器)和CGRAM(Character Generation RAM:字符发生随机存储器)读取到字模编码,再写入DDRAM(Data Display Ram:数据显示随机存储器)中,经如上中转以后,LCD12864点阵型液晶显示器界面在相应位置才显示出字符
二、LCD12864点阵型液晶显示器尺寸图
三、LCD12864点阵型液晶显示器示意图
说明:由上图可知,LCD12864点阵型液晶显示器有128(列)x64(行),共有128x64=8192个点,可分左半屏(或上半屏)、右半屏(或下半屏),左半屏(或上半屏)对应DDRAM(Data Display Ram:数据显示随机存储器)内存地址是80H-87H、90H-97H、A0H-A7H、B0H-B7H,右半屏(或下半屏)对应DDRAM(Data Display Ram:数据显示随机存储器)内存地址是88H-8FH、98H-9FH、A8H-AFH、B8H-BFH,分四大行,每一大行有一大页,共四大页,每一大页有两小页(小页地址:从0xb8到0xa5),共八小页,每一小页有八行,共六十四行。
四、LCD12864点阵型液晶显示器连接原理图
1、第一种LCD12864点阵型液晶显示器连接原理图(LCD12864点阵型液晶显示器引脚功能说明对应下面第一种LCD12864点阵型液晶显示器引脚功能列表)
2、第二种LCD12864点阵型液晶显示器连接原理图(LCD12864点阵型液晶显示器引脚功能说明对应下面第二种LCD12864点阵型液晶显示器引脚功能列表(常用))
五、LCD12864点阵型液晶显示器引脚功能列表
1、第一种LCD12864点阵型液晶显示器引脚功能列表
2、第二种LCD12864点阵型液晶显示器引脚功能列表(常用)
六、LCD12864点阵型液晶显示器读写操作
七、LCD12864点阵型液晶显示器内部存储器详细介绍
1、DDRAM(Data Display Ram:数据显示随机存储器)
(1)、DDRAM是什么?
DDRAM(Data Display Ram):数据显示随机存储器
(2)、DDRAM有什么作用?
把存进来的数据显示到LCD12864点阵型液晶显示器界面上
(3)、DDRAM内存地址
说明:红色部分的DDRAM内存地址是LCD12864点阵型液晶显示器左半屏(或上半屏)显示数据的DDRAM内存地址,棕色部分的DDRAM内存地址是LCD12864点阵型液晶显示器右半屏(或下半屏)显示数据的DDRAM内存地址。一般用左半屏(或上半屏)前两行DDRAM内存地址(即80H-87H与90H-97H)和右半屏(或下半屏)前两行DDRAM内存地址(即88H-8FH与98H-9FH) 作为LCD12864点阵型液晶显示器显示数据的DDRAM内存地址,如图所示。(切记不可在左半屏(或上半屏)使用右半屏(或下半屏)显示数据的DDRAM内存地址来显示数据,也不可在右半屏(或下半屏)使用左半屏(或上半屏)显示数据的DDRAM内存地址来显示数据。)
(4)、DDRAM(Data Display Ram:数据显示随机存储器)与LCD12864点阵型液晶显示器显示位置对应关系
<1>、DDRAM(Data Display Ram:数据显示随机存储器)存储汉字与LCD12864点阵型液晶显示器显示位置对应关系
说明:上图红色区域表示LCD12864点阵型液晶显示器其中一个16(行)x16(列)点阵。如果DDRAM(Data Display Ram:数据显示随机存储器)内存地址存储的是汉字,那么需要使用LCD12864点阵型液晶显示器16(行)x16(列)点阵来显示,相当于占用LCD12864点阵型液晶显示器一大行中一大页里的16(行)x16(列)(结合上图红色区域与字符“你”来理解),即两小页中的16(行)x16(列)(结合上图红色区域与字符“你”来理解),那么半个汉字就是占用一小页中的8(行)x16(列)(结合上图字符“你”来理解)。由此可知:LCD12864点阵型液晶显示器每一个16(行)x16(列)点阵分别对应着DDRAM(Data Display Ram:数据显示随机存储器)每一个内存地址(如上图红色区域与80H所示)。
<2>、DDRAM(Data Display Ram:数据显示随机存储器)存储半宽字符(比如:英文字母、数字、符号、ASCII码、日文字符、希腊文字符)与LCD12864点阵型液晶显示器显示位置对应关系
说明:上图红色区域表示LCD12864点阵型液晶显示器其中一个16(行)x8(列)点阵。如果DDRAM(Data Display Ram:数据显示随机存储器)内存地址存储的是英文字母(或者是数字、符号、ASCII码、日文字符、希腊文字符),那么需要使用LCD12864点阵型液晶显示器16(行)x8(列)点阵来显示,相当于占用LCD12864点阵型液晶显示器一大行中一大页里的16(行)x8(列)(结合上图红色区域与英文字母“A”来理解),即两小页中的16(行)x8(列)(结合上图红色区域与英文字母“A”来理解),那么半个英文字母就是占用一小页中的8(行)x8(列)(结合上图英文字母“A”来理解)。由此可知:LCD12864点阵型液晶显示器每一个16(行)x8(列)点阵分别对应着DDRAM(Data Display Ram:数据显示随机存储器)每一个内存地址(如上图红色区域与80H所示)。
(5)、DDRAM(Data Display Ram:数据显示随机存储器)内部数据读写
DDRAM(Data Display Ram:数据显示随机存储器)内部存储的数据是字符的编码,可以写入的编码有ASCII码、GB2312码、BIG5码等。所有数据读写都是先取DDRAM(Data Display Ram:数据显示随机存储器)内存地址,然后把数据写到DDRAM(Data Display Ram:数据显示随机存储器)内存地址上或从DDRAM(Data Display Ram:数据显示随机存储器)内存地址上把数据读出来。
<1>、单片机从LCD12864点阵型液晶显示器内部ST7920芯片的DDRAM(Data Display Ram:数据显示随机存储器)读取数据
从DDRAM(Data Display Ram:数据显示随机存储器)内存地址上读数据时,在基本指令集(使用指令0x30开启)下先写DDRAM(Data Display Ram:数据显示随机存储器)内存地址,然后假读一次,接着连续读取2个字节的数据到LCD12864点阵型液晶显示器内部ST7920芯片的CGRAM(即字符生成随机存储器)内存地址上,读完之后地址指针自动加一,跳到下一个字的地址,若需要读下一个字的内容,只需再执行读取2个字节的数据到LCD12864点阵型液晶显示器内部ST7920芯片的DDRAM(Data Display Ram:数据显示随机存储器)内存地址上。这里的假读需要注意,不光是读CGRAM需要假读,读其他的DDRAM、GDRAM都需要先假读一次,之后的读才是真读,假读就是读一次数据,但不存储该数据,也就是说送地址之后第一次读的数据时是错误的,之后的数据才是正确的。(dummy为假读)
<2>、单片机写数据到LCD12864点阵型液晶显示器内部ST7920芯片的DDRAM(Data Display Ram:数据显示随机存储器)
对DDRAM(Data Display Ram:数据显示随机存储器)写数据时,确保在基本指令集下(使用指令0x30开启),先写DDRAM(Data Display Ram:数据显示随机存储器)内存地址,之后连续写入2个字节的数据到LCD12864点阵型液晶显示器内部ST7920芯片的DDRAM(Data Display Ram:数据显示随机存储器)上。
(6)、单片机驱动LCD12864点阵型液晶显示器内部ST7920芯片给LCD2864点阵型液晶显示器传送数据的模式
当PSB脚接高电平时,LCD12864点阵型液晶显示器内部ST7920芯片将进入并行模式,若功能设定指令寄存器中的寄存器单元DL=1,单片机结合RS(数据/指令选择端)、R/W(读/写选择端)、EN(使能端)、D0-D7输出输入引脚来驱动LCD12864点阵型液晶显示器内部ST7920芯片以8位数据形式给LCD2864点阵型液晶显示器传送数据,若功能设定指令寄存器中的寄存器单元DL=0,单片机结合RS(数据/指令选择端)、R/W(读/写选择端)、EN(使能端)、D0-D7输出输入引脚来驱动LCD12864点阵型液晶显示器内部ST7920芯片以4位数据形式给LCD2864点阵型液晶显示器传送数据。当PSB脚接接低电平时,LCD12864点阵型液晶显示器内部ST7920芯片将进入串行模式,若功能设定指令寄存器中的寄存器单元DL=1,单片机结合RS(数据/指令选择端)、R/W(读/写选择端)、EN(使能端)、D0-D7输出输入引脚来驱动LCD12864点阵型液晶显示器内部ST7920芯片以8位数据形式给LCD12864点阵型液晶显示器传送数据,若功能设定指令寄存器中的寄存器单元DL=0,单片机结合RS(数据/指令选择端)、R/W(读/写选择端)、EN(使能端)、D0-D7输出输入引脚来驱动LCD12864点阵型液晶显示器内部ST7920芯片以4位数据形式给LCD12864点阵型液晶显示器传送数据。
<1>、单片机驱动LCD12864点阵型液晶显示器内部ST7920芯片以8位数据并行总线模式给LCD12864点阵型液晶显示器传送数据的时序图
<2>、单片机驱动LCD12864点阵型液晶显示器内部ST7920芯片以4位数据并行总线模式给LCD12864点阵型液晶显示器传送数据的时序图
<3>、单片机驱动LCD12864点阵型液晶显示器内部ST7920芯片以串行总线模式给LCD12864点阵型液晶显示器传送数据的时序图
(7)、字符编码在DDRAM中存储的事项说明
<1>、每次对DDRAM的操作单位是一个字,也就是2个字节。当往DDRAM写入数据时,首先写地址,然后连续送入2个字节的数据,先送高字节数据,再送低字节数据。读数据时也是如此,先写地址,然后读出高字节数据,再读出低字节数据(注意:读数据时先假读一次)。
<2>、显示ASCII码半宽字符时,往每个地址送入2个字节的ASCII编码,对应LCD12864点阵型液晶显示器显示位置就会显示2个半宽字符,左边的为高字节字符,右边的为低字节字符。
<3>、显示汉字时,汉字编码的2个字节必须存储在同一地址空间中,不能分开放在2个地址存放,否则显示的就不是你想要的字符。每个字中的2个字节自动结合查找字模并显示字符。所以,如果我们往一个地址中写入的是一个汉字的2字节编码就会正确显示该字符,若编码高字节存放在前一地址低字节,编码低字节存放在后一地址高字节,显然他们就不会结合查找字模,而是与各地址相应字节结合查找字模。
2、CGROM(Character Generation ROM:字符发生只读存储器)
(1)、CGROM是什么?
CGROM(Character Generation ROM):字符发生只读存储器
(2)、CGROM有什么作用?
将存储的字符(包括中文、英文、数字、符号、ASCII码、日文字符、希腊文)供给LCD12864点阵型液晶显示器读取到界面上显示
(3)、CGROM存储的GB字符列表
说明:CGROM存储器(字符生成只读存储器)存储的字符列表中字符码A140H〜D75FH为BIG5(大五码,包括标点符号、希腊字母及特殊符号。),字符码A1A0H〜F7FFH为GB(国标,包括中文、英文、数字、符号、ASCII码、日文字符、希腊文)。
(4)、CGROM内部数据读写
CGROM内部存储的数据是中文、英文、数字、符号、ASCII码、日文字符、希腊文字符的编码,所有的数据读写都是先送地址,然后进行读写。
<1>、单片机从LCD12864点阵型液晶显示器内部ST7920芯片的CGROM读取数据
<2>、单片机写数据到LCD12864点阵型液晶显示器内部ST7920芯片的CGROM
3、CGRAM(Character Generation RAM:字符发生随机存储器)
(1)、CGRAM是什么?
CGRAM(Character Generation RAM):字符发生随机存储器
(2)、CGRAM有什么作用?
将存储用户自定义的字符供给LCD12864点阵型液晶显示器读取到界面上显示
(3)、CGRAM存储自定义字符地址列表
说明:CGRAM(即字符生成随机存储器)可以自定义4个字符,分别存储在0x40、0x50、0x60、0x70的CGRAM(即字符生成随机存储器)内存地址上,要在LCD12864点阵型液晶显示器界面显示,只需把这4个自定义字符分别对应写进DDRAM(Data Display Ram:数据显示随机存储器)内存地址0000H、0002H、 0004H、0006H即可。而上图只在CGRAM(即字符生成随机存储器)中自定义2个字符的CGRAM(即字符生成随机存储器)空间画出,另外还有2个。由此可以看出CGRAM(即字符生成随机存储器)内部自定义字符都是用16(行)x16(列)点阵来显示,每一行使用2个字节,则一个自定义字符占用空间是32字节。
(4)、CGRAM内部数据读写
读写之前先写地址,写CGRAM的指令为0x40+地址,地址每次做加一变化。
<1>、单片机从LCD2864点阵型液晶显示器内部ST7920芯片的CGRAM读取数据
先写CGRAM(即字符生成随机存储器)中内存首地址0x40,然后假读一次,接着连续读取2个字节的数据到LCD12864点阵型液晶显示器内部ST7920芯片的CGRAM(即字符生成随机存储器)内存地址0x40上,直到在LCD12864点阵型液晶显示器内部ST7920芯片的CGRAM(即字符生成随机存储器)内存地址0x40上读完32个字节的数据为止。
<2>、单片机写数据到LCD12864点阵型液晶显示器内部ST7920芯片的CGRAM
先写CGRAM(即字符生成随机存储器)中内存首地址0x40,接着连续写入2个字节的数据到LCD12864点阵型液晶显示器内部ST7920芯片的CGRAM(即字符生成随机存储器)内存地址0x40,直到在LCD12864点阵型液晶显示器内部ST7920芯片的CGRAM(即字符生成随机存储器)内存地址0x40上写完32个字节的数据为止。例如:取CGRAM(即字符生成随机存储器)中第一个字符内存首地址0x40,先写入2个字节的数据到LCD12864点阵型液晶显示器内部ST7920芯片的CGRAM(即字符生成随机存储器)内存地址0x40上,之后地址指针每次会自动加一,跳到下一行的地址,再写入2个字节的数据到LCD12864点阵型液晶显示器内部ST7920芯片的CGRAM(即字符生成随机存储器)内存地址0x40上,直到在LCD12864点阵型液晶显示器内部ST7920芯片的CGRAM(即字符生成随机存储器)内存地址0x40上写完32个字节的数据为止。
4、GDRAM(Graphic Display RAM:图形显示随机存储器)
(1)、GDRAM是什么?
GDRAM(Graphic Display RAM):图形显示随机存储器
(2)、GDRAM有什么作用?
把存进来的数据显示到LCD12864点阵型液晶显示器界面上
(3)、GDRAM坐标位址列表
说明:LCD12864点阵型液晶显示器内部ST7920芯片的GDRAM(Graphic Display RAM:图形显示随机存储器)内存地址本来可供给LCD12864点阵型液晶显示器显示界面绘制32行x256列的图像,但LCD12864点阵型液晶显示器内在结构被分成了上下两屏显示,上半屏(左半屏)是32行x128列,下半屏(右半屏)是32行x128列。
(4)、LCD12864点阵型液晶显示器内部ST7920芯片的GDRAM内存地址与LCD12864点阵型液晶显示器显示位址对应关系
说明:LCD12864点阵型液晶显示器内部ST7920芯片的GDRAM(Graphic Display RAM:图形显示随机存储器)内存地址本来可供LCD12864点阵型液晶显示器显示界面绘制32行x256列的图像,但LCD12864点阵型液晶显示器内在结构被分成了上下两屏显示,上半屏(左半屏)是32行x128列,下半屏(右半屏)是32行x128列。由上图可知:LCD12864点阵型液晶显示器内部ST7920芯片的GDRAM(Graphic Display RAM:图形显示随机存储器)内存地址把LCD12864点阵型液晶显示器显示界面分成两种坐标来显示图像,分别是水平坐标(列地址或水平地址X)与垂直坐标(行地址或垂直地址Y)。其中水平坐标(列地址或水平地址X)范围为:00H-15H,垂直坐标(行地址或垂直地址Y)范围为00H-31H。因LCD12864点阵型液晶显示器内在结构被分成了上下两屏显示,那么水平坐标(列地址或水平地址X)上半屏坐标范围为:00H-07H,下半屏坐标范围为:08H-15H,而垂直坐标(行地址或垂直地址Y)上下半屏坐标范围一样,都为00H-31H。并且水平坐标(列地址或水平地址X)上每一个坐标X表示16列(或16个点),而垂直坐标(行地址或垂直地址Y)上的每一个坐标Y表示1行。
说明:LCD12864点阵型液晶显示器内部ST7920芯片的GDRAM(Graphic Display RAM:图形显示随机存储器)内存地址本来可供LCD12864点阵型液晶显示器显示界面绘制32行x256列的图像,但LCD12864点阵型液晶显示器内在结构被分成了上下两屏显示,上半屏(左半屏)是32行x128列,下半屏(右半屏)是32行x128列。由上图可知:LCD12864点阵型液晶显示器内部ST7920芯片的GDRAM(Graphic Display RAM:图形显示随机存储器)内存地址把LCD12864点阵型液晶显示器显示界面分成两种坐标来显示图像,分别是水平坐标(列地址或水平地址X)与垂直坐标(行地址或垂直地址Y)。其中水平坐标(列地址或水平地址X)范围为:00H-0FH,垂直坐标(行地址或垂直地址Y)范围为00H-1FH。因LCD12864点阵型液晶显示器内在结构被分成了上下两屏显示,那么水平坐标(列地址或水平地址X)上半屏坐标范围为:00H-07H,下半屏坐标范围为:08H-0FH,而垂直坐标(行地址或垂直地址Y)上下半屏坐标范围一样,都为00H-1FH。并且水平坐标(列地址或水平地址X)上每一个坐标X表示16列(或16个点),而垂直坐标(行地址或垂直地址Y)上的每一个坐标Y表示1行。
(5)、GDRAM内部数据读写
读写GDRAM时一次最少写2个字节,一次最少读2个字节。
<1>、单片机从LCD12864点阵型液晶显示器内部ST7920芯片的GDRAM读取数据
开启扩展指令集(即0x36),写坐标(写坐标指令:0x80+坐标),先写垂直坐标(行地址或垂直地址Y),即0x80+Y,再写水平坐标(列地址或水平地址X),即0x80+X,且假读一次,最后连续读2字节的数据,先读高字节后读低字节。并且GDRAM(Graphic Display RAM:图形显示随机存储器)的地址计数器(即AC)只会对水平坐标(列地址或水平地址X)自动加1,垂直坐标(行地址或垂直地址Y)要用数据循环写入。单片机从LCD12864点阵型液晶显示器内部ST7920芯片的GDRAM读取数据时序图如下所示。
<2>、单片机写数据到LCD12864点阵型液晶显示器内部ST7920芯片的GDRAM
先开启扩展指令集(即0x36),然后写坐标(即写坐标指令:0x80+坐标),这里的坐标分有2个,分别是水平坐标(列地址或水平地址X)与垂直坐标(行地址或垂直地址Y)。上图中水平坐标(列地址或水平地址X)就是00H-0FH(上半屏坐标范围为:00H-07H,下半屏坐标范围为:08H-0FH。),垂直坐标(行地址或垂直地址Y)就是00H-1FH垂直坐标(上下半屏坐标范围一样,都为00H~1FH。)。写数据时,先写垂直坐标(行地址或垂直地址Y),即0x80+Y,再写水平坐标(列地址或水平地址X),即0x80+X,也就是连续写入两个坐标,然后再连续写入2个字节的数据,并且GDRAM(Graphic Display RAM:图形显示随机存储器)的地址计数器(即AC)只会对水平坐标(列地址或水平地址X)自动加1,垂直坐标(行地址或垂直地址Y)要用数据循环写入。单片机写数据到LCD12864点阵型液晶显示器内部ST7920芯片的GDRAM时序图如下所示。
5、HCGROM(Half height Character Generation ROM:半宽字符发生只读存储器)
(1)、HCGROM是什么?
HCGROM(Half height Character Generation ROM):半宽字符发生只读存储器
(2)、HCGROM有什么作用?
将存储的字符(包括英文、数字、符号)供给LCD12864点阵型液晶显示器读取到界面上显示
(3)、HCGROM字符列表
(4)、HCGROM数据读写
<1>、单片机从LCD12864点阵型液晶显示器内部ST7920芯片的HCGROM读取数据
<2>、单片机写数据到LCD12864点阵型液晶显示器内部ST7920芯片的HCGROM
八、LCD12864点阵型液晶显示器内部ST7920芯片控制指令(提供2套控制指令集,分别是基本指令和扩充指令。)
1、当功能设定寄存器的寄存器单元RE=0时,LCD12864点阵型液晶显示器内部ST7920芯片执行基本指令集,基本指令集列表如下。
说明:当LCD12864点阵型液晶显示器内部ST7920芯片在接受指令前,微处理器必须先确认LCD12864点阵型液晶显示器内部ST7920芯片是否处于非忙碌状态,即读取BF 标志时BF需为0,方可接受新的指令;如果在送出一个指令前并不检查BF标志,那么在前一个指令和这个指令中间必须延迟一段较长的时间,即是等待前一个指令确实执行完成。“RE”为基本指令集与扩充指令集的选择控制位,当变更“RE”位后,往后的指令集将维持在最后的状态,除非再次变更“RE”位,否则使用相同指令集时,不需每次重设“RE”位。
(1)、清除显示
功能:将DDRAM 填满“20H”(空格),把DDRAM 地址计数器调整“00H”,重新进入点设定,将I/D设为“1”,光标右移,AC加1。
(2)、地址归位功能:把DDRAM 地址计数器调整为“00H”,光标回原点,该功能不影响显示DDRAM。
(3)、输入点设置
功能:设定光标移动方向,并指定整体显示是否移动。I/D=1 ,光标右移,AC自动加1; I/D=0 ,光标左移,AC自动减1。S=1 且DDRAM为写状态:整体显示移动,方向由I/D决定(I/D=1,整体左移,I/D=0,整体右移。),S=0 或DDRAM 为读状态:整体显示不移动。
(4)、显示状态开/关
功能:D=1:整体显示ON ; D=0:整体显示OFF。C=1: 光标显示ON ; C=0:光标显示OFF。B=1:光标位置反白且闪烁 ; B=0:光标位置不反白闪烁。
(5)、显示开/关设置功能:该功能适用于以控制芯片KS0108为主的LCD12864点阵型液晶显示器(比如:Proteus仿真电路中的AMPIRE12864点阵型液晶显示器仿真元件)。由上图可知:当DB0=0时,即0x3E,关显示;当DB0=1时,即0x3F,开显示,让LCD12864点阵型液晶显示器显示内容。
(6)、显示起始行设置
功能:该功能适用于以控制芯片KS0108为主的LCD12864点阵型液晶显示器(比如:Proteus仿真电路中的AMPIRE12864点阵型液晶显示器仿真元件)。由上图可知:DDRAM(Data Display Ram:数据显示随机存储器)起始行地址是0xC0,对应LCD12864点阵型液晶显示器第0小行,而DDRAM(Data Display Ram:数据显示随机存储器)终止行地址是0xFF,对应LCD12864点阵型液晶显示器第63小行,由此可知:DDRAM(Data Display Ram:数据显示随机存储器)设置行地址范围为:0xC0-0xFF,分别对应着LCD12864点阵型液晶显示器第0小行到第63小行。
(7)、页地址(X地址)设置
功能:该功能适用于以控制芯片KS0108为主的LCD12864点阵型液晶显示器(比如:Proteus仿真电路中的AMPIRE12864点阵型液晶显示器仿真元件)。由上图可知:DDRAM(Data Display Ram:数据显示随机存储器)首页地址(X地址)是0xB8,对应LCD12864点阵型液晶显示器第0小页,而DDRAM(Data Display Ram:数据显示随机存储器)终止页地址是0xBF,对应LCD12864点阵型液晶显示器第7小页,由此可知:DDRAM(Data Display Ram:数据显示随机存储器)设置页地址范围为:0xB8-0xBF,分别对应着LCD12864点阵型液晶显示器第0小页到第7小页 。
(8)、列地址(Y地址)设置
功能:该功能适用于以控制芯片KS0108为主的LCD12864点阵型液晶显示器(比如:Proteus仿真电路中的AMPIRE12864点阵型液晶显示器仿真元件)。由上图可知:DDRAM(Data Display Ram:数据显示随机存储器)首列地址(X地址)是0x40,对应LCD12864点阵型液晶显示器第0小列,而DDRAM(Data Display Ram:数据显示随机存储器)终止列地址是0x7F,对应LCD12864点阵型液晶显示器第63小列,由此可知:DDRAM(Data Display Ram:数据显示随机存储器)设置列地址范围为:0x40-0x7F,分别对应着LCD12864点阵型液晶显示器第0小列到第63小列。
(9)、光标或显示移位显示控制
功能:S/C:光标左/右移动,AC减/加1。R/L:整体显示左/右移动,光标跟随移动,AC值不变。
(10)、功能设定
功能:DL=1: 8位控制接口; DL=0: 4位控制接口。RE=1: 扩充指令集动作; RE=0: 基本指令集动作。
(11)、设定CGRAM地址
功能:设定CGRAM地址到地址计数器(AC),需确定扩充指令中SR=0(卷动地址或RAM地址选择)。
(12)、设定DDRAM地址
功能:设定DDRAM地址到地址计数器(AC)
(13)、读取忙碌状态(BF)和地址
功能:读取忙碌状态(BF)可以确认内部动作是否完成,同时可以读出地址计数器(AC)的值,当BF=1,表示内部忙碌中,此时不可下指令,需等BF=0时,才可下新指令。
(14)、写数据到DDRAM/CGRAM/GDRAM
功能:单片机写数据到LCD12864点阵型液晶显示器内部ST7920芯片的DDRAM/CGRAM/GDRAM,每个RAM地址都要连续写入两个字节的数据。
(15)、从DDRAM/CGRAM/GDRAM读取数据
功能:从LCD12864点阵型液晶显示器内部ST7920芯片的DDRAM/CGRAM/GDRAM,当设定地址指令后,若需读取数据时,需先执行一次空的读数据,才会读取到正确数据,第二次读取时则不需要,除非又下设定地址指令。
2、当功能设定寄存器的寄存器单元RE=1时,LCD12864点阵型液晶显示器内部ST7920芯片执行扩充指令集,扩充指令集列表如下。
说明:当LCD12864点阵型液晶显示器内部ST7920芯片在接受指令前,微处理器必须先确认LCD12864点阵型液晶显示器内部ST7920芯片是否处于非忙碌状态,即读取BF 标志时BF需为0,方可接受新的指令;如果在送出一个指令前并不检查BF标志,那么在前一个指令和这个指令中间必须延迟一段较长的时间,即是等待前一个指令确实执行完成。“RE”为基本指令集与扩充指令集的选择控制位,当变更“RE”位后,往后的指令集将维持在最后的状态,除非再次变更“RE”位,否则使用相同指令集时,不需每次重设“RE”位。
(1)、待机模式
功能:进入待机模式,执行其它命令都可终止待机模式。
(2)、设置卷动/IRAM地址功能:SR=1:允许输入卷动地址;SR=0:允许设定CGRAM地址(基本指令)或IRAM地址(扩充指令)。
(3)、反白选择功能:当R1,R0 初值分别为0时,选择LCD12864点阵型液晶显示器四行中的任一行作反白显示,并可决定反白与否。第一次设定为反白显示,再次设定时为正常显示。
(4)、睡眠模式功能:
功能:SL=1:脱离睡眠模式; SL=0:进入睡眠模式。
(5)、扩充功能设定功能:
DL=1:8位控制接口;DL=0:4位控制接口,RE=1:扩充指令集动作;RE=0:基本指令集动作,G=1:绘图显示ON; G=0:绘图显示OFF。
(6)、卷动地址设定功能:
SR=1: AC5-AC0为垂直卷动地址,SR=0:AC3~AC0为 ICON RAM位址。
(7)、设定CGRAM地址
功能:设定GDRAM地址到地址计数器(AC),先设垂直地址,再设水平地址,即连续写入两个字节的坐标地址,垂直地址范围AC6~AC0,水平地址范围AC3-AC0。
通过液晶显示器LCD12864显示32行点x32列点字模
main.c
#include "STC12C5A60S2.h"
#include "LCD12864.h"
#include "ChineseCharacterLibrary.h"
#define uchar unsigned char//自定义无符号字符型为uchar
#define uint unsigned int//自定义无符号整数型为uint
void main()//主函数
{
LCD12864Init();//液晶显示器初始化函数
LCD12864ClearScreen();//液晶显示器LCD12864设置清屏函数
// LCD12864Display16Bitx16BitFontMolds(1,0,ChineseCharacterArray0Of16Row2Column);//液晶显示器LCD12864显示16行点x16列点字模函数 液晶显示器LCD12864的上半屏第一大行第0显示位置显示“广”
// LCD12864Display16Bitx16BitFontMolds(1,1,ChineseCharacterArray1Of16Row2Column);//液晶显示器LCD12864显示16行点x16列点字模函数 液晶显示器LCD12864的上半屏第一大行第1显示位置显示“东”
// LCD12864Display16Bitx16BitFontMolds(1,2,ChineseCharacterArray2Of16Row2Column);//液晶显示器LCD12864显示16行点x16列点字模函数 液晶显示器LCD12864的上半屏第一大行第2显示位置显示“安”
// LCD12864Display16Bitx16BitFontMolds(1,3,ChineseCharacterArray3Of16Row2Column);//液晶显示器LCD12864显示16行点x16列点字模函数 液晶显示器LCD12864的上半屏第一大行第3显示位置显示“胜”
// LCD12864Display16Bitx16BitFontMolds(1,4,ChineseCharacterArray4Of16Row2Column);//液晶显示器LCD12864显示16行点x16列点字模函数 液晶显示器LCD12864的上半屏第一大行第4显示位置显示“医”
// LCD12864Display16Bitx16BitFontMolds(1,5,ChineseCharacterArray5Of16Row2Column);//液晶显示器LCD12864显示16行点x16列点字模函数 液晶显示器LCD12864的上半屏第一大行第5显示位置显示“疗”
// LCD12864Display16Bitx16BitFontMolds(1,6,ChineseCharacterArray6Of16Row2Column);//液晶显示器LCD12864显示16行点x16列点字模函数 液晶显示器LCD12864的上半屏第一大行第6显示位置显示“设”
// LCD12864Display16Bitx16BitFontMolds(1,7,ChineseCharacterArray7Of16Row2Column);//液晶显示器LCD12864显示16行点x16列点字模函数 液晶显示器LCD12864的上半屏第一大行第7显示位置显示“备”
// LCD12864Display16Bitx16BitFontMolds(2,0,ChineseCharacterArray8Of16Row2Column);//液晶显示器LCD12864显示16行点x16列点字模函数 液晶显示器LCD12864的上半屏第二大行第0显示位置显示“科”
// LCD12864Display16Bitx16BitFontMolds(2,1,ChineseCharacterArray9Of16Row2Column);//液晶显示器LCD12864显示16行点x16列点字模函数 液晶显示器LCD12864的上半屏第二大行第1显示位置显示“技”
// LCD12864Display16Bitx16BitFontMolds(2,2,ChineseCharacterArrayAOf16Row2Column);//液晶显示器LCD12864显示16行点x16列点字模函数 液晶显示器LCD12864的上半屏第二大行第2显示位置显示“精”
// LCD12864Display16Bitx16BitFontMolds(2,3,ChineseCharacterArrayBOf16Row2Column);//液晶显示器LCD12864显示16行点x16列点字模函数 液晶显示器LCD12864的上半屏第二大行第3显示位置显示“华”
// LCD12864Display16Bitx16BitFontMolds(2,4,ChineseCharacterArrayCOf16Row2Column);//液晶显示器LCD12864显示16行点x16列点字模函数 液晶显示器LCD12864的上半屏第二大行第4显示位置显示“安”
// LCD12864Display16Bitx16BitFontMolds(2,5,ChineseCharacterArrayDOf16Row2Column);//液晶显示器LCD12864显示16行点x16列点字模函数 液晶显示器LCD12864的上半屏第二大行第5显示位置显示“胜”
// LCD12864Display16Bitx16BitFontMolds(2,6,ChineseCharacterArrayEOf16Row2Column);//液晶显示器LCD12864显示16行点x16列点字模函数 液晶显示器LCD12864的上半屏第二大行第6显示位置显示“天”
// LCD12864Display16Bitx16BitFontMolds(2,7,ChineseCharacterArrayFOf16Row2Column);//液晶显示器LCD12864显示16行点x16列点字模函数 液晶显示器LCD12864的上半屏第二大行第7显示位置显示“下”
LCD12864Display32Bitx32BitFontMolds(1,0,ChineseCharacterArray0Of32Row4Column);//液晶显示器LCD12864显示32行点x32列点字模函数 液晶显示器LCD12864的上半屏第一大行第0显示位置显示“广”
LCD12864Display32Bitx32BitFontMolds(1,1,ChineseCharacterArray1Of32Row4Column);//液晶显示器LCD12864显示32行点x32列点字模函数 液晶显示器LCD12864的上半屏第一大行第1显示位置显示“东”
LCD12864Display32Bitx32BitFontMolds(1,2,ChineseCharacterArray2Of32Row4Column);//液晶显示器LCD12864显示32行点x32列点字模函数 液晶显示器LCD12864的上半屏第一大行第2显示位置显示“安”
LCD12864Display32Bitx32BitFontMolds(1,3,ChineseCharacterArray3Of32Row4Column);//液晶显示器LCD12864显示32行点x32列点字模函数 液晶显示器LCD12864的上半屏第一大行第3显示位置显示“胜”
LCD12864Display32Bitx32BitFontMolds(2,0,ChineseCharacterArray4Of32Row4Column);//液晶显示器LCD12864显示32行点x32列点字模函数 液晶显示器LCD12864的上半屏第三大行第0显示位置显示“医”
LCD12864Display32Bitx32BitFontMolds(2,1,ChineseCharacterArray5Of32Row4Column);//液晶显示器LCD12864显示32行点x32列点字模函数 液晶显示器LCD12864的上半屏第三大行第1显示位置显示“疗”
LCD12864Display32Bitx32BitFontMolds(2,2,ChineseCharacterArray6Of32Row4Column);//液晶显示器LCD12864显示32行点x32列点字模函数 液晶显示器LCD12864的上半屏第三大行第2显示位置显示“设”
LCD12864Display32Bitx32BitFontMolds(2,3,ChineseCharacterArray7Of32Row4Column);//液晶显示器LCD12864显示32行点x32列点字模函数 液晶显示器LCD12864的上半屏第三大行第3显示位置显示“备”
while(1);//主循环
}
LCD12864.c
#include "LCD12864.h"
//#include "ChineseCharacterLibrary.h"
#define uchar unsigned char//自定义无符号字符型为uchar
#define uint unsigned int//自定义无符号整数型为uint
void LCD12864ReadBusy()//液晶显示器读忙函数
{
uchar i;//声明一个计数变量
uchar State;//声明状态变量
LCD12864DisplayData = 0xff;//液晶显示器LCD12864显示数据变量拉高
LCD12864RS = 0;//液晶显示器LCD12864写入指令
LCD12864RW = 1;//读取液晶显示器LCD12864
do
{
LCD12864EN = 1;//液晶显示器LCD12864使能
State = LCD12864DisplayData;//液晶显示器LCD12864显示数据赋给状态变量
LCD12864EN = 0;//关液晶显示器LCD1602使能
i++;
if(i > 500)//防止液晶显示器LCD12864因损坏陷入do{}while循环中 导致无法执行其他程序
break;
}
while(State & 0x80);//判断状态变量是否为1 为1表示液晶显示器LCD12864在忙 否则不忙
}
void LCD12864WriteCommand(uchar Command)//液晶显示器LCD12864写命令函数
{
LCD12864ReadBusy();//液晶显示器读忙函数