You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Arduino UNO驱动SSD1351 OLED显示纯红色位图异常求助

SSD1351 OLED纯红位图显示乱色的排查与解决

核心问题分析

SSD1351采用RGB565 16位颜色格式,但多数图片转换工具默认输出大端字节序(高字节在前),而SSD1351实际需要小端字节序(低字节在前),这会导致颜色通道错位,出现杂乱色彩。此外,部分场景下控制器可能采用BGR565的通道顺序,也会引发颜色异常。

排查与修复步骤

1. 验证库的颜色输出是否正常

先排除ucglib库的颜色处理问题,用库自带的颜色生成宏绘制纯红方块:

#include <Ucglib.h>

Ucglib_SSD1351_18x128x128_SWSPI ucg(13, 11, 9, 10, 8);

void setup() {
  ucg.begin(UCG_FONT_MODE_TRANSPARENT);
  ucg.clearScreen();
}

void loop() {
  ucg.clearScreen();
  // 生成纯红的RGB565值(0xF800)
  ucg.setColor(ucg.color565(255, 0, 0));
  ucg.drawBox(0, 0, 20, 20);
  delay(1000);
}
  • 如果方块显示纯红:说明库的颜色逻辑正常,问题出在位图数组的字节序。
  • 如果方块显示蓝色/其他颜色:说明控制器采用BGR565顺序,需将颜色改为ucg.color565(0, 0, 255)测试,后续位图转换要设为BGR565格式。

2. 修正位图数组的字节序

方法一:修改图片转换工具设置

如果用的是LCD Image Converter这类工具:

  • 打开「输出设置」,找到「字节顺序」选项,选择Little Endian(低字节在前)
  • 重新生成位图数组,直接用于绘制即可。

方法二:代码中手动交换字节

如果无法修改转换工具,在绘制位图时对每个像素的高低字节进行交换:

const uint16_t red_bitmap[] = { /* 你的位图数据 */ };
const int BITMAP_W = 128;
const int BITMAP_H = 128;

void drawCorrectedBitmap() {
  for (int y = 0; y < BITMAP_H; y++) {
    for (int x = 0; x < BITMAP_W; x++) {
      uint16_t raw_color = red_bitmap[y * BITMAP_W + x];
      // 交换高低字节,适配SSD1351的小端要求
      uint16_t corrected_color = (raw_color << 8) | (raw_color >> 8);
      ucg.setColor(corrected_color);
      ucg.drawPixel(x, y);
    }
  }
}

3. 确认转换工具的颜色通道顺序

如果上述操作后仍异常,检查转换工具的颜色通道设置:

  • 若控制器是BGR565顺序,需将转换预设改为Color B5G6R5,重新生成位图数组。

内容的提问来源于stack exchange,提问作者OMEGA_F

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 21:12:57