如果 ST7735 的主体画面正常,但右侧或底部出现固定、连续的窄彩线,先不要急着判断屏幕损坏。保持接线和绘图代码不变,优先检查 initR() 的面板初始化类型与地址偏移。
问题不是“完全不显示”,而是边缘没有被正确覆盖
我在正在制作的 ESP32-S3 AI 语音对话原型中换用了一块 1.8 英寸、128×160 的 ST7735 屏幕。程序上传后,小圆脸已经完整显示,说明屏幕供电、SPI 通信和主体绘图都在工作。
但仔细看,画面右侧和底部仍有很细的彩色花线。它们集中在边缘,形状连续而固定,并没有随机散布在整个画面里。

修复前的 ST7735 实物画面,主体表情已经显示,右侧和底部边缘仍可见细窄彩线。
看到异常时,我最初仍然怀疑屏幕本身有问题。转折来自公开记录学习过程后收到的一条评论:有人提醒我检查画面是否存在“偏移”。这个关键词把问题从“屏幕是不是坏了”变成了一个更具体的问题——程序写入的坐标,是否和这块面板真正的可见区域对齐?
先确认屏幕,再讨论初始化参数
这块模块背面明确标注 DRIVER IC: ST7735,正面规格为 1.8 英寸、128×160,接口为 SPI。这里的分辨率只能说明可见区域大小,不能单独决定应该选择哪一种 initR() 参数。

屏幕模块背面与排针实物,可见 DRIVER IC: ST7735 和模块版本丝印。
Adafruit 的 ST7735 库同时提供 INITR_BLACKTAB、INITR_GREENTAB、INITR_REDTAB 等选项。它们不是单纯的“主题颜色”,而是针对不同 ST7735 面板配置准备的初始化路径。官方示例也特别区分了普通 1.8 英寸屏幕与存在偏移的 1.8 英寸屏幕:Adafruit graphicstest 1.11.0 示例。
本次实测环境与记录限制
- 控制板:ESP32-S3;
- 显示模块:背面标注
DRIVER IC: ST7735的 1.8 英寸 128×160 SPI 模块; - 显示方向:
setRotation(0); - 唯一修改项:
initR()从INITR_BLACKTAB切换为INITR_GREENTAB; - 复测方式:重新上传后观察四边,再断电重启复测。
当时没有保存 Adafruit ST7735 库的精确版本号,因此本文不能证明所有库版本都会得到相同结果。下文把解释性源码固定到上游 1.11.0,仅用于说明初始化和偏移机制,不代表当时使用的就是这个版本。若要严格复现实验,应先记录 Arduino 库管理器中的版本或锁定对应提交,再执行同样的单变量测试。
BLACKTAB 与 GREENTAB 的关键差异是起始偏移
继续查看 Adafruit_ST7735.cpp 可以发现:INITR_GREENTAB 会把列起点设为 2、行起点设为 1;其他路径在没有额外设置时保留默认的零偏移。随后 setRotation() 会把这些起点用于当前方向下的显示坐标映射。对应实现可见 Adafruit_ST7735 1.11.0 源码。
// INITR_GREENTAB
_colstart = 2;
_rowstart = 1;
// 其他未单独设置偏移的路径
// colstart、rowstart 保持默认 0可以把它理解为:程序中的逻辑坐标 (0, 0),不一定恰好对应液晶面板可见区域的第一个像素。不同模块即使都标为 ST7735、128×160,也可能因为面板与控制器显存的对应关系不同,需要不同的行列起点。
如果初始化参数使用了不适合当前面板的起点,主体仍可能正常出现,但整张图会相对可见区域发生轻微偏移,边缘便可能留下没有被本次绘图正确覆盖的窄条。
用单变量实验验证,而不是同时重接所有线
当时程序使用的是:
tft.initR(INITR_BLACKTAB);
tft.setRotation(0);为了让结果具有判断价值,我保持以下内容全部不变:
-
屏幕与 ESP32-S3 的接线;
-
128×160 分辨率与竖屏方向;
-
绘制普通脸的坐标和颜色;
-
按钮逻辑与其他程序结构。
唯一修改是:
tft.initR(INITR_GREENTAB);
tft.setRotation(0);重新上传后,右侧和底部的彩线完全消失,颜色、方向和画面位置也全部正常。随后我断电并重新启动,屏幕仍然恢复正常显示。这说明在这次已记录的硬件、方向和程序条件下,INITR_GREENTAB 是这块面板适用的初始化配置。
以后遇到同类问题,我会按这个顺序排查
-
先确认驱动芯片、可见分辨率和实际接口,不只看商品标题。
-
第一次点亮先显示全屏纯色,或画出覆盖四条边的测试图,检查颜色、方向、位置和完整边缘。
-
如果主体稳定、异常只是一条固定连续的边缘窄带,优先检查初始化类型与行列偏移。
-
每次只切换一个 BLACKTAB、GREENTAB 或 REDTAB 选项,不要同时改接线、SPI 引脚和绘图坐标。
-
找到正确配置后断电重启复测,并把它记录为这块具体模块的硬件配置。
这套顺序的价值是让每次修改都能回答一个明确问题。若画面内部出现随机噪点、闪烁或整屏不稳定,则还应回到供电、接触、SPI 速度和信号完整性等方向继续排查,不能把所有显示异常都归因于偏移。
公开学习让“不会提问”变成了可验证的问题
这次排查最大的感受是,公开学习的过程可以很快收到专业人士的评论,快速找到问题。一开始我以为是屏幕坏了,直到评论区有人告诉我需要看一下是否偏移,我才知道应该怎样继续和 AI 沟通。
这次真正起作用的并不是一句直接答案,而是一个更准确的观察角度。评论区提供了“偏移”这个关键词,我再把具体的屏幕型号、固定边缘彩线和初始化代码交给 AI,问题才从模糊猜测变成了可以查源码、改一行代码、重新上传和断电复测的实验。
对我来说,公开学习不是等全部做对之后再展示结果。把真实现象、失败照片和已经尝试过的步骤说清楚,本身就在增加获得有效反馈的机会。专业人士的经验、AI 的检索与整理能力,以及自己动手做单变量验证,三者结合起来,排查速度会快很多。
适用边界
本文结论已经在当前这块 1.8 英寸 128×160 ST7735 模块上完成断电重启复测,但它不是所有 ST7735 的统一答案。不同厂商、批次和面板组合可能需要 BLACKTAB、GREENTAB、REDTAB 或其他专用配置。正确做法仍然是先核对资料,再用覆盖四边的测试画面做单变量验证。