基于STC12C5A60S2系列1T 8051单片机的带字库液晶显示器LCD12864数据传输并行模式显示图像应用

基于STC12C5A60S2系列1T 8051单片机的带字库液晶显示器LCD12864数据传输并行模式显示32行点x128列点字模串的应用 LCD12864点阵型液晶显示器是一种具有4 位或8 位并行、2 线或3线串行多种接口方式,内部可含有或不含有国标一级、二级简体中文字库的点阵型液晶显示器。其中LCD12864点阵型液晶显示器中128表示128列,64表示64行,总共有128x64=8192个点。 阅读详情

基于STC12C5A60S2系列1T 8051单片机的液晶显示器LCD12864显示图像应用

STC12C5A60S2系列1T 8051单片机管脚图

在这里插入图片描述在这里插入图片描述

STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式及配置

在这里插入图片描述

STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式介绍

在这里插入图片描述在这里插入图片描述

液晶显示器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内存地址来显示数据。)
### (1)、声明程序变量思维导图

(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显示图像

在这里插入图片描述
main.c

#include "STC12C5A60S2.h"  
#include "LCD12864.h" 
//#include "ChineseCharacterLibrary.h" 
#include "ImageLibrary.h"  
#define uchar unsigned char//自定义无符号字符型为uchar
#define uint unsigned int//自定义无符号整数型为uint 
uchar i;
 void main()//主函数
{
   
   
//  uchar String1[] = "Hello World";//显示大写英文字母用液晶显示器LCD12864的16小行x8小列来显示 小写英文字母用液晶显示器LCD12864的8小行x8小列来显示
//  uchar String2[] = "Hello LCD12864";
//  uchar String3[] = "您好啊!欢迎来到";	
  LCD12864Init();//液晶显示器初始化函数
	
//  LCD12864ShowString(0,0,String1);//液晶显示器LCD12864第一大行(以16小行x8小列为一大行)第一个位置(相当于大列 以16小列或8小列为一大列)开始显示字符串
//  LCD12864ShowString(1,0,String2);//液晶显示器LCD12864第二大行(以16小行x8小列为一大行)第一个位置(相当于大列 以16小列或8小列为一大列)开始显示字符串
//  LCD12864ShowString(2,0,String3);//液晶显示器LCD12864第三大行(以16小行x16小列为一大行)第一个位置(相当于大列 以16小列或8小列为一大列)开始显示字符串

//	LCD12864DisplayFontMolds(nin);//
	
  LCD12864DisplayGraphic(PictureArray);//液晶显示器LCD12864显示图像函数 按128小列x64小行面积分上下半屏显示
	
  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使能
   St
基于STC12C5A60S2系列1T 8051单片机的带字库液晶显示器LCD12864数据传输并行模式显示汉字应用 LCD12864点阵型液晶显示器是一种具有4 位或8 位并行、2 线或3线串行多种接口方式,内部可含有或不含有国标一级、二级简体中文字库的点阵型液晶显示器。其中LCD12864点阵型液晶显示器中128表示128列,64表示64行,总共有128x64=8192个点。 阅读详情

相关推荐

8051单片机Proteus仿真与开发实例-GLCD12864显示屏(KS0108控制器并口驱动)中文及图片显示仿真

GLCD12864显示屏(KS0108并口驱动)中文及图片显示仿真 1、GLCD12864显示屏介绍 在前面的实例中,对GLCD12864(KS0108控制器)显示屏已经做了详细的介绍,请参考: GLCD12864显示屏(KS0108 并口驱动)仿真 2、仿真电路原理图 3、仿真代码实现 GLCD12864显示中文,需要对中文字符提取字模,一般中文字符大小为16x16,英文字符大小为8*16。具体提取方法,可以网上搜索相关教程,在这里不做详细介绍。 1)通用显示中文字符及图片 void glcd_in

视觉与物联智能 1975

51单片机STC8H8K64U/STC8051U34K64通过RA8889/RA8876如何控制彩屏(SPI-4源码下载)

STC8H系列单片机不需要外部晶振和外部复位,在相同的工作频率下,速度比传统的8051单片机要快12倍,具有高可靠抗干扰的优秀特性,与瑞佑的RA8889/RA8876控制芯片刚好可以完美搭配用于工控、医疗等各个领域。

BW.SU的博客 827

51单片机(STC8051U34K64)_RA8889驱动TFT彩屏_SPI4参考代码(v1.3)

STC8051U34K64 或者 STC8H8K64U是相当流行的51单片机,通过瑞佑科技RA8889可以方便容易地控制TFT彩屏,分辨率高达1366x768或者1024*2080等,使用简单!

BW.SU的博客 1471

最新单片机仿真 ks0108 液晶12864

最新单片机仿真 ks0108 液晶12864最新单片机仿真 ks0108 液晶12864最新单片机仿真 ks0108 液晶12864最新单片机仿真 ks0108 液晶12864最新单片机仿真 ks0108 液晶12864最新单片机仿真 ks0108 液晶12864最新单片机仿真 ks0108 液晶12864最新单片机仿真 ks0108 液晶12864最新单片机仿真 ks0108 液晶12864最新单片机仿真 ks0108 液晶12864最新单片机仿真 ks0108 液晶12864最新单片机仿真 ks0108 液晶12864最新单片机仿真 ks0108 液晶12864最新单片机仿真 ks0108 液晶12864最新单片机仿真 ks0108 液晶12864最新单片机仿真 ks0108 液晶12864最新单片机仿真 ks0108 液晶12864最新单片机仿真 ks0108 液晶12864最新单片机仿真 ks0108 液晶12864最新单片机仿真 ks0108 液晶12864最新单片机仿真 ks0108 液晶12864最新单片机仿真 ks0108 液晶12864最新单片机仿真 ks0108 液

SAP CO-PA数据传送避坑指南:销售开票与FI/MM记账的日常配置实操(含KEKF/KE4I/KEI2)

本文深入解析SAP CO-PA数据传送中的常见配置问题,特别是销售开票与FI/MM记账环节的实操避坑指南。通过KEKF/KE4I/KEI2等关键配置点的详细说明,帮助用户避免数据失真和重复记录,提升获利能力分析的准确性。文章结合实战案例,揭示官方文档未提及的'数据黑洞'形成机制,为SAP顾问提供实用的排雷手册。

weixin_26905487的博客 390

【AI Infra】Perfetto性能分析工具指南

Perfetto是一款开源性能分析工具,提供系统级和应用级的活动数据追踪功能。其界面分为四个区域:左侧操作区(包含Trace查看、SQL查询、预置分析等功能)、上方信息区、中间图形化展示区以及下方详细信息区。工具支持快捷键操作(w/s缩放、a/d移动、m标记等),并能高效处理大体积Trace文件。通过Timeline分析可发现性能瓶颈,如案例中update_actor耗时过高的问题,最终定位到CPU offloading导致的MemcpyH2D操作耗时过长,提出了优化方案。Perfetto相比Systrac

baiweizeng的博客 1507

Ubuntu22环境下Xinference与RAGFLOW集成:构建高效rerank模型服务【实战指南】

本文详细介绍了在Ubuntu22.04系统上,通过部署Xinference模型推理服务来加载bge-reranker-base等rerank模型,并将其与RAGFLOW框架集成的完整实战指南。该方案实现了模型服务的解耦与灵活管理,有效提升RAG系统的检索精度与答案相关性,并提供了从环境配置、服务启动、网络连接到性能调优及常见问题排查的全流程解决方案。

pluto的博客 500

基于遗传算法改进BP神经网络的电池容量SOC预测

,遗传算法BP神经网络能很好的实现对电池容量soc的训练和预测,BP神经网络是一种成熟的神经,相对于其他神经网络,拥有很多的训练函数,传递函数,可以调节的参数非常多,对各种问题都可以达到一个比较理想的效果,关键看如何调试参数,选择训练传递函数,遗传算法改进BP神经网络的初始权值阈值,达到改进BP神经网络的目的,从而更好的实现对电池容量SOC的预测

abc991835105的博客 766

【2026最新版】python点云处理算法汇总(长期更新版)

python点云处理算法整理。博客长期更新,最近一次更新时间为:2026年10月4日。

点云侠的博客 42万+

SAP S/4HANA 中 RAP 业务对象接口的消费模式

本文探讨了SAP S/4HANA中RAP业务对象接口的消费模式,重点介绍了通过EML直接调用和CDS投影两种Clean Core开发路径。文章分析了BO Interface作为稳定契约的价值,并提供了BAdI集成、OData服务发布等实际场景案例,同时对比了OData V2/V4的技术选型考量,最后强调了ADT向导使用中的DCL权限注意事项。全文旨在帮助开发者构建升级友好的业务对象消费方案。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 757

人工智能 (Artificial Intelligence, AI) 原理与代码实例讲解

人工智能 (AI) 机器学习 (Machine Learning) 深度学习 (Deep Learning) 算法 模型 代码实例 应用场景 1. 背景介绍 人工智能 (Artificial Intelligence, AI) 作为一项前沿科技,近年来发展迅速,已渗透到生活的方方面面

AI架构师小马 1226

基于STM32L4XX、HAL库的BQ25713RSNR充电芯片驱动程序设计

define BQ25713_I2C_ADDR (0x6B << 1) // 7位地址为 0x6B,HAL库需要左移一位。// 示例:配置 CHARGE_OPTION_0 寄存器:使能充电,使能 ICO(输入电流优化)reg_data |= (EN_CHG_MASK | EN_ICO_MASK);

zhusl6688的博客 406

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

上一篇: 基于STC12C5A60S2系列1T 8051单片机的LCD1602显示中文英文数字小数字库字符自定义字符的应用
下一篇: 基于STC12C5A60S2系列1T 8051单片机的带字库液晶显示器LCD12864数据传输并行模式显示汉字应用
CWQLTYH
博客等级 码龄10年 1432粉丝 149原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值