1.69英寸LCD SPI 显示屏

简介
这款1.69英寸LCD显示屏是一款1.69英寸的串行液晶圆角显示屏。它提供了240×280的高分辨率和262K RGB显示色彩,能够呈现清晰、色彩丰富的图像效果。设计这款显示屏的初衷是提供一个简单、高质量的显示解决方案,以满足各种DIY或物联网(IoT)项目的需求。
它采用8针接口,其中4针用于背光电源供应,另外4针通过SPI与ST7789V2驱动IC进行通信。我们已经为您准备了驱动库和示例代码,方便您快速开始项目开发。
规格参数
工作电压 | 3.3V / 5V | 分辨率 | 240 × 280 像素 |
---|---|---|---|
通信接口 | 4线 SPI | 显示尺寸 | 27.97 × 32.63mm |
显示面板 | IPS | 像素间距 | 0.11655 × 0.11655mm |
驱动芯片 | ST7789V2 | 外形尺寸 | 31.50 × 39.00mm |
外形尺寸


特性
- 240×280分辨率,262K RGB色彩,显示效果清晰且色彩丰富
- SPI接口,减少所需IO引脚,支持控制板如XIAO/Raspberry Pi/Arduino/STM32
- 提供开发资源(包括XIAO/Raspberry Pi/Arduino/STM32的示例代码)
应用场景
-
手环或手表:该显示屏可以与XIAO微控制器组装,制作手环或手表设备。凭借其高分辨率和色彩丰富的显示效果,它可以展示日期和时间信息。其小巧的尺寸使其成为快速创建原型的理想组件。
-
PC信息显示屏:您可以使用此LCD显示屏连接转换板,用于显示PC运行信息,例如温度和风扇转速。其螺栓设计可以帮助您轻松将其固定在PC机箱上。
硬件概述

入门指南
硬件准备
现在我们将向您展示如何使用我们的 XIAO nRF52840 开发板,该板包含 6 自由度 IMU、蓝牙和 PDM 麦克风。您可能会意识到,这块开发板与显示屏是构建数字手表所需的关键组件。
接下来,您需要将显示屏的引脚连接到 XIAO nRF52840 开发板,请按照下图进行连接:
1.69 英寸 LCD SPI 显示屏 | XIAO nRF52840 |
---|---|
VCC | 3V3 |
GND | GND |
DIN | D10 |
CLK | D8 |
CS | D1 |
DC | D3 |
RST | D0 |
BL | D6 |

Arduino 库概述
如果这是您第一次使用 Arduino,我们强烈建议您参考 Arduino 入门指南。
基于 Waveshare 提供的 Arduino 示例程序,我们编写了一个适用于整个 XIAO 系列的 Arduino 库,您可以通过以下按钮直接访问该库的 Github 页面。
功能
在开始开发代码之前,让我们先了解一下库中可用的功能。
-
void Init(uint8_t cs = CS_PIN, uint8_t dc = DC_PIN, uint8_t rst = RST_PIN, uint8_t bl = BL_PIN)
—— 通用寄存器初始化。输入参数
cs
: 设置芯片选择引脚,默认值为 XIAO 的 D1 引脚。dc
: 设置 DC 引脚,默认值为 XIAO 的 D3 引脚。rst
: 设置复位引脚,默认值为 XIAO 的 D0 引脚。bl
: 设置背光控制引脚,默认值为 XIAO 的 D6 引脚。
-
void SetBacklight(uint16_t Value)
—— 设置背光。输入参数
Value
: 背光强度,范围为 0 到 255。
-
void Reset(void)
—— 硬件复位。 -
void SetCursor(uint16_t Xstart, uint16_t Ystart, uint16_t Xend, uint16_t Yend)
—— 设置光标位置。输入参数
Xstart
: 起始 uint16_t x 坐标。Ystart
: 起始 uint16_t y 坐标。Xend
: 结束 uint16_t x 坐标。Yend
: 结束 uint16_t y 坐标。
-
void Clear(uint16_t Color)
—— 清屏功能,将屏幕刷新为指定颜色。输入参数
Color
: 您希望清屏的颜色。
-
void ClearWindow(uint16_t Xstart, uint16_t Ystart, uint16_t Xend, uint16_t Yend, uint16_t color)
—— 将某一区域刷新为相同颜色。输入参数
Xstart
: 起始 uint16_t x 坐标。Ystart
: 起始 uint16_t y 坐标。Xend
: 结束 uint16_t x 坐标。Yend
: 结束 uint16_t y 坐标。color
: 设置颜色。
-
void SetWindowColor(uint16_t Xstart, uint16_t Ystart, uint16_t Xend, uint16_t Yend, uint16_t Color)
—— 设置某一区域的颜色。输入参数
Xstart
: 起始 uint16_t x 坐标。Ystart
: 起始 uint16_t y 坐标。Xend
: 结束 uint16_t x 坐标。Yend
: 结束 uint16_t y 坐标。color
: 设置颜色。
-
void SetUWORD(uint16_t x, uint16_t y, uint16_t Color)
—— 绘制一个 uint16_t。输入参数
x
: 设置 X 坐标。y
: 设置 Y 坐标。Color
: 设置颜色。
-
void SetRotate(uint16_t Rotate)
—— 选择图像旋转。输入参数
Rotate
: ROTATE_0, ROTATE_90, ROTATE_180, ROTATE_270。
-
void SetMirroring(uint8_t mirror)
—— 选择图像镜像。输入参数
mirror
: MIRROR_NONE, MIRROR_HORIZONTAL, MIRROR_VERTICAL, MIRROR_ORIGIN。
-
void SetPixel(uint16_t Xpoint, uint16_t Ypoint, uint16_t Color)
—— 绘制像素。输入参数
Xpoint
:X坐标点。Ypoint
:Y坐标点。Color
:绘制的颜色。
-
void DrawPoint(uint16_t Xpoint, uint16_t Ypoint, uint16_t Color, DOT_PIXEL Dot_Pixel, DOT_STYLE Dot_FillWay)
—— 绘制点 (Xpoint, Ypoint),填充颜色。输入参数
Xpoint
:点的X坐标。Ypoint
:点的Y坐标。Color
:设置颜色。Dot_Pixel
:点的大小。
-
void DrawLine(uint16_t Xstart, uint16_t Ystart, uint16_t Xend, uint16_t Yend, uint16_t Color, DOT_PIXEL Line_width, LINE_STYLE Line_Style)
—— 绘制任意斜率的线段。输入参数
Xstart
:起始点的X坐标。Ystart
:起始点的Y坐标。Xend
:终点的X坐标。Yend
:终点的Y坐标。Color
:线段的颜色。
-
void DrawRectangle(uint16_t Xstart, uint16_t Ystart, uint16_t Xend, uint16_t Yend, uint16_t Color, DOT_PIXEL Line_width, DRAW_FILL Filled)
—— 绘制矩形。输入参数
Xstart
:起始点的X坐标。Ystart
:起始点的Y坐标。Xend
:终点的X坐标。Yend
:终点的Y坐标。Color
:线段的颜色。Filled
:是否填充--- 1:实心,0:空心。
-
void DrawCircle(uint16_t X_Center, uint16_t Y_Center, uint16_t Radius, uint16_t Color, DOT_PIXEL Line_width, DRAW_FILL Draw_Fill)
—— 使用8点法绘制指定位置和大小的圆。输入参数
X_Center
:圆心的X坐标。Y_Center
:圆心的Y坐标。Radius
:圆的半径。Color
:圆的颜色。Filled
:是否填充:1:填充,0:不填充。
-
void DrawString_EN(int16_t Xstart, int16_t Ystart, const char * pString, sFONT* Font, int16_t Color_Background, int16_t Color_Foreground)
—— 显示字符串。输入参数
Xstart
:X坐标。Ystart
:Y坐标。pString
:要显示的英文字符串的首地址。Font
:显示字符大小的结构体指针。Color_Background
:选择英文字符的背景颜色。Color_Foreground
:选择英文字符的前景颜色。
-
void DrawNum(int16_t Xpoint, int16_t Ypoint, int32_t Nummber, sFONT* Font, int16_t Color_Background, int16_t Color_Foreground)
—— 显示数字。输入参数
Xstart
:X坐标。Ystart
:Y坐标。Nummber
:显示的数字。Font
:显示字符大小的结构体指针。Color_Background
:选择英文字符的背景颜色。Color_Foreground
:选择英文字符的前景颜色。
-
void DrawFloatNum(int16_t Xpoint, int16_t Ypoint, double Nummber, int8_t Decimal_Point, sFONT* Font, int16_t Color_Background, int16_t Color_Foreground)
—— 显示浮点数。输入参数
Xstart
:X坐标。Ystart
:Y坐标。Nummber
:要显示的浮点数据。Decimal_Point
:显示的小数位数。Font
:显示字符大小的结构体指针。Color_Background
:选择英文字符的背景颜色。Color_Foreground
:选择英文字符的前景颜色。
-
void DrawImage(const unsigned char *image, int16_t xStart, int16_t yStart, int16_t W_Image, int16_t H_Image)
—— 显示图像。输入参数
image
:图像起始地址。xStart
:X起始坐标。yStart
:Y起始坐标。xEnd
:图像宽度。yEnd
:图像高度。
默认变量
#define RST_PIN D0
#define DC_PIN D3
#define BL_PIN D6
#define CS_PIN D1
#define LCD_WIDTH 240 //LCD宽度
#define LCD_HEIGHT 280 //LCD高度
/**
* 图像颜色
**/
#define WHITE 0xFFFF
#define BLACK 0x0000
#define BLUE 0x001F
#define BRED 0XF81F
#define GRED 0XFFE0
#define GBLUE 0X07FF
#define RED 0xF800
#define MAGENTA 0xF81F
#define GREEN 0x07E0
#define CYAN 0x7FFF
#define YELLOW 0xFFE0
#define BROWN 0XBC40
#define BRRED 0XFC07
#define GRAY 0X8430
#define DARKBLUE 0X01CF
#define LIGHTBLUE 0X7D7C
#define GRAYBLUE 0X5458
#define LIGHTGREEN 0X841F
#define LGRAY 0XC618
#define LGRAYBLUE 0XA651
#define LBBLUE 0X2B12
/**
* 显示旋转
**/
#define ROTATE_0 0
#define ROTATE_90 90
#define ROTATE_180 180
#define ROTATE_270 270
#define MIRROR_NONE 0x00
#define MIRROR_HORIZONTAL 0x01
#define MIRROR_VERTICAL 0x02
#define MIRROR_ORIGIN 0x03
安装
由于您已经下载了ZIP库,请打开您的Arduino IDE,点击 Sketch > Include Library > Add .ZIP Library。选择您刚刚下载的ZIP文件,如果库安装正确,您将在通知窗口中看到 Library added to your libraries。这表示库已成功安装。

XIAO 示例
在正确下载并安装库后,您可以在示例文件夹中找到两个示例程序,分别是 helloworld.ino 和 bgcolor.ino。bgcolor.ino 是一个展示背景颜色的示例,我们将红色设置为默认颜色。而 helloworld.ino 是一个展示我们公司 logo 动画的示例,该示例包含 bgcolor 示例中的效果。
#include <st7789v2.h>
#include "SPI.h"
#include "seeed.h"
st7789v2 Display;
void setup() {
// 在此处放置您的初始化代码,仅运行一次:
Display.SetRotate(270);
Display.Init();
Display.SetBacklight(100);
Display.Clear(WHITE);
}
void loop() {
// 在此处放置您的主代码,循环运行:
// Display.SetPixel(100, 100, RED);
// Display.DrawPoint(50, 50, YELLOW, DOT_PIXEL_8X8, DOT_FILL_AROUND);
Display.DrawImage(gImage_seeed, 20, 90, 240, 47);
Display.DrawLine(15, 65, 65, 65, MAGENTA, DOT_PIXEL_2X2, LINE_STYLE_SOLID);
Display.DrawLine(15, 70, 80, 70, MAGENTA, DOT_PIXEL_2X2, LINE_STYLE_SOLID);
Display.DrawRectangle(15, 80, 265, 150, GRAY, DOT_PIXEL_2X2, DRAW_FILL_EMPTY);
Display.DrawCircle(10, 10, 25, BLUE, DOT_PIXEL_2X2, DRAW_FILL_EMPTY);
Display.DrawCircle(10, 10, 20, BLACK, DOT_PIXEL_2X2, DRAW_FILL_EMPTY);
Display.DrawCircle(10, 10, 15, RED, DOT_PIXEL_2X2, DRAW_FILL_EMPTY);
Display.DrawCircle(10, 10, 10, GREEN, DOT_PIXEL_2X2, DRAW_FILL_FULL);
Display.DrawCircle(270, 10, 25, BLUE, DOT_PIXEL_2X2, DRAW_FILL_EMPTY);
Display.DrawCircle(270, 10, 20, BLACK, DOT_PIXEL_2X2, DRAW_FILL_EMPTY);
Display.DrawCircle(270, 10, 15, RED, DOT_PIXEL_2X2, DRAW_FILL_EMPTY);
Display.DrawCircle(270, 10, 10, GREEN, DOT_PIXEL_2X2, DRAW_FILL_FULL);
Display.DrawCircle(10, 230, 25, BLUE, DOT_PIXEL_2X2, DRAW_FILL_EMPTY);
Display.DrawCircle(10, 230, 20, BLACK, DOT_PIXEL_2X2, DRAW_FILL_EMPTY);
Display.DrawCircle(10, 230, 15, RED, DOT_PIXEL_2X2, DRAW_FILL_EMPTY);
Display.DrawCircle(10, 230, 10, GREEN, DOT_PIXEL_2X2, DRAW_FILL_FULL);
Display.DrawCircle(270, 230, 25, BLUE, DOT_PIXEL_2X2, DRAW_FILL_EMPTY);
Display.DrawCircle(270, 230, 20, BLACK, DOT_PIXEL_2X2, DRAW_FILL_EMPTY);
Display.DrawCircle(270, 230, 15, RED, DOT_PIXEL_2X2, DRAW_FILL_EMPTY);
Display.DrawCircle(270, 230, 10, GREEN, DOT_PIXEL_2X2, DRAW_FILL_FULL);
Display.DrawLine(200, 160, 265, 160, GRAYBLUE, DOT_PIXEL_2X2, LINE_STYLE_SOLID);
Display.DrawLine(215, 165, 265, 165, GRAYBLUE, DOT_PIXEL_2X2, LINE_STYLE_SOLID);
Display.DrawString_EN(20, 180, "By: Citric", &Font20, WHITE, BLACK);
// Display.DrawNum(100, 220, 123456, &Font24, RED, BRED);
Display.DrawFloatNum(100, 210, 1.00, 2, &Font16, WHITE, BLACK);
}
您会发现 Seeed Studio 的 logo 动态显示在屏幕上。

故障排除
1. 当屏幕连接时,我重新编程后屏幕无法工作?
答:如果您的程序正在不断与屏幕通信,重新编程可能会中断此过程,导致屏幕出现故障。您可以尝试关闭电源以恢复屏幕的正常运行。
2. 我应该为显示屏使用什么样的电源?
答:电路板可以接受 3.3V 或 5V 的输入电压,因此您可以使用该范围内的电源。
3. 我的显示屏颜色看起来不正确。可能是什么问题?
答:请确保您的代码中正确初始化了显示屏,并且您使用了正确的颜色值。如果问题仍然存在,可能是显示屏或连接线出现问题。请检查连接,或者尝试使用另一块显示屏(如果有)。
资源
技术支持与产品讨论
感谢您选择我们的产品!我们致力于为您提供多种支持,以确保您使用我们的产品时拥有顺畅的体验。我们提供多个沟通渠道,以满足不同的偏好和需求。