Arduino TFT_eSPI库来驱动SPI接口的LCD显示详解


  • 相关库github地址:https:///Bodmer/TFT_eSPI

文字显示过程详解

TFT eSPI显示文字的方式比较有意思,通过创建一个画布,然后将文字在画布中显示,最后将画布推送到屏幕的指定位置,具体步骤如下:
  1. 导入相关函数,并创建实例.
  2. 最后一行就是创建“画布”实例
    .
    3.屏幕初始化

arduino tft espi库 arduino tft espi库汉字_TFT_eSPI


4.文字真正的部分。

arduino tft espi库 arduino tft espi库汉字_#define_02

流程梳理

  1. 创建指定大小的画布(需小于屏幕的最大尺寸)
  2. 设置画布的填充颜色
  3. 加载显示的字体(自制的字库)
  4. 设置文本位置参考基准
  5. 设置字体显示区域的颜色,含背景颜色和字体颜色(背景颜色请于画布填充颜
    色一致,不然会很丑)
  6. 指定文字(如“好好学习”)显示在画布的指定位置
  7. 将画图推送至屏幕的指定位置
  8. 删除画布
  9. 卸载字体,释放资源(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 进制数据,显示的颜色可通过如下计算:

arduino tft espi库 arduino tft espi库汉字_#define_03


如果显示白色,则 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内存。

以介绍的是创建一个画布,创建多个画布在屏幕上显示都是可以实现的,切记,不要出现画布重叠现象。


  珍惜现在的时光, 每一天都可能决定你的未来。