Arduino TFT_eSPI库来驱动SPI接口的LCD显示详解
- 相关库github地址:https:///Bodmer/TFT_eSPI
文字显示过程详解
TFT eSPI显示文字的方式比较有意思,通过创建一个画布,然后将文字在画布中显示,最后将画布推送到屏幕的指定位置,具体步骤如下:
- 导入相关函数,并创建实例.
- 最后一行就是创建“画布”实例
.
3.屏幕初始化

4.文字真正的部分。

流程梳理
- 创建指定大小的画布(需小于屏幕的最大尺寸)
- 设置画布的填充颜色
- 加载显示的字体(自制的字库)
- 设置文本位置参考基准
- 设置字体显示区域的颜色,含背景颜色和字体颜色(背景颜色请于画布填充颜
色一致,不然会很丑) - 指定文字(如“好好学习”)显示在画布的指定位置
- 将画图推送至屏幕的指定位置
- 删除画布
- 卸载字体,释放资源(RAM)
示例代码
#include <TFT_eSPI.h>
#include <SPI.h>
#include <TJpg_Decoder.h> //导入jpg解码函数库
#include "Font\YaHei_20.h" //导入你自己的图片库
TFT_eSPI tft = TFT_eSPI();
TFT_eSprite clk = TFT_eSprite(&tft);
void setup() {
tft.init(); //初始化TFT屏幕
// 设置屏幕显示的旋转角度,参数为:0, 1, 2, 3
// 分别代表 0°、90°、180°、270°
tft.setRotation(2);
tft.fillScreen(0x0000); //屏幕填充颜色,如果没有设置,没有显示的区域会发现花屏
clk.createSprite(240, 80); //创建画布,尺寸大小:长 240 像素、
宽 80 像素,这个大小不可超过屏幕的最大显示像素
clk.fillSprite(0xFFFF);
clk.loadFont(YaHei_20);//加载的字库
clk.setTextDatum(CC_DATUM); //设置文本位置参考基准,CC_DATUM 设置为上下左右居中
clk.setTextColor(TFT_RED, 0xFFFF);
clk.drawString("天天向上",120,40);
clk.pushSprite(0,80);
clk.deleteSprite();//是删除画布
clk.unloadFont(); //和卸载字体
}
void loop() {
}- 编译信息
使用 2.3.59 版本的库 TFT_eSPI 在文件夹: C:\Users\Administrator\Documents\Arduino\libraries\TFT_eSPI
使用 1.0 版本的库 SPI 在文件夹: C:\Users\Administrator\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.6\libraries\SPI
使用 1.0 版本的库 FS 在文件夹: C:\Users\Administrator\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.6\libraries\FS
使用 1.0 版本的库 SPIFFS 在文件夹: C:\Users\Administrator\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.6\libraries\SPIFFS
使用 0.0.3 版本的库 TJpg_Decoder 在文件夹: C:\Program Files (x86)\Arduino\libraries\TJpg_Decoder
使用 1.0.5 版本的库 SD 在文件夹: C:\Users\Administrator\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.6\libraries\SD
"C:\\Users\\Administrator\\AppData\\Local\\Arduino15\\packages\\esp32\\tools\\xtensa-esp32-elf-gcc\\1.22.0-97-gc752ad5-5.2.0/bin/xtensa-esp32-elf-size" -A "d:\\arduino\\MyHexDir/demo2_disPlay_Font.ino.elf"
项目使用了 1738618 字节,占用了 (13%) 程序存储空间。最大为 13369344 字节。
全局变量使用了17344字节,(5%)的动态内存,余留310336字节局部变量。最大为327680字节。-
clk.createSprite(240, 80);函数:创建画布,尺寸大小:长240像素、宽80像素,这个大小不可超过屏幕的最大显示像素。 -
clk.fillSprite(0xFFFF);函数:设置画布的填充颜色,0xFFFF为黑色,这个颜色怎么来取呢?那就要了解 RGB 色彩模式了,TFT eSPI 使用的是一种 RGB565,即每个像素由红、绿、蓝三基色组成,其中红占用 5bit,绿色占 6bit,蓝色占 5bit,所以一个像素就是 5+6+5=16bit,正好是一个 4 位的 16 进制数据,显示的颜色可通过如下计算:

如果显示白色,则 RGB 全部亮,即为 0xFFFF,其他颜色:
#define BLACK 0x0000 // 黑色
#define NAVY 0x000F // 深蓝色
#define DGREEN 0x03E0 // 深绿色
#define DCYAN 0x03EF // 深青色
#define MAROON 0x7800 // 深红色
#define PURPLE 0x780F // 紫色
#define OLIVE 0x7BE0 // 橄榄绿
#define LGRAY 0xC618 // 灰白色
#define DGRAY 0x7BEF // 深灰色
#define BLUE 0x001F // 蓝色
#define GREEN 0x07E0 // 绿色
#define CYAN 0x07FF // 青色
#define RED 0xF800 // 红色
#define MAGENTA 0xF81F // 品红
#define YELLOW 0xFFE0 // 黄色
#define WHITE 0xFFFF // 白色-
clk.setTextColor(TFT_RED, 0xFFFF);函数:设置字体颜色和背景色,注意前面这个参数可以修改成0x0000,显示的就是黑色,后面参数0xFFFF则是背景颜色。 clk.drawString("天天向上",120,40);函数:显示的文字,且在画布内的哪个位置显示
因为坐标是从 0 开始,作为是 119 和 79,蓝色部分为画布的大小,因为文本基准位置的参数是 CC_DATUM,所以 120,40 位置上下左右居中显示,也就是“天天向上”的中间位置在 120,40 位置显示。clk.pushSprite(0,80);函数:推送画布内容在屏幕指定坐标显示。
绿色为屏幕,箭头位置坐标为(0,80),将画布在此位置显示.-
clk.deleteSprite(); clk.unloadFont();这;两个函数的作用:释放RAM内存。
以介绍的是创建一个画布,创建多个画布在屏幕上显示都是可以实现的,切记,不要出现画布重叠现象。
珍惜现在的时光, 每一天都可能决定你的未来。 |
















