LCD12864是一种常见的图形点阵液晶显示模块,其显示分辨率为128×64点,能够显示数字、字母、汉字及简单图形,要正确控制LCD12864,需要通过特定的指令集对其进行配置和操作,这些指令决定了显示模式、地址设置、数据读写等功能,以下将详细介绍LCD12864的各类命令及其使用方法。

LCD12864的指令系统分为基本指令和扩展指令两类,通过设置指令寄存器的D3位(RE)来选择指令集,当RE=0时,为基本指令集;当RE=1时,为扩展指令集,指令的写入需要遵循LCD12864的时序要求,首先使能信号E从高电平跳变为低电平,并在E为高电平期间将指令码送到数据总线上。
基本指令集(RE=0)
基本指令集适用于大多数常规显示操作,主要包括以下指令:
-
清除显示(指令码:0x01)
执行该指令后,整个屏幕将被清空,地址指针自动归零,即回到屏幕左上角(00H),该指令执行需要约1.6ms的时间,因此在程序中需要加入适当的延时以确保指令执行完成。 -
地址归位(指令码:0x02)
将地址指针设置回初始位置(00H),但不清除屏幕内容,常与后续的显示数据写入指令配合使用,以确保数据从指定位置开始显示。(图片来源网络,侵删) -
设置进入点(指令码:0x04/0x05/0x06/0x08)
该指令用于控制读写数据后地址指针的移动方向及光标的显示状态。- D1(ID):0=地址指针加1,1=地址指针减1
- D0(SH):0=显示不移动,1=显示整体移动
设置ID=0、SH=0时,每写入一个数据,地址指针自动加1,显示内容不移动。
-
显示开关控制(指令码:0x08~0x0F)
控制显示、光标及闪烁的开关状态。- D3(D):0=关闭显示,1=开启显示
- D2(C):0=隐藏光标,1=显示光标
- D1(B):0=关闭光标闪烁,1=开启光标闪烁
- D0(未使用):通常置0
指令码0x0F表示开启显示、显示光标并开启光标闪烁。
-
功能设置(指令码:0x20~0x27)
设置数据总线位数、显示行数及字体类型。- D5(DL):0=4位数据模式,1=8位数据模式
- D4(RE):0=基本指令集,1=扩展指令集(此位在基本指令集中固定为0)
- D3(G):0=关 graphics 显示,1=开 graphics 显示(仅带图形功能的型号)
- D2-D0(未使用):通常置0
常用设置为8位数据模式、2行显示(部分型号为1行),指令码为0x23。
-
设置地址(指令码:0x80~0x9F)
设置DDRAM(显示数据存储器)地址,用于确定下一个显示数据的写入位置。(图片来源网络,侵删)- 范围:0x00~0x7F(对应128×64屏幕的128列×4行,实际使用前64列×4行)
指令码0x80表示地址指针指向第0行第0列,0x90表示第1行第0列,以此类推。
- 范围:0x00~0x7F(对应128×64屏幕的128列×4行,实际使用前64列×4行)
-
设置CGRAM地址(指令码:0x40~0x7F)
设置CGRAM(字符生成存储器)地址,用于自定义字符,CGRAM地址范围为0x00~0x3F,每个字符由8×16点阵组成,占用16字节。 -
读取忙标志(BF)和地址计数器(AC)(指令码:0x00)
通过读取数据总线的D7位获取BF状态,BF=1表示模块忙,无法接收新指令;BF=0表示模块就绪,读取的数据低5位为当前AC值。
扩展指令集(RE=1)
扩展指令集主要用于调整显示参数,如对比度、扫描频率等,具体指令如下:
-
设置待机模式(指令码:0x01)
进入待机状态,降低功耗,此时显示关闭,但可接收唤醒指令。 -
设置地址(指令码:0x80~0xFF)
与基本指令集类似,但扩展指令集的地址范围更大,可控制整个256字节的显示区域。 -
设置对比度(指令码:0x81~0xFF)
通过调节对比度寄存器的值(通常为0x00~0x3F)来调整显示亮度,指令码0x81后跟一个对比度值(如0x1F),可设置中等对比度。 -
设置电源模式(指令码:0x2A~0x2F)
控制显示电压倍率(DV)和温度补偿(TC),适用于不同工作环境。 -
设置复位(指令码:0x30)
软件复位模块,恢复默认设置。
指令时序与操作流程
LCD12864的指令写入需严格遵循时序:
- 将RS(寄存器选择)置为0(选择指令寄存器)。
- 将RW(读写选择)置为0(选择写操作)。
- 将指令码送到数据总线(D0~D7)。
- 拉高E信号,保持至少450ns后拉低E信号,完成指令写入。
- 检测BF标志,确保模块就绪后再执行下一条指令。
常用指令组合示例
-
初始化设置
- 基本指令集,8位数据模式,2行显示:0x23
- 开启显示,关闭光标:0x0C
- 清除显示:0x01,延时1.6ms
-
显示汉字“你”
- 汉字“你”的机内码为0xC4E3,在LCD12864中通常用两个字节表示(如0x30、0x20)。
- 设置显示地址(如第0行第0列):0x80
- 写入第一个字节:0x30
- 写入第二个字节:0x20
-
自定义字符
- 设置CGRAM地址(如0x40):0x40
- 写入16字节的点阵数据(8×16点阵)。
- 设置DDRAM地址并写入字符编码(0x00~0x07)。
指令速查表
指令名称 | 指令码(HEX) | 功能说明 |
---|---|---|
清除显示 | 0x01 | 清空屏幕,地址归零 |
地址归位 | 0x02 | 地址指针回到00H |
设置进入点 | 0x04~0x08 | 控制地址指针移动方向及显示移动 |
显示开关控制 | 0x08~0x0F | 控制显示、光标、闪烁开关 |
功能设置 | 0x20~0x27 | 设置数据位数、显示行数、字体类型 |
设置DDRAM地址 | 0x80~0x9F | 设置显示数据写入地址 |
设置CGRAM地址 | 0x40~0x7F | 设置自定义字符地址 |
读取BF和AC | 0x00 | 读取忙标志和地址计数器值 |
设置对比度 | 0x81~0xFF | 调整显示对比度(扩展指令集) |
相关问答FAQs
Q1:LCD12864显示乱码或无法显示,如何排查?
A:首先检查接线是否正确(特别是数据总线、RS、RW、E引脚),然后确认模块供电是否稳定(VDD和VSS),接着检查初始化指令是否正确,特别是功能设置指令(0x20~0x27)中的数据位数(DL位)是否与实际接线匹配,若使用串口模式,需检查波特率和串口指令格式,通过读取BF标志确认模块是否就绪,避免在忙状态下写入指令。
Q2:如何实现LCD12864的滚动显示功能?
A:滚动显示可通过设置“设置进入点”指令中的SH位实现,要实现向左滚动,可在写入数据后执行指令0x07(ID=1,SH=1),此时显示内容会整体向左移动一位,新数据从右侧写入,若要实现多行滚动,需结合DDRAM地址设置,例如先写入第0行数据,再设置地址到第1行,通过连续的滚动指令实现多行文本的动态显示,注意滚动操作需在显示开启状态下进行,且滚动速度不宜过快,以免影响显示效果。