1.47英寸LCD SPI 显示屏

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

特性
- 172×320分辨率,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.47 英寸 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)—— 使用八点法绘制指定位置和大小的圆。输入参数 - 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:选择英文字符的背景颜色。
 
- 
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   172 //LCD宽度
#define LCD_HEIGHT  320 //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 <st7789v3.h>
#include "SPI.h"
#include "seeed.h"
st7789v3 Display;
void setup() {
  // 在此处放置您的初始化代码,仅运行一次:
  Display.SetRotate(270);
  Display.SetMirroring(MIRROR_VERTICAL);
  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, 40, 60, 240, 47);
  Display.DrawLine(40, 50, 65, 50, MAGENTA, DOT_PIXEL_2X2, LINE_STYLE_SOLID);
  Display.DrawLine(40, 55, 80, 55, MAGENTA, DOT_PIXEL_2X2, LINE_STYLE_SOLID);
  
//  Display.DrawRectangle(15, 80, 265, 150, GRAY, DOT_PIXEL_2X2, DRAW_FILL_EMPTY);
  
  Display.DrawCircle(0, 0, 25, BLUE, DOT_PIXEL_2X2, DRAW_FILL_EMPTY);
  Display.DrawCircle(0, 0, 20, BLACK, DOT_PIXEL_2X2, DRAW_FILL_EMPTY);
  Display.DrawCircle(0, 0, 15, RED, DOT_PIXEL_2X2, DRAW_FILL_EMPTY);
  Display.DrawCircle(0, 0, 10, GREEN, DOT_PIXEL_2X2, DRAW_FILL_FULL);
  Display.DrawCircle(320, 0, 25, BLUE, DOT_PIXEL_2X2, DRAW_FILL_EMPTY);
  Display.DrawCircle(320, 0, 20, BLACK, DOT_PIXEL_2X2, DRAW_FILL_EMPTY);
  Display.DrawCircle(320, 0, 15, RED, DOT_PIXEL_2X2, DRAW_FILL_EMPTY);
  Display.DrawCircle(320, 0, 10, GREEN, DOT_PIXEL_2X2, DRAW_FILL_FULL);
  Display.DrawCircle(0, 172, 25, BLUE, DOT_PIXEL_2X2, DRAW_FILL_EMPTY);
  Display.DrawCircle(0, 172, 20, BLACK, DOT_PIXEL_2X2, DRAW_FILL_EMPTY);
  Display.DrawCircle(0, 172, 15, RED, DOT_PIXEL_2X2, DRAW_FILL_EMPTY);
  Display.DrawCircle(0, 172, 10, GREEN, DOT_PIXEL_2X2, DRAW_FILL_FULL);
  Display.DrawCircle(320, 172, 25, BLUE, DOT_PIXEL_2X2, DRAW_FILL_EMPTY);
  Display.DrawCircle(320, 172, 20, BLACK, DOT_PIXEL_2X2, DRAW_FILL_EMPTY);
  Display.DrawCircle(320, 172, 15, RED, DOT_PIXEL_2X2, DRAW_FILL_EMPTY);
  Display.DrawCircle(320, 172, 10, GREEN, DOT_PIXEL_2X2, DRAW_FILL_FULL);
  Display.DrawLine(242, 110, 282, 110, GRAYBLUE, DOT_PIXEL_2X2, LINE_STYLE_SOLID);
  Display.DrawLine(267, 115, 282, 115, GRAYBLUE, DOT_PIXEL_2X2, LINE_STYLE_SOLID);
  
  Display.DrawString_EN(100, 120, "By: Citric", &Font20, WHITE, BLACK);
//  Display.DrawNum(100, 220, 123456, &Font24, RED, BRED);
  Display.DrawFloatNum(130, 140, 1.00, 2, &Font20, WHITE, BLACK);
}
您会发现 Seeed Studio 的 logo 动态显示在屏幕上。

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