65.9K
CodeProject 正在变化。 阅读更多。
Home

在 PIC 微控制器上试验 ST7735 1.8 英寸 128×160 彩色 LCD

2023年5月7日

CPOL

3分钟阅读

viewsIcon

3674

关于 PIC 微控制器上的 ST7735 1.8 英寸 128×160 彩色 LCD 的更多信息

这个小巧的 1.8 英寸 LCD 模块是我成功尝试的第二个彩色 LCD(第一个是 诺基亚 3510i LCD)。 我从 eBay 购买的扩展板也附带一个 SD 卡插槽

该板的引脚定义如下,包括 SD 卡连接

  1. GND
  2. VCC
  3. NC
  4. NC
  5. NC
  6. LCD 重置
  7. LCD A0 (R/S)
  8. LCD SDA
  9. LCD SCK
  10. LCD CS
  11. SD SCK
  12. SD MISO
  13. SD MOSI
  14. SD CS
  15. LED+
  16. LED-

通过 SP 接口

这款 LCD 控制器 ST7735 使用 SPI 进行通信,只需要 5 条数据线,即 RESET、A0、SDA、SCK 和 CS。 值得特别注意的是 A0 线,也称为 R/S,它指示正在传输的字节应该被解释为命令还是像素数据。 尽管 SPI 通信最好使用硬件 SPI 模块(我的 PIC24FJ64GA002 上有两个)以获得更快的显示速度,但如果硬件 SPI 不可用,也可以通过位操作来完成。 以下函数将通过软件使用 SPI 发送一个字节

void write_spi_byte(unsigned char c){
    char x;
    for(x=0;x<8;x++){       
        LCD_SCK = 0;
        LCD_SDA = 0;
        if(c & 0x80)
        LCD_SDA = 1;
        LCD_SCK = 1;
        c <<= 1;
    }
}

我将 Adafruit 的 Arduino 转换为在我的 PIC24FJ64GA002 的 Microchip C30 编译器下编译,并且 LCD 能够很好地绘制一些图形

使用捆绑的 SD 卡插槽和 Microchip MDD 库,以及我的 自定义 5×7 字体,我能够将一些 SD 卡信息显示在 LCD 上

我购买的电路板有一个 AMS1117 板载稳压器,并且需要至少 5V 提供给 VCC 才能为 LCD 和 SD 卡生成 3.3V 电压。 我起初并不知道这一点,并向 VCC 提供了 3.3V 电压,结果发现 SD 卡间歇性地工作,而 LCD 仍然运行良好。 如果您在此模块上遇到 SD 卡问题,请检查是否是这种情况。

设置颜色模型

ST7735 控制器支持多达 262,144 (218) 种颜色。 但是,为了能够使用 262K 种颜色,对于每个像素,必须通过 SPI 传输 18 位数据。 由于这增加了复杂性, 我决定使用 65,536 种颜色(16 位)颜色,通过使用 2 次 SPI 写入就可以很好地传输像素数据。

在 16 位颜色模式下,LCD 期望像素数据采用 RGB565 格式。 以下将从众所周知的 RGB888(24 位颜色)格式转换为 RGB565

#define RGB565(r,g,b) ((((r>>3)<<11) | ((g>>2)<<5) | (b>>3)))

关于这款 LCD,有一个有趣的要点需要注意,似乎有两个略有不同行为的变体。 如果您的模块带有黑色标签,则每个像素的蓝色和红色字节将被交换,从而导致显示错误的颜色。 如果您的模块有红色或绿色标签,则每个像素的字节顺序将是正确的。

要解决此问题,您可以更改上面的 RGB565 宏以交换红色和蓝色字节,或者您可以在初始化期间更改 MADCTL 寄存器的值

writecommand(ST7735_MADCTL);

// R and B byte are swapped
// writedata(0xC8);

// normal R G B order
writedata(0xC0);

下载次数

来自我 SD 卡的各种位图,如图所示在 LCD 上

此 LCD 的 C30 源代码可以在 此处 下载。

© . All rights reserved.