登录/注册

Adafruit_ST7735 不闪更新

更多

要避免 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速度

推荐方案选择:

注意:双缓冲需要消耗较多内存(128x160的16位屏需40KB),适用于ESP32/Mega等大内存板卡。对于Uno/Nano等小内存板卡,重点优化局部更新和批处理操作。

这样可以显著降低屏幕闪烁现象,提升视觉流畅度。请根据具体硬件条件选择最适合的策略。

st7735 DMA和GPIO外部中断异常的原因?

上图是中断优先级,我的DMA1是SPI,输出信号到显示屏st7735,逻辑是GPIO外部中断处理串口数据,处理完成继续运行显示函数,当GPIO下降沿时触发中断,实际Debug模式的结果显示,串口

2024-07-05 06:35:48

【Milk-V Duo 开发板免费体验】3. 点亮st7735屏幕

前言 本文介绍milkv-duo加载st7735的lcd屏幕,以及屏幕显示log。 参考文章:记录为Linux配置spi屏幕(st7735s)https://community.milkv.io/t

2023-09-18 22:05:24

CW32L083移植驱动st7735 TFT屏

在CW32L083上驱动ST7735屏

2023-07-04 19:16:19

使用内置ST7735显示SD卡构建gps数据记录器

电子发烧友网站提供《使用内置ST7735显示SD卡构建gps数据记录器.zip》资料免费下载

资料下载 佚名 2022-11-14 10:30:28

基于ESP8266 Nodemcu和ST7735 TFT显示屏的气象站

电子发烧友网站提供《基于ESP8266 Nodemcu和ST7735 TFT显示屏的气象站.zip》资料免费下载

资料下载 杨静 2022-08-12 10:49:55

STM32应用之TFT1.44寸屏ST7735驱动 SPI通信

STM32应用之TFT1.44寸屏ST7735驱动GitHub项目下载链接:点我下载硬件平台:stm32f103rct和1.44寸128x128 TFT屏(st7735驱动)IDE:keil MDK

资料下载 佚名 2021-12-23 19:00:24

ST7735STFT屏幕的驱动

ST7735STFT屏幕的驱动ST7735S简介TFT简介功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容

资料下载 王强 2021-12-05 13:06:03

Arduino ESP32 TFTLCD ST7735 代码和原理

目录前言一、3线SPI二、使用1.命令2.对应引脚调整总结前言驱动芯片是ST7735,之前在Arduino上找库,没几个能用的(我FW不能用肯定是我的错),最后还是自己从STM32移植一个。顺便介绍

资料下载 佚名 2021-11-30 15:36:19

为什么无法让I2C+SPI在Wemos D1 Mini Pro上工作?

= Adafruit_ST7735(TFT_CS,TFT_DC, TFT_RST);BME280I2C bme;void setup(void) {Serial.begin(9600);while

2023-02-27 08:20:08

[经验] 上海航芯ACM32F403RET7外设SPI测试。点亮SPI LCD屏.驱动芯片ST7735.

= ST7735_YSTART;// based on Adafruit ST7735 library for Arduinostatic c

2022-10-23 10:55:04

TFT1.44寸屏ST7735驱动GitHub的相关资料推荐

STM32应用之TFT1.44寸屏ST7735驱动GitHub项目下载链接:点我下载硬件平台:stm32f103rct和1.44寸128x128 TFT屏(st7735驱动)IDE:keil MDK

2022-02-18 06:56:58

ST7735 TFT显示屏颜色错乱问题怎么解决?

ST7735 TFT显示屏颜色错乱问题怎么解决?

2022-02-17 06:32:14

如何实现ST7735STFT屏幕的驱动?

如何实现ST7735STFT屏幕的驱动?

2022-02-08 06:08:17

ST7735的相关资料分享

目录前言一、3线SPI二、使用1.命令2.对应引脚调整总结前言驱动芯片是ST7735,之前在Arduino上找库,没几个能用的(我FW不能用肯定是我的错),最后还是自己从STM32移植一个。顺便介绍

2022-01-25 06:18:42

在Arduino上使用1.8英寸TFT显示屏的入门指南

下载每个库并解压缩文件夹。将它们重命名为“ Adafruit_ST7735”和“ Adafruit_GFX”,并将每个文件夹放置在Arduino Libraries文件夹内。我已将库的屏幕快照附加

2019-12-12 11:09:40

7天热门专题 换一换
相关标签