Arduino之TFT_eSPI驱动彩色LCD屏

一、TFT_eSPI库简介

1.1 安装TFT_eSPI库

在User_Setup.h中进行个人屏幕参数的配置:

User_Setup.hTFT驱动板备注
TFT_MISO 
TFT_MOSISDA 
TFT_SCLKCLK 
TFT_CSCS液晶屏片选信号,低电平使能
TFT_DCRS液晶屏寄存器/数据选择信号
TFT_RSTRST液晶屏复位信号
TFT_BL液晶屏背光调节

1.2 TFT_eSPI坐标系与颜色系统

坐标系:横向为x,纵向为y

  • TFT_eSPI的颜色模式为RGB565色彩模式
  • R原色占用5bit,G原色占用6bit,B原色占用5bit。即每像素点占用5+6+5=16bit。

1.3  TFT_eSPI初始化

#include <TFT_eSPI.h>
TFT_eSPI tft = TFT_eSPI(); // 创建TFT对象

void TFT_Init()
{
  tft.init();                // 初始化
  tft.setRotation(1);        // 设置屏幕方向,0:0度,1:90度,2:180度,3:270度
  tft.fillScreen(TFT_BLACK); // 设置屏幕背景颜色
}

1.4 TFT_eSPI默认的自定义颜色 

// Default color definitions
#define TFT_BLACK       0x0000      /*   0,   0,   0 */
#define TFT_NAVY        0x000F      /*   0,   0, 128 */
#define TFT_DARKGREEN   0x03E0      /*   0, 128,   0 */
#define TFT_DARKCYAN    0x03EF      /*   0, 128, 128 */
#define TFT_MAROON      0x7800      /* 128,   0,   0 */
#define TFT_PURPLE      0x780F      /* 128,   0, 128 */
#define TFT_OLIVE       0x7BE0      /* 128, 128,   0 */
#define TFT_LIGHTGREY   0xD69A      /* 211, 211, 211 */
#define TFT_DARKGREY    0x7BEF      /* 128, 128, 128 */
#define TFT_BLUE        0x001F      /*   0,   0, 255 */
#define TFT_GREEN       0x07E0      /*   0, 255,   0 */
#define TFT_CYAN        0x07FF      /*   0, 255, 255 */
#define TFT_RED         0xF800      /* 255,   0,   0 */
#define TFT_MAGENTA     0xF81F      /* 255,   0, 255 */
#define TFT_YELLOW      0xFFE0      /* 255, 255,   0 */
#define TFT_WHITE       0xFFFF      /* 255, 255, 255 */
#define TFT_ORANGE      0xFDA0      /* 255, 180,   0 */
#define TFT_GREENYELLOW 0xB7E0      /* 180, 255,   0 */
#define TFT_PINK        0xFE19      /* 255, 192, 203 */ //Lighter pink, was 0xFC9F
#define TFT_BROWN       0x9A60      /* 150,  75,   0 */
#define TFT_GOLD        0xFEA0      /* 255, 215,   0 */
#define TFT_SILVER      0xC618      /* 192, 192, 192 */
#define TFT_SKYBLUE     0x867D      /* 135, 206, 235 */
#define TFT_VIOLET      0x915C      /* 180,  46, 226 */

1.5 TFT_eSPI自带字体

注意:无默认的中文字体,需要自己进行取模

#define LOAD_GLCD  // Font 1. Original Adafruit 8 pixel font needs ~1820 bytes in FLASH
#define LOAD_FONT2 // Font 2. Small 16 pixel high font, needs ~3534 bytes in FLASH, 96 characters
#define LOAD_FONT4 // Font 4. Medium 26 pixel high font, needs ~5848 bytes in FLASH, 96 characters
#define LOAD_FONT6 // Font 6. Large 48 pixel font, needs ~2666 bytes in FLASH, only characters 1234567890:-.apm
#define LOAD_FONT7 // Font 7. 7 segment 48 pixel font, needs ~2438 bytes in FLASH, only characters 1234567890:-.
#define LOAD_FONT8 // Font 8. Large 75 pixel font needs ~3256 bytes in FLASH, only characters 1234567890:-.

1.6 光标位置和文本相关函数

 

 注意:drawString系列的函数,绘制到屏幕末尾时,不会自动换行。

二、自定义字体库

2.1 所需软件

1.先下载processing软件,进行解压

Download Processing / Processing.org

2.使用UTF8字体生成软件进行取模

 

 之后点击生成.h即可。

2.2 测试程序

#include <TFT_eSPI.h>
#include "KaiTi_26.h"

TFT_eSPI tft = TFT_eSPI(); // 创建TFT对象

#define BLK 5 // 亮度控制引脚
void TFT_Init()
{
  tft.init();                // 初始化
  tft.fillScreen(TFT_BLACK); // 设置屏幕背景颜色
  analogWrite(BLK, 150);     // 调节屏幕亮度,0最亮,255最暗
}

void TFT_Display()
{
  tft.setTextColor(TFT_WHITE, TFT_BLACK); // 参数1:字体颜色,参数2:背景色

  tft.setTextFont(2); // 字体大小16*16
  tft.println("Hello,world");
  tft.drawString("I want to eat something", 0, 50, 2);

  tft.setTextFont(4); // 字体大小26*26
  tft.drawNumber(1234, 0, 70);
  tft.drawFloat(3.14159, 5, 0, 90);

  // 自定义字库测试
  tft.loadFont(KaiTi_26); // 加载自定义字体
  tft.setCursor(0, 150);
  tft.println("中文");
  tft.drawString("汉字测试", 0, 177);
  tft.unloadFont(); // 释放字库
}

void setup()
{
  TFT_Init();
  TFT_Display();
}

void loop() {}

 

 2.3 输出图标字体

mdl2字体参考地址:https://learn.microsoft.com/zh-cn/windows/apps/design/style/segoe-ui-symbol-font

  1. 制作图标字体的自定义字库
  2. 使用 tft.drawGlyph(unicode编码)进行输出

2.4 显示字符串

设置文本显示基准: clk.setTextDatum(CC_DATUM);  // 设置文本对齐方式:中心对齐

  clk.setColorDepth(8);
  clk.createSprite(180, 48);   // 创建一个画布,画布大小x*y
  clk.fillSprite(TFT_BLACK);   // 画布颜色
  clk.setTextColor(TFT_WHITE); // 字体颜色
  clk.setTextFont(7);          // 字体类型Font 7,字体大小:48*48
  clk.setTextDatum(TL_DATUM);  // 设置文本显示基准:左上对齐(默认对齐方式)
  clk.drawString(String(Current_Time.hour) + ":" + String(Current_Time.minute) + ":" + String(Current_Time.second), 0, 0);

三、显示变量

/*实例化对象区*/
TFT_eSPI tft = TFT_eSPI(); // 创建TFT对象
TFT_eSprite clk = TFT_eSprite(&tft);
 
  clk.setColorDepth(8);
  clk.createSprite(60, 27);    // 创建一个画布,画布大小x*y
  clk.fillSprite(TFT_BLACK);   // 画布颜色
  clk.setTextColor(TFT_WHITE); // 字体颜色
  clk.setTextFont(4);
  clk.drawNumber(Current_Time.second, 0, 0);

  clk.pushSprite(0, 30); // 把画布推送到屏幕的(x,y)位置进行显示
  clk.deleteSprite();    // 删除画布

<think>好的,用户想了解如何用Arduino IDE控制驱动为ST7735S的128x160的RGB TFT幕。首先,我需要回忆一下ST7735S驱动芯片的特点以及常用的Arduino库。ST7735S通常用于小尺寸的TFT幕,而Adafruit的ST7735库可能适用。不过,用户可能遇到了引脚连接或库配置的问题。 首先,用户需要安装正确的库。Adafruit ST7735和ST7789库是常用的,同时还需要安装Adafruit GFX库作为依赖。安装库的方法通常是通过库管理器,但用户可能不熟悉这个过程,需要详细说明。 接下来是硬件连接部分。Arduino Nano的引脚有限,需要确定幕的SPI接口。常见的引脚包括CS、DC、RST,可能还有背光控制。需要确认幕的具体引脚排列,可能需要查阅数据手册。用户可能混淆了不同型号的引脚定义,所以需要给出常见的连接方式,并提醒用户根据实际情况调整。 然后,初始化库中的参数是关键。例如,幕的偏移量(offset)和颜色模式(BGR或RGB)可能因不同幕而异。用户如果直接使用示例代码可能显示异常,需要调整构造函数中的参数。比如,Adafruit_ST7735的初始化可能需要指定正确的偏移量,否则图像会错位。 代码部分需要提供一个简单的示例,包括库的引入、引脚定义、初始化函数和循环函数。用户可能需要测试显示文本、图形等基本功能,以确认幕工作正常。此外,用户可能遇到颜色不正确的问题,这可能与初始化时的颜色顺序有关,需要调整INITR_BLACKTAB等参数。 最后,常见问题解答很重要。比如幕白可能是因为背光未开启,需要检查背光引脚是否正确连接并设置为高电平。SPI通信问题可能导致显示混乱,需要检查接线是否正确,尤其是MOSI和SCK是否接对。颜色异常可能需要调整初始化参数中的颜色模式。 总结下来,用户需要一步步的指导:安装库、连接硬件、调整代码参数、测试基本功能以及排查常见问题。需要确保每个步骤都清晰,避免技术术语过多,同时提供实际示例代码和调整建议,帮助用户顺利完成项目。</think>好的,我将分步骤为您讲解如何通过Arduino IDE驱动ST7735S芯片的128x160 TFT幕: 一、准备工作 1. 所需材料: - Arduino Nano开发板 - ST7735S驱动的128x160 TFT幕(常见型号如1.8英寸) - 杜邦线若干 - 数据线(用于连接Arduino与电脑) 2. 安装库文件: - 打开Arduino IDE - 菜单栏选择「工具」->「管理库」 - 搜索并安装以下两个库: * `Adafruit ST7735 and ST7789 Library` * `Adafruit GFX Library` 二、硬件连接(SPI接口方式) 典型接线方式: ``` TFT引脚 -> Arduino Nano引脚 VCC -> 3.3V 或 5V(根据幕规格) GND -> GND CS -> D10(片选) RESET -> D8(复位) DC/RS -> D9(数据/命令选择) SDA/MOSI -> D11(主输出从输入) SCK -> D13(时钟) LED -> 3.3V(背光控制,部分幕需要独立供电) ``` 三、示例代码 ```cpp #include <Adafruit_GFX.h> #include <Adafruit_ST7735.h> // 定义引脚 #define TFT_CS 10 #define TFT_RST 8 #define TFT_DC 9 // 初始化对象(不同幕需调整参数) Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_RST); void setup() { tft.initR(INITR_BLACKTAB); // 初始化幕(黑底选项卡模式) tft.setRotation(2); // 设置显示方向:0-3对应4种旋转方式 tft.fillScreen(ST7735_BLACK); tft.setTextColor(ST7735_WHITE); tft.setTextSize(1); tft.println("Hello World!"); // 绘制测试图形 tft.drawRect(0, 0, tft.width(), tft.height(), ST7735_RED); } void loop() { // 动态显示示例 static int counter = 0; tft.setCursor(10, 30); tft.setTextColor(ST7735_GREEN); tft.print("Counter: "); tft.println(counter++); delay(1000); } ``` 四、常见问题排查 1. 幕白: - 检查背光LED是否接电 - 确认复位引脚是否接好 - 尝试调整`initR()`的参数为`INITR_GREENTAB`或`INITR_REDTAB` 2. 显示偏移/错位: ```cpp // 在初始化后添加偏移调整(参数根据实际显示调整) tft.setRotation(2); tft.setColRowStart(26, 1); // 列偏移26,行偏移1 ``` 3. 颜色异常: ```cpp // 在setup()中添加颜色校准 tft.invertDisplay(true); // 反转颜色显示 ``` 五、进阶功能 1. 显示位图: - 使用`tft.drawBitmap()`函数 - 推荐使用Image2LCD软件转换图片为数组 2. 优化刷新速度: - 启用硬件SPI(修改接线使用Nano的硬件SPI引脚) - 使用`startWrite()`和`endWrite()`包裹批量绘制操作 建议首次使用时: 1. 先使用库中的示例文件测试(File -> Examples -> Adafruit ST7735) 2. 逐步增加显示内容复杂度 3. 注意幕供电需求,高亮度时可能需要外接电源
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值