要避免 Adafruit_ST7735 屏幕更新时出现闪烁问题,可以采取以下优化方法(使用中文回答):
1. 使用双缓冲技术
如果开发板内存足够(如 ESP32/Arduino Mega),创建屏幕缓冲区避免直接刷屏:
#include <Adafruit_ST7735.h>
#include <Adafruit_GFX.h>
// 屏幕尺寸常量
#define TFT_WIDTH 128
#define TFT_HEIGHT 160
uint16_t buffer[TFT_WIDTH * TFT_HEIGHT]; // 帧缓冲区
Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_RST);
void setup() {
tft.initR(INITR_BLACKTAB);
memset(buffer, 0x0000, sizeof(buffer)); // 初始化为黑色
}
void loop() {
// 在缓冲区绘制内容
drawToBuffer();
// 一次性刷新整个屏幕(无闪烁)
tft.startWrite();
tft.drawRGBBitmap(0, 0, buffer, TFT_WIDTH, TFT_HEIGHT);
tft.endWrite();
}
void drawToBuffer() {
// 在 buffer 数组中直接操作像素数据
// 示例:画一个红色矩形
for (int y=20; y<50; y++) {
for (int x=30; x<80; x++) {
buffer[y * TFT_WIDTH + x] = ST7735_RED;
}
}
}
2. 局部更新优化
只刷新变化区域减少闪烁:
void updatePartial(int x, int y, int w, int h) {
tft.startWrite();
tft.setAddrWindow(x, y, x+w-1, y+h-1);
for (int row=y; row<y+h; row++) {
for (int col=x; col<x+w; col++) {
tft.writeColor(buffer[row * TFT_WIDTH + col]);
}
}
tft.endWrite();
}
3. 关闭自动重绘
使用 startWrite() 和 endWrite() 包裹绘图操作:
tft.startWrite();
// 连续绘制操作(无中间刷新)
tft.fillRect(10, 10, 50, 30, ST7735_BLUE);
tft.drawCircle(60, 40, 20, ST7735_GREEN);
tft.endWrite(); // 统一提交
4. 减少全屏清除
避免频繁使用 fillScreen():
// 改为局部覆盖
tft.fillRect(0, 0, TFT_WIDTH, 20, ST7735_BLACK); // 仅清除状态栏区域
5. 调整刷新率
控制刷新速度:
uint32_t lastUpdate = 0;
void loop() {
if (millis() - lastUpdate > 50) { // 50ms刷新一次
updateScreen();
lastUpdate = millis();
}
}
6. 降低SPI时钟频率
减少信号干扰(在初始化时设置):
tft.initR(INITR_BLACKTAB);
SPI.setClockDivider(SPI_CLOCK_DIV4); // 降低SPI速度
推荐方案选择:
- 优先双缓冲(内存充足时)
- 局部更新+批处理(内存有限时)
- 避免
fillScreen全屏刷新
注意:双缓冲需要消耗较多内存(128x160的16位屏需40KB),适用于ESP32/Mega等大内存板卡。对于Uno/Nano等小内存板卡,重点优化局部更新和批处理操作。
这样可以显著降低屏幕闪烁现象,提升视觉流畅度。请根据具体硬件条件选择最适合的策略。
在Arduino上使用1.8英寸TFT显示屏的入门指南
下载每个库并解压缩文件夹。将它们重命名为“ Adafruit_ST7735”和“ Adafruit_GFX”,并将每个文件夹放置在Arduino Libraries文件夹内。我已将库的屏幕快照附加
2019-12-12 11:09:40
ST7735的相关资料分享
目录前言一、3线SPI二、使用1.命令2.对应引脚调整总结前言驱动芯片是ST7735,之前在Arduino上找库,没几个能用的(我FW不能用肯定是我的错),最后还是自己从STM32移植一个。顺便介绍
茶壶茶茶
2022-01-25 06:18:42
TFT1.44寸屏ST7735驱动GitHub的相关资料推荐
STM32应用之TFT1.44寸屏ST7735驱动GitHub项目下载链接:点我下载硬件平台:stm32f103rct和1.44寸128x128 TFT屏(st7735驱动)IDE:keil MDK
母猪会上树
2022-02-18 06:56:58
[经验] 上海航芯ACM32F403RET7外设SPI测试。点亮SPI LCD屏.驱动芯片ST7735.
= ST7735_YSTART;// based on Adafruit ST7735 library for Arduinostatic const uint8_tinit_cmds1
HQGBOY
2022-10-23 10:55:04
【Milk-V Duo 开发板免费体验】3. 点亮st7735屏幕
前言 本文介绍milkv-duo加载st7735的lcd屏幕,以及屏幕显示log。 参考文章:记录为Linux配置spi屏幕(st7735s)https://community.milkv.io/t
voidpbq
2023-09-18 22:05:24
为什么无法让I2C+SPI在Wemos D1 Mini Pro上工作?
= Adafruit_ST7735(TFT_CS,TFT_DC, TFT_RST);BME280I2C bme;void setup(void) {Serial.begin(9600);while
heks
2023-02-27 08:20:08
STM32F103ZET6驱动的ST7735s一直出现白屏是为啥呢?怎么解决?
STM32F103ZET6驱动的ST7735s一直出现白屏是为啥呢?怎么解决?
深海零下一度1
2022-02-21 07:25:38
STM32F407VET6+ST7735TFT LCD彩屏驱动程序分享
硬件准备STM32F407VET6开发板一块编译器使用的是STM32cubeide。屏幕使用的是如图所示的屏幕,驱动芯片是st7735.驱动协议采用的是spi通讯协议。和stm32芯片的连接方式如下
沈文强66
2022-02-18 07:34:17
怎样把ILI9326移植到Fireduino上替代原先的ST7735库呢
中断的引脚,进入中断后可以通过SPI方式读取电阻屏的AD值来计算点击的坐标,估计使用的芯片是XPT2046之类的。但是官方默认是ST7735 IC的显示屏,而且到现在为止,这个配套的显示屏还没有上市,买不到,无奈只好使用原来的给Arduino准备的TFT了。
lucas_songlea
2022-04-11 15:07:19
【国民技术N32项目移植】N32G457项目移植之RT-Thread SPI_TFT_LCD ST7735
函数,不需要改造,直接可以用。新建LCD_ST7735工程1、打开RT-Thread Studio,并新建空的工程:(这样新建不细说,详细的新建工程见我上篇帖子:【国民技术N32项目移植】N32G457项目
华仔stm32
2023-01-30 23:40:17
物联网行业中的TFT-LCD屏驱动_ST7735S设计详解
ST7735S是另一款液晶显示控制器,它具有更高的性能和功能。它支持最高分辨率为160×128的TFT模块,支持完整的RGB分量控制,并且具有一个16位数据总线,可以支持最高分辨率为320×240
2024-09-29 11:54:28
烧写以后灯不闪的问题
我自己打板子搞了个ATMEGA48的小板子。好多年了。 现在有一个出问题。 先贴出原理图: 我写了一个闪灯的程序,其中一块板子灯可以闪,另外一块不闪,一直亮。 是不是那个管脚坏了?请大神帮我分析一下。谢谢!
chenbingjy
2023-05-23 09:30:07
LilyGo-T-Wristband板无法通过SPI从ST7735读取ID寄存器咋办?
我在使用 LilyGo-T-Wristband 板将 Arduino 代码移植到本机 idf-esp 代码时遇到问题。无法通过 SPI 从 ST7735 读取 ID 寄存器。这是我的 SPI
ht_liu
2023-03-01 06:59:31
led屏不闪要怎么拍
首先需核实LED屏幕的刷新速度,确保快门速度设置低于屏幕刷新速度,如无法得知可以控制快门速度低于1/160秒,如果还是画面闪烁再继续逐步下调。最后通过全手动模式或快门优先模式,固定快门速度,即可确保画面不闪。
2020-03-08 16:48:26
B7735
B7735 - SAW Components Low-Loss Filter for Mobile Communication 942,5 MHz - EPCOS
2022-11-04 17:22:44
Adafruit Feather nRF52 Bluefruit的学习指南
是可能是由于预建的adafruit-nrfutil无法在Mac上运行。如果您的Mac早于MacOS,则二进制文件是在MacOS 10.13上生成的。请更新您的macOS,或者您可以在这里按照此仓库
2019-11-27 09:03:35
【沁恒微CH32V307评估板试用体验】SPI驱动ST7735时序
驱动LCD是单片常用外设之一,我这里书写SPI驱动后,驱动ST7735不成功,将驱动与时序附下,希望得到沁恒官网的支持:ST7735初始化
华仔stm32
2022-05-26 20:19:37
为什么我的树莓派ATC灯不闪
我买了两个树莓派发现插卡通电后发现有一个正常,ATC 灯闪正常,另外一个板ATC灯长亮,不闪,不知道是不是板坏了。请朋友帮忙分析一下,谢谢!Raspberry Pi 2 Model B
Arttronix
2019-07-16 05:39:06
固件更新后ST-LINK错误怎么解决?
固件更新。于是我点击Firmware upgrade,在Upgrade tool中识别出了ST-LINK/V2,所以我升级成功了。但是现在在重新启动设备并返回到 CubeProgrammer 后
bairunwanda168
2023-01-03 06:11:08
【LuckFox Pico 开发板免费试用】3. 通过fbtft点亮st7735屏幕
前言 本章使用fbtft添加spi lcd st7735/gc9306。 fbtft生成fb0设备,后续通过lvgl可以实现自定义界面绘制。 一、电路图 使用开发板的spi0的scl以及mosi
voidpbq
2023-11-14 21:08:15
72-7735
TENMA - 72-7735 - Handheld Digital Multimeter, 3999 Count, Mean Value, Auto, Manual Range, 3.75 Digit
2024-06-21 01:48:04
一次学会使用Adafruit IO平台!
Adafruit IO 是一个免费/付费的IoT 平台,提供数据云端化、图像化的服务整合,Adafruit IO 可以让用户自由定义云端的资料内容;
2022-11-22 16:16:19
Adafruit 电缆组件 — 原型开发优选线束解析
为什么选择 Adafruit? ● Adafruit 是开源硬件领域的重要玩家。 Adafruit Industries 成立于 2005 年,以提供电子元件、硬件套件、开发工具和学习资源著名。它不
2025-12-04 15:58:48
如何确保在ST25DV64K准备好通过RFID读取之前更新ST25DV64K的EEPROM中的数据?
ST25DV64K 的 EEPROM,然后 ST25DV64K 芯片准备好通过 RFID 读取。如果 V_EH 上的电压太低且微控制器尚未打开,我不希望通过 RFID 访问 ST25DV64 芯片。只有当微控制器
chm5
2023-01-31 08:05:55
怎样使用ST25 NFC App通过ST25DV64K更新固件呢
4个月前,我们完成了一个产品的设计,我们可以使用ST25 NFC App通过ST25DV64K更新固件。安装新版本(NFC TAP App V.3.6.0)后,它不再工作了。我们可以访问以前版本的应用程序吗?
yfdsfqdqd
2022-12-23 10:17:26
浅析Adafruit_NeoPixel常用库函数
初始化包含头文件#include 针对AVR单片机的特殊设置#ifdef __AVR__ #include// Required for 16 MHz Adafruit Trinket#endif
gXDhn
2021-07-13 07:44:54
探索Adafruit FONA MiniGSM:小巧模块的强大功能
探索Adafruit FONA MiniGSM:小巧模块的强大功能 一、引言 在电子设计的世界里,我们常常追求小巧、多功能的模块,以满足各种项目的需求。Adafruit FONA MiniGSM就是
2026-05-10 16:40:06