(如有更新,见原文:https://blog.iyatt.com/?p=12284)
1环境
1.1 硬件
Arduino UNO
1.8 寸 128x160 RGB TFT(ST7735)
1.2 软件
Arduino IDE 2.2.1
Adafruit ST7735 and ST7789 Library 1.10.3
接线:
\begin{array}{|l|l|}
\hline
TFT & Arduino \\
\hline
SCL & 13 (硬件 SPI - SCLK)\\
SDA & 11 (硬件 SPI - MOSI)\\
RST & 9 \\
DC & 8 \\
CS & 10 \\
GND & GND \\
VCC & 5V(3.3V 不能正常工作)\\
\hline
\end{array}
2 基本显示
关于颜色转换参考:https://blog.iyatt.com/?p=12867
2.1 是完全代码,后面开始非 setup 和 loop 部分都和 2.1 一样,直接省略。
2.1 纯色填充屏幕
#include <Adafruit_ST7735.h>
#include <SPI.h>
#define CS 10
#define RST 9
#define DC 8
Adafruit_ST7735 tft = Adafruit_ST7735(CS, DC, RST);
uint16_t rgb888_to_565 (uint32_t rgb888, bool reverse = false)
{
uint8_t r = (rgb888 & 0xFF0000) >> 16;
uint8_t g = (rgb888 & 0x00FF00) >> 8;
uint8_t b = (rgb888 & 0x0000FF);
if (reverse)
{
return ((b >> 3) << 11) |
((g >> 2) << 5) |
(r >> 3);
}
return ((r >> 3) << 11) |
((g >> 2) << 5) |
(b >> 3);
}
uint16_t rgb888_to_565(uint8_t r, uint8_t g, uint8_t b, bool reverse = false)
{
if (reverse)
{
return ((b >> 3) << 11) |
((g >> 2) << 5) |
(r >> 3);
}
return ((r >> 3) << 11) |
((g >> 2) << 5) |
(b >> 3);
}
void setup()
{
tft.initR(INITR_GREENTAB); // 初始化
}
void loop()
{
// 自定义颜色
tft.fillScreen(rgb888_to_565(255, 0, 255, true)); // 紫色
delay(500);
tft.fillScreen(rgb888_to_565(0xFFC0CB, true)); // 粉色
delay(500);
tft.fillScreen(rgb888_to_565(255, 0, 0, true)); // 红色
delay(500);
}
可以看到各种颜色轮番闪烁
2.2 字符串显示
void setup()
{
tft.initR(INITR_GREENTAB); // 初始化
tft.fillScreen(ST77XX_BLACK); // 填充黑屏
delay(1000);
tft.setCursor(0, 0); // 设置起始光标位置
tft.setTextColor(rgb888_to_565(0xFF0000, true)); // 设置颜色
tft.setTextWrap(true); // 设置自动换行
tft.print("Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur adipiscing ante sed nibh tincidunt feugiat. Mae