0


【ESP32+LVGL】Vscode+platformio之GUI-Guider工程代码移植

【ESP32+LVGL】Vscode+platformio之GUI-Guider工程代码移植

文章目录

所需组件

  • ESP32开发板(本文以乐鑫系列ESP32-WROOM-32U为例,基本espressif系列的ESP32都行)
  • ST7789+CST816驱动的触摸屏(这里以中景园1.69寸240*280的触摸屏为例)
  • Vscode+platformio插件
  • GUI-Guider 1.5版本(版本太新导出工程文件可能不太一样)
  • 触摸屏转接板(最好有,比较方便接线,直接连线问题应该也不大)

一、GUI-Guider工程搭建并导出

1.工程创建

打开GUI-Guider,新建一个工程,LVGL版本选择v8.3.2

在这里插入图片描述

在这里插入图片描述

选一个空白模板,继续下一步

在这里插入图片描述

在这里插入图片描述

取好名字并选择一个文件夹存放,根据自己的显示屏进行尺寸设置和类型设置,然后点击创建

我这里使用的是1.69寸ST7789显示驱动+CST816触摸驱动的触摸屏,规格是240*280

在这里插入图片描述

创建好后,如下:

在这里插入图片描述

2.界面设计

先在左侧对screen界面组件进行复制粘贴出第二个

在这里插入图片描述

对第一个界面进行设计,添加一个组件按钮

在这里插入图片描述

第二个界面也是同理,不过需要把Button文本更改成Button2,方便识别出来

在这里插入图片描述

还可以给它换个背景颜色(点击该按钮后,进入属性设置即可)

在这里插入图片描述

3.事件添加

回到第一个界面,点击按钮,给它添加点击跳转到第二个界面的事件

在这里插入图片描述

第二个界面的按钮也是同理

在这里插入图片描述

接着,进行代码生成并开始模拟

在这里插入图片描述
在这里插入图片描述

等待代码生成和模拟器运行

在这里插入图片描述

代码生成完毕,模拟器成功运行(如果运行失败,可以关掉重新打开再试试)

在这里插入图片描述

在这里插入图片描述

4.工程导出

代码生成完毕后,会自动导出到我们之前选择的项目文件夹中,主要是移植custom和generated这两个文件夹

在这里插入图片描述

二、Platformio工程搭建

打开Vscode,利用platformio插件新建一个ESP32工程,主板类型选择如下:

在这里插入图片描述

查看工程配置,如下则说明配置正确,至此Platformio工程搭建完毕

在这里插入图片描述

三、库移植与配置

Platformio工程最好能先移植好lvgl并运行,下面是对应我触摸屏的lvgl移植和显示触摸库的移植与配置

根据自己情况,移植好了的直接往第三步GUI-Guider工程库移植走

1.lvgl库和触摸驱动库的移植与配置

利用platformio插件,分别搜索lvgl,TFT_eSPI和CST816S库,并把它们添加到新建好的工程中

在这里插入图片描述

添加lvgl库

在这里插入图片描述

添加TFT_eSPI库

在这里插入图片描述

添加CST816S库

在这里插入图片描述

2.库文件配置

在TFT_eSPI库下找到User_Setup.h文件并对其进行对应的修改

在这里插入图片描述

修改前,代码如下:

//                            USER DEFINED SETTINGS//   Set driver type, fonts to be loaded, pins used and SPI control method etc////   See the User_Setup_Select.h file if you wish to be able to define multiple//   setups and then easily select which setup file is used by the compiler.////   If this file is edited correctly then all the library example sketches should//   run without the need to make any more changes for a particular hardware setup!//   Note that some sketches are designed for a particular TFT pixel width/height// User defined information reported by "Read_User_Setup" test & diagnostics example#defineUSER_SETUP_INFO"User_Setup"// Define to disable all #warnings in library (can be put in User_Setup_Select.h)//#define DISABLE_ALL_LIBRARY_WARNINGS// ##################################################################################//// Section 1. Call up the right driver file and any options for it//// ##################################################################################// Define STM32 to invoke optimised processor support (only for STM32)//#define STM32// Defining the STM32 board allows the library to optimise the performance// for UNO compatible "MCUfriend" style shields//#define NUCLEO_64_TFT//#define NUCLEO_144_TFT// STM32 8 bit parallel only:// If STN32 Port A or B pins 0-7 are used for 8 bit parallel data bus bits 0-7// then this will improve rendering performance by a factor of ~8x//#define STM_PORTA_DATA_BUS//#define STM_PORTB_DATA_BUS// Tell the library to use parallel mode (otherwise SPI is assumed)//#define TFT_PARALLEL_8_BIT//#defined TFT_PARALLEL_16_BIT // **** 16 bit parallel ONLY for RP2040 processor ****// Display type -  only define if RPi display//#define RPI_DISPLAY_TYPE // 20MHz maximum SPI// Only define one driver, the other ones must be commented out#defineILI9341_DRIVER// Generic driver for common displays//#define ILI9341_2_DRIVER     // Alternative ILI9341 driver, see https://github.com/Bodmer/TFT_eSPI/issues/1172//#define ST7735_DRIVER      // Define additional parameters below for this display//#define ILI9163_DRIVER     // Define additional parameters below for this display//#define S6D02A1_DRIVER//#define RPI_ILI9486_DRIVER // 20MHz maximum SPI//#define HX8357D_DRIVER//#define ILI9481_DRIVER//#define ILI9486_DRIVER//#define ILI9488_DRIVER     // WARNING: Do not connect ILI9488 display SDO to MISO if other devices share the SPI bus (TFT SDO does NOT tristate when CS is high)//#define ST7789_DRIVER      // Full configuration option, define additional parameters below for this display//#define ST7789_2_DRIVER    // Minimal configuration option, define additional parameters below for this display//#define R61581_DRIVER//#define RM68140_DRIVER//#define ST7796_DRIVER//#define SSD1351_DRIVER//#define SSD1963_480_DRIVER//#define SSD1963_800_DRIVER//#define SSD1963_800ALT_DRIVER//#define ILI9225_DRIVER//#define GC9A01_DRIVER// Some displays support SPI reads via the MISO pin, other displays have a single// bi-directional SDA pin and the library will try to read this via the MOSI line.// To use the SDA line for reading data from the TFT uncomment the following line:// #define TFT_SDA_READ      // This option is for ESP32 ONLY, tested with ST7789 and GC9A01 display only// For ST7735, ST7789 and ILI9341 ONLY, define the colour order IF the blue and red are swapped on your display// Try ONE option at a time to find the correct colour order for your display//  #define TFT_RGB_ORDER TFT_RGB  // Colour order Red-Green-Blue//  #define TFT_RGB_ORDER TFT_BGR  // Colour order Blue-Green-Red// For M5Stack ESP32 module with integrated ILI9341 display ONLY, remove // in line below// #define M5STACK// For ST7789, ST7735, ILI9163 and GC9A01 ONLY, define the pixel width and height in portrait orientation// #define TFT_WIDTH  80// #define TFT_WIDTH  128// #define TFT_WIDTH  172 // ST7789 172 x 320// #define TFT_WIDTH  170 // ST7789 170 x 320// #define TFT_WIDTH  240 // ST7789 240 x 240 and 240 x 320// #define TFT_HEIGHT 160// #define TFT_HEIGHT 128// #define TFT_HEIGHT 240 // ST7789 240 x 240// #define TFT_HEIGHT 320 // ST7789 240 x 320// #define TFT_HEIGHT 240 // GC9A01 240 x 240// For ST7735 ONLY, define the type of display, originally this was based on the// colour of the tab on the screen protector film but this is not always true, so try// out the different options below if the screen does not display graphics correctly,// e.g. colours wrong, mirror images, or stray pixels at the edges.// Comment out ALL BUT ONE of these options for a ST7735 display driver, save this// this User_Setup file, then rebuild and upload the sketch to the board again:// #define ST7735_INITB// #define ST7735_GREENTAB// #define ST7735_GREENTAB2// #define ST7735_GREENTAB3// #define ST7735_GREENTAB128    // For 128 x 128 display// #define ST7735_GREENTAB160x80 // For 160 x 80 display (BGR, inverted, 26 offset)// #define ST7735_ROBOTLCD       // For some RobotLCD arduino shields (128x160, BGR, https://docs.arduino.cc/retired/getting-started-guides/TFT)// #define ST7735_REDTAB// #define ST7735_BLACKTAB// #define ST7735_REDTAB160x80   // For 160 x 80 display with 24 pixel offset// If colours are inverted (white shows as black) then uncomment one of the next// 2 lines try both options, one of the options should correct the inversion.// #define TFT_INVERSION_ON// #define TFT_INVERSION_OFF// ##################################################################################//// Section 2. Define the pins that are used to interface with the display here//// ##################################################################################// If a backlight control signal is available then define the TFT_BL pin in Section 2// below. The backlight will be turned ON when tft.begin() is called, but the library// needs to know if the LEDs are ON with the pin HIGH or LOW. If the LEDs are to be// driven with a PWM signal or turned OFF/ON then this must be handled by the user// sketch. e.g. with digitalWrite(TFT_BL, LOW);// #define TFT_BL   32            // LED back-light control pin// #define TFT_BACKLIGHT_ON HIGH  // Level to turn ON back-light (HIGH or LOW)// We must use hardware SPI, a minimum of 3 GPIO pins is needed.// Typical setup for ESP8266 NodeMCU ESP-12 is ://// Display SDO/MISO  to NodeMCU pin D6 (or leave disconnected if not reading TFT)// Display LED       to NodeMCU pin VIN (or 5V, see below)// Display SCK       to NodeMCU pin D5// Display SDI/MOSI  to NodeMCU pin D7// Display DC (RS/AO)to NodeMCU pin D3// Display RESET     to NodeMCU pin D4 (or RST, see below)// Display CS        to NodeMCU pin D8 (or GND, see below)// Display GND       to NodeMCU pin GND (0V)// Display VCC       to NodeMCU 5V or 3.3V//// The TFT RESET pin can be connected to the NodeMCU RST pin or 3.3V to free up a control pin//// The DC (Data Command) pin may be labelled AO or RS (Register Select)//// With some displays such as the ILI9341 the TFT CS pin can be connected to GND if no more// SPI devices (e.g. an SD Card) are connected, in this case comment out the #define TFT_CS// line below so it is NOT defined. Other displays such at the ST7735 require the TFT CS pin// to be toggled during setup, so in these cases the TFT_CS line must be defined and connected.//// The NodeMCU D0 pin can be used for RST////// Note: only some versions of the NodeMCU provide the USB 5V on the VIN pin// If 5V is not available at a pin you can use 3.3V but backlight brightness// will be lower.// ###### EDIT THE PIN NUMBERS IN THE LINES FOLLOWING TO SUIT YOUR ESP8266 SETUP ######// For NodeMCU - use pin numbers in the form PIN_Dx where Dx is the NodeMCU pin designation#defineTFT_MISOPIN_D6  // Automatically assigned with ESP8266 if not defined#defineTFT_MOSIPIN_D7  // Automatically assigned with ESP8266 if not defined#defineTFT_SCLKPIN_D5  // Automatically assigned with ESP8266 if not defined#defineTFT_CSPIN_D8  // Chip select control pin D8#defineTFT_DCPIN_D3  // Data Command control pin#defineTFT_RSTPIN_D4  // Reset pin (could connect to NodeMCU RST, see next line)//#define TFT_RST  -1     // Set TFT_RST to -1 if the display RESET is connected to NodeMCU RST or 3.3V//#define TFT_BL PIN_D1  // LED back-light (only for ST7789 with backlight control pin)//#define TOUCH_CS PIN_D2     // Chip select pin (T_CS) of touch screen//#define TFT_WR PIN_D2       // Write strobe for modified Raspberry Pi TFT only// ######  FOR ESP8266 OVERLAP MODE EDIT THE PIN NUMBERS IN THE FOLLOWING LINES  ######// Overlap mode shares the ESP8266 FLASH SPI bus with the TFT so has a performance impact// but saves pins for other functions. It is best not to connect MISO as some displays// do not tristate that line when chip select is high!// Note: Only one SPI device can share the FLASH SPI lines, so a SPI touch controller// cannot be connected as well to the same SPI signals.// On NodeMCU 1.0 SD0=MISO, SD1=MOSI, CLK=SCLK to connect to TFT in overlap mode// On NodeMCU V3  S0 =MISO, S1 =MOSI, S2 =SCLK// In ESP8266 overlap mode the following must be defined//#define TFT_SPI_OVERLAP// In ESP8266 overlap mode the TFT chip select MUST connect to pin D3//#define TFT_CS   PIN_D3//#define TFT_DC   PIN_D5  // Data Command control pin//#define TFT_RST  PIN_D4  // Reset pin (could connect to NodeMCU RST, see next line)//#define TFT_RST  -1  // Set TFT_RST to -1 if the display RESET is connected to NodeMCU RST or 3.3V// ###### EDIT THE PIN NUMBERS IN THE LINES FOLLOWING TO SUIT YOUR ESP32 SETUP   ######// For ESP32 Dev board (only tested with ILI9341 display)// The hardware SPI can be mapped to any pins//#define TFT_MISO 19//#define TFT_MOSI 23//#define TFT_SCLK 18//#define TFT_CS   15  // Chip select control pin//#define TFT_DC    2  // Data Command control pin//#define TFT_RST   4  // Reset pin (could connect to RST pin)//#define TFT_RST  -1  // Set TFT_RST to -1 if display RESET is connected to ESP32 board RST// For ESP32 Dev board (only tested with GC9A01 display)// The hardware SPI can be mapped to any pins//#define TFT_MOSI 15 // In some display driver board, it might be written as "SDA" and so on.//#define TFT_SCLK 14//#define TFT_CS   5  // Chip select control pin//#define TFT_DC   27  // Data Command control pin//#define TFT_RST  33  // Reset pin (could connect to Arduino RESET pin)//#define TFT_BL   22  // LED back-light//#define TOUCH_CS 21     // Chip select pin (T_CS) of touch screen//#define TFT_WR 22    // Write strobe for modified Raspberry Pi TFT only// For the M5Stack module use these #define lines//#define TFT_MISO 19//#define TFT_MOSI 23//#define TFT_SCLK 18//#define TFT_CS   14  // Chip select control pin//#define TFT_DC   27  // Data Command control pin//#define TFT_RST  33  // Reset pin (could connect to Arduino RESET pin)//#define TFT_BL   32  // LED back-light (required for M5Stack)// ######       EDIT THE PINs BELOW TO SUIT YOUR ESP32 PARALLEL TFT SETUP        ######// The library supports 8 bit parallel TFTs with the ESP32, the pin// selection below is compatible with ESP32 boards in UNO format.// Wemos D32 boards need to be modified, see diagram in Tools folder.// Only ILI9481 and ILI9341 based displays have been tested!// Parallel bus is only supported for the STM32 and ESP32// Example below is for ESP32 Parallel interface with UNO displays// Tell the library to use 8 bit parallel mode (otherwise SPI is assumed)//#define TFT_PARALLEL_8_BIT// The ESP32 and TFT the pins used for testing are://#define TFT_CS   33  // Chip select control pin (library pulls permanently low//#define TFT_DC   15  // Data Command control pin - must use a pin in the range 0-31//#define TFT_RST  32  // Reset pin, toggles on startup//#define TFT_WR    4  // Write strobe control pin - must use a pin in the range 0-31//#define TFT_RD    2  // Read strobe control pin//#define TFT_D0   12  // Must use pins in the range 0-31 for the data bus//#define TFT_D1   13  // so a single register write sets/clears all bits.//#define TFT_D2   26  // Pins can be randomly assigned, this does not affect//#define TFT_D3   25  // TFT screen update performance.//#define TFT_D4   17//#define TFT_D5   16//#define TFT_D6   27//#define TFT_D7   14// ######       EDIT THE PINs BELOW TO SUIT YOUR STM32 SPI TFT SETUP        ######// The TFT can be connected to SPI port 1 or 2//#define TFT_SPI_PORT 1 // SPI port 1 maximum clock rate is 55MHz//#define TFT_MOSI PA7//#define TFT_MISO PA6//#define TFT_SCLK PA5//#define TFT_SPI_PORT 2 // SPI port 2 maximum clock rate is 27MHz//#define TFT_MOSI PB15//#define TFT_MISO PB14//#define TFT_SCLK PB13// Can use Ardiuno pin references, arbitrary allocation, TFT_eSPI controls chip select//#define TFT_CS   D5 // Chip select control pin to TFT CS//#define TFT_DC   D6 // Data Command control pin to TFT DC (may be labelled RS = Register Select)//#define TFT_RST  D7 // Reset pin to TFT RST (or RESET)// OR alternatively, we can use STM32 port reference names PXnn//#define TFT_CS   PE11 // Nucleo-F767ZI equivalent of D5//#define TFT_DC   PE9  // Nucleo-F767ZI equivalent of D6//#define TFT_RST  PF13 // Nucleo-F767ZI equivalent of D7//#define TFT_RST  -1   // Set TFT_RST to -1 if the display RESET is connected to processor reset// Use an Arduino pin for initial testing as connecting to processor reset// may not work (pulse too short at power up?)// ##################################################################################//// Section 3. Define the fonts that are to be used here//// ##################################################################################// Comment out the #defines below with // to stop that font being loaded// The ESP8366 and ESP32 have plenty of memory so commenting out fonts is not// normally necessary. If all fonts are loaded the extra FLASH space required is// about 17Kbytes. To save FLASH space only enable the fonts you need!#defineLOAD_GLCD// Font 1. Original Adafruit 8 pixel font needs ~1820 bytes in FLASH#defineLOAD_FONT2// Font 2. Small 16 pixel high font, needs ~3534 bytes in FLASH, 96 characters#defineLOAD_FONT4// Font 4. Medium 26 pixel high font, needs ~5848 bytes in FLASH, 96 characters#defineLOAD_FONT6// Font 6. Large 48 pixel font, needs ~2666 bytes in FLASH, only characters 1234567890:-.apm#defineLOAD_FONT7// Font 7. 7 segment 48 pixel font, needs ~2438 bytes in FLASH, only characters 1234567890:-.#defineLOAD_FONT8// Font 8. Large 75 pixel font needs ~3256 bytes in FLASH, only characters 1234567890:-.//#define LOAD_FONT8N // Font 8. Alternative to Font 8 above, slightly narrower, so 3 digits fit a 160 pixel TFT#defineLOAD_GFXFF// FreeFonts. Include access to the 48 Adafruit_GFX free fonts FF1 to FF48 and custom fonts// Comment out the #define below to stop the SPIFFS filing system and smooth font code being loaded// this will save ~20kbytes of FLASH#defineSMOOTH_FONT// ##################################################################################//// Section 4. Other options//// ##################################################################################// For RP2040 processor and SPI displays, uncomment the following line to use the PIO interface.//#define RP2040_PIO_SPI // Leave commented out to use standard RP2040 SPI port interface// For RP2040 processor and 8 or 16 bit parallel displays:// The parallel interface write cycle period is derived from a division of the CPU clock// speed so scales with the processor clock. This means that the divider ratio may need// to be increased when overclocking. It may also need to be adjusted dependant on the// display controller type (ILI94341, HX8357C etc). If RP2040_PIO_CLK_DIV is not defined// the library will set default values which may not suit your display.// The display controller data sheet will specify the minimum write cycle period. The// controllers often work reliably for shorter periods, however if the period is too short// the display may not initialise or graphics will become corrupted.// PIO write cycle frequency = (CPU clock/(4 * RP2040_PIO_CLK_DIV))//#define RP2040_PIO_CLK_DIV 1 // 32ns write cycle at 125MHz CPU clock//#define RP2040_PIO_CLK_DIV 2 // 64ns write cycle at 125MHz CPU clock//#define RP2040_PIO_CLK_DIV 3 // 96ns write cycle at 125MHz CPU clock// For the RP2040 processor define the SPI port channel used (default 0 if undefined)//#define TFT_SPI_PORT 1 // Set to 0 if SPI0 pins are used, or 1 if spi1 pins used// For the STM32 processor define the SPI port channel used (default 1 if undefined)//#define TFT_SPI_PORT 2 // Set to 1 for SPI port 1, or 2 for SPI port 2// Define the SPI clock frequency, this affects the graphics rendering speed. Too// fast and the TFT driver will not keep up and display corruption appears.// With an ILI9341 display 40MHz works OK, 80MHz sometimes fails// With a ST7735 display more than 27MHz may not work (spurious pixels and lines)// With an ILI9163 display 27 MHz works OK.// #define SPI_FREQUENCY   1000000// #define SPI_FREQUENCY   5000000// #define SPI_FREQUENCY  10000000// #define SPI_FREQUENCY  20000000#defineSPI_FREQUENCY27000000// #define SPI_FREQUENCY  40000000// #define SPI_FREQUENCY  55000000 // STM32 SPI1 only (SPI2 maximum is 27MHz)// #define SPI_FREQUENCY  80000000// Optional reduced SPI frequency for reading TFT#defineSPI_READ_FREQUENCY20000000// The XPT2046 requires a lower SPI clock rate of 2.5MHz so we define that here:#defineSPI_TOUCH_FREQUENCY2500000// The ESP32 has 2 free SPI ports i.e. VSPI and HSPI, the VSPI is the default.// If the VSPI port is in use and pins are not accessible (e.g. TTGO T-Beam)// then uncomment the following line://#define USE_HSPI_PORT// Comment out the following #define if "SPI Transactions" do not need to be// supported. When commented out the code size will be smaller and sketches will// run slightly faster, so leave it commented out unless you need it!// Transaction support is needed to work with SD library but not needed with TFT_SdFat// Transaction support is required if other SPI devices are connected.// Transactions are automatically enabled by the library for an ESP32 (to use HAL mutex)// so changing it here has no effect// #define SUPPORT_TRANSACTIONS

修改后,代码如下:

//                            USER DEFINED SETTINGS//   Set driver type, fonts to be loaded, pins used and SPI control method etc////   See the User_Setup_Select.h file if you wish to be able to define multiple//   setups and then easily select which setup file is used by the compiler.////   If this file is edited correctly then all the library example sketches should//   run without the need to make any more changes for a particular hardware setup!//   Note that some sketches are designed for a particular TFT pixel width/height// User defined information reported by "Read_User_Setup" test & diagnostics example#defineUSER_SETUP_INFO"User_Setup"// Define to disable all #warnings in library (can be put in User_Setup_Select.h)// #define DISABLE_ALL_LIBRARY_WARNINGS// ##################################################################################//// Section 1. Call up the right driver file and any options for it//// ##################################################################################// Define STM32 to invoke optimised processor support (only for STM32)// #define STM32// Defining the STM32 board allows the library to optimise the performance// for UNO compatible "MCUfriend" style shields// #define NUCLEO_64_TFT// #define NUCLEO_144_TFT// STM32 8 bit parallel only:// If STN32 Port A or B pins 0-7 are used for 8 bit parallel data bus bits 0-7// then this will improve rendering performance by a factor of ~8x// #define STM_PORTA_DATA_BUS// #define STM_PORTB_DATA_BUS// Tell the library to use parallel mode (otherwise SPI is assumed)// #define TFT_PARALLEL_8_BIT// #defined TFT_PARALLEL_16_BIT // **** 16 bit parallel ONLY for RP2040 processor ****// Display type -  only define if RPi display// #define RPI_DISPLAY_TYPE // 20MHz maximum SPI// Only define one driver, the other ones must be commented out// #define ILI9341_DRIVER       // Generic driver for common displays// #define ILI9341_2_DRIVER     // Alternative ILI9341 driver, see https://github.com/Bodmer/TFT_eSPI/issues/1172// #define ST7735_DRIVER      // Define additional parameters below for this display// #define ILI9163_DRIVER     // Define additional parameters below for this display// #define S6D02A1_DRIVER// #define RPI_ILI9486_DRIVER // 20MHz maximum SPI// #define HX8357D_DRIVER// #define ILI9481_DRIVER// #define ILI9486_DRIVER// #define ILI9488_DRIVER     // WARNING: Do not connect ILI9488 display SDO to MISO if other devices share the SPI bus (TFT SDO does NOT tristate when CS is high)#defineST7789_DRIVER// Full configuration option, define additional parameters below for this display// #define ST7789_2_DRIVER    // Minimal configuration option, define additional parameters below for this display// #define R61581_DRIVER// #define RM68140_DRIVER// #define ST7796_DRIVER// #define SSD1351_DRIVER// #define SSD1963_480_DRIVER// #define SSD1963_800_DRIVER// #define SSD1963_800ALT_DRIVER// #define ILI9225_DRIVER// #define GC9A01_DRIVER// Some displays support SPI reads via the MISO pin, other displays have a single// bi-directional SDA pin and the library will try to read this via the MOSI line.// To use the SDA line for reading data from the TFT uncomment the following line:#defineTFT_SDA_READ// This option is for ESP32 ONLY, tested with ST7789 and GC9A01 display only// For ST7735, ST7789 and ILI9341 ONLY, define the colour order IF the blue and red are swapped on your display// Try ONE option at a time to find the correct colour order for your display#defineTFT_RGB_ORDERTFT_RGB  // Colour order Red-Green-Blue//#define TFT_RGB_ORDER TFT_BGR  // Colour order Blue-Green-Red// For M5Stack ESP32 module with integrated ILI9341 display ONLY, remove // in line below// #define M5STACK// For ST7789, ST7735, ILI9163 and GC9A01 ONLY, define the pixel width and height in portrait orientation// #define TFT_WIDTH  80// #define TFT_WIDTH  128// #define TFT_WIDTH  172 // ST7789 172 x 320// #define TFT_WIDTH  170 // ST7789 170 x 320#defineTFT_WIDTH240// ST7789 240 x 240 and 240 x 320// #define TFT_HEIGHT 160// #define TFT_HEIGHT 128#defineTFT_HEIGHT280// ST7789 240 x 240// #define TFT_HEIGHT 320 // ST7789 240 x 320// #define TFT_HEIGHT 240 // GC9A01 240 x 240// For ST7735 ONLY, define the type of display, originally this was based on the// colour of the tab on the screen protector film but this is not always true, so try// out the different options below if the screen does not display graphics correctly,// e.g. colours wrong, mirror images, or stray pixels at the edges.// Comment out ALL BUT ONE of these options for a ST7735 display driver, save this// this User_Setup file, then rebuild and upload the sketch to the board again:// #define ST7735_INITB// #define ST7735_GREENTAB// #define ST7735_GREENTAB2// #define ST7735_GREENTAB3// #define ST7735_GREENTAB128    // For 128 x 128 display// #define ST7735_GREENTAB160x80 // For 160 x 80 display (BGR, inverted, 26 offset)// #define ST7735_ROBOTLCD       // For some RobotLCD arduino shields (128x160, BGR, https://docs.arduino.cc/retired/getting-started-guides/TFT)// #define ST7735_REDTAB// #define ST7735_BLACKTAB// #define ST7735_REDTAB160x80   // For 160 x 80 display with 24 pixel offset// If colours are inverted (white shows as black) then uncomment one of the next// 2 lines try both options, one of the options should correct the inversion.//#define TFT_INVERSION_ON#defineTFT_INVERSION_OFF// ##################################################################################//// Section 2. Define the pins that are used to interface with the display here//// ##################################################################################// If a backlight control signal is available then define the TFT_BL pin in Section 2// below. The backlight will be turned ON when tft.begin() is called, but the library// needs to know if the LEDs are ON with the pin HIGH or LOW. If the LEDs are to be// driven with a PWM signal or turned OFF/ON then this must be handled by the user// sketch. e.g. with digitalWrite(TFT_BL, LOW);// #define TFT_BL   32            // LED back-light control pin// #define TFT_BACKLIGHT_ON HIGH  // Level to turn ON back-light (HIGH or LOW)// We must use hardware SPI, a minimum of 3 GPIO pins is needed.// Typical setup for ESP8266 NodeMCU ESP-12 is ://// Display SDO/MISO  to NodeMCU pin D6 (or leave disconnected if not reading TFT)// Display LED       to NodeMCU pin VIN (or 5V, see below)// Display SCK       to NodeMCU pin D5// Display SDI/MOSI  to NodeMCU pin D7// Display DC (RS/AO)to NodeMCU pin D3// Display RESET     to NodeMCU pin D4 (or RST, see below)// Display CS        to NodeMCU pin D8 (or GND, see below)// Display GND       to NodeMCU pin GND (0V)// Display VCC       to NodeMCU 5V or 3.3V//// The TFT RESET pin can be connected to the NodeMCU RST pin or 3.3V to free up a control pin//// The DC (Data Command) pin may be labelled AO or RS (Register Select)//// With some displays such as the ILI9341 the TFT CS pin can be connected to GND if no more// SPI devices (e.g. an SD Card) are connected, in this case comment out the #define TFT_CS// line below so it is NOT defined. Other displays such at the ST7735 require the TFT CS pin// to be toggled during setup, so in these cases the TFT_CS line must be defined and connected.//// The NodeMCU D0 pin can be used for RST////// Note: only some versions of the NodeMCU provide the USB 5V on the VIN pin// If 5V is not available at a pin you can use 3.3V but backlight brightness// will be lower.// ###### EDIT THE PIN NUMBERS IN THE LINES FOLLOWING TO SUIT YOUR ESP8266 SETUP ######// For NodeMCU - use pin numbers in the form PIN_Dx where Dx is the NodeMCU pin designation// #define TFT_MISO PIN_D6 // Automatically assigned with ESP8266 if not defined// #define TFT_MOSI PIN_D7 // Automatically assigned with ESP8266 if not defined// #define TFT_SCLK PIN_D5 // Automatically assigned with ESP8266 if not defined// #define TFT_CS PIN_D8  // Chip select control pin D8// #define TFT_DC PIN_D3  // Data Command control pin// #define TFT_RST PIN_D4 // Reset pin (could connect to NodeMCU RST, see next line)// #define TFT_RST  -1     // Set TFT_RST to -1 if the display RESET is connected to NodeMCU RST or 3.3V// #define TFT_BL PIN_D1  // LED back-light (only for ST7789 with backlight control pin)// #define TOUCH_CS PIN_D2     // Chip select pin (T_CS) of touch screen// #define TFT_WR PIN_D2       // Write strobe for modified Raspberry Pi TFT only// ######  FOR ESP8266 OVERLAP MODE EDIT THE PIN NUMBERS IN THE FOLLOWING LINES  ######// Overlap mode shares the ESP8266 FLASH SPI bus with the TFT so has a performance impact// but saves pins for other functions. It is best not to connect MISO as some displays// do not tristate that line when chip select is high!// Note: Only one SPI device can share the FLASH SPI lines, so a SPI touch controller// cannot be connected as well to the same SPI signals.// On NodeMCU 1.0 SD0=MISO, SD1=MOSI, CLK=SCLK to connect to TFT in overlap mode// On NodeMCU V3  S0 =MISO, S1 =MOSI, S2 =SCLK// In ESP8266 overlap mode the following must be defined// #define TFT_SPI_OVERLAP// In ESP8266 overlap mode the TFT chip select MUST connect to pin D3// #define TFT_CS   PIN_D3// #define TFT_DC   PIN_D5  // Data Command control pin// #define TFT_RST  PIN_D4  // Reset pin (could connect to NodeMCU RST, see next line)// #define TFT_RST  -1  // Set TFT_RST to -1 if the display RESET is connected to NodeMCU RST or 3.3V// ###### EDIT THE PIN NUMBERS IN THE LINES FOLLOWING TO SUIT YOUR ESP32 SETUP   ######// For ESP32 Dev board (only tested with ILI9341 display)// The hardware SPI can be mapped to any pins// #define TFT_MISO 19#defineTFT_MOSI17#defineTFT_SCLK16#defineTFT_CS27// Chip select control pin#defineTFT_DC26// Data Command control pin#defineTFT_RST13// Reset pin (could connect to RST pin)// #define TFT_RST  -1  // Set TFT_RST to -1 if display RESET is connected to ESP32 board RST// For ESP32 Dev board (only tested with GC9A01 display)// The hardware SPI can be mapped to any pins// #define TFT_MOSI 17 // In some display driver board, it might be written as "SDA" and so on.// #define TFT_SCLK 16// #define TFT_CS   27  // Chip select control pin// #define TFT_DC   26  // Data Command control pin// #define TFT_RST  13  // Reset pin (could connect to Arduino RESET pin)//#define TFT_BL 14 // LED back-light#defineTOUCH_CS-1// Chip select pin (T_CS) of touch screen// #define TFT_WR 22    // Write strobe for modified Raspberry Pi TFT only// For the M5Stack module use these #define lines// #define TFT_MISO 19// #define TFT_MOSI 23// #define TFT_SCLK 18// #define TFT_CS   14  // Chip select control pin// #define TFT_DC   27  // Data Command control pin// #define TFT_RST  33  // Reset pin (could connect to Arduino RESET pin)// #define TFT_BL   32  // LED back-light (required for M5Stack)// ######       EDIT THE PINs BELOW TO SUIT YOUR ESP32 PARALLEL TFT SETUP        ######// The library supports 8 bit parallel TFTs with the ESP32, the pin// selection below is compatible with ESP32 boards in UNO format.// Wemos D32 boards need to be modified, see diagram in Tools folder.// Only ILI9481 and ILI9341 based displays have been tested!// Parallel bus is only supported for the STM32 and ESP32// Example below is for ESP32 Parallel interface with UNO displays// Tell the library to use 8 bit parallel mode (otherwise SPI is assumed)// #define TFT_PARALLEL_8_BIT// The ESP32 and TFT the pins used for testing are:// #define TFT_CS   33  // Chip select control pin (library pulls permanently low// #define TFT_DC   15  // Data Command control pin - must use a pin in the range 0-31// #define TFT_RST  32  // Reset pin, toggles on startup// #define TFT_WR    4  // Write strobe control pin - must use a pin in the range 0-31// #define TFT_RD    2  // Read strobe control pin// #define TFT_D0   12  // Must use pins in the range 0-31 for the data bus// #define TFT_D1   13  // so a single register write sets/clears all bits.// #define TFT_D2   26  // Pins can be randomly assigned, this does not affect// #define TFT_D3   25  // TFT screen update performance.// #define TFT_D4   17// #define TFT_D5   16// #define TFT_D6   27// #define TFT_D7   14// ######       EDIT THE PINs BELOW TO SUIT YOUR STM32 SPI TFT SETUP        ######// The TFT can be connected to SPI port 1 or 2// #define TFT_SPI_PORT 1 // SPI port 1 maximum clock rate is 55MHz// #define TFT_MOSI PA7// #define TFT_MISO PA6// #define TFT_SCLK PA5// #define TFT_SPI_PORT 2 // SPI port 2 maximum clock rate is 27MHz// #define TFT_MOSI PB15// #define TFT_MISO PB14// #define TFT_SCLK PB13// Can use Ardiuno pin references, arbitrary allocation, TFT_eSPI controls chip select// #define TFT_CS   D5 // Chip select control pin to TFT CS// #define TFT_DC   D6 // Data Command control pin to TFT DC (may be labelled RS = Register Select)// #define TFT_RST  D7 // Reset pin to TFT RST (or RESET)// OR alternatively, we can use STM32 port reference names PXnn// #define TFT_CS   PE11 // Nucleo-F767ZI equivalent of D5// #define TFT_DC   PE9  // Nucleo-F767ZI equivalent of D6// #define TFT_RST  PF13 // Nucleo-F767ZI equivalent of D7// #define TFT_RST  -1   // Set TFT_RST to -1 if the display RESET is connected to processor reset//  Use an Arduino pin for initial testing as connecting to processor reset//  may not work (pulse too short at power up?)// ##################################################################################//// Section 3. Define the fonts that are to be used here//// ##################################################################################// Comment out the #defines below with // to stop that font being loaded// The ESP8366 and ESP32 have plenty of memory so commenting out fonts is not// normally necessary. If all fonts are loaded the extra FLASH space required is// about 17Kbytes. To save FLASH space only enable the fonts you need!#defineLOAD_GLCD// Font 1. Original Adafruit 8 pixel font needs ~1820 bytes in FLASH#defineLOAD_FONT2// Font 2. Small 16 pixel high font, needs ~3534 bytes in FLASH, 96 characters#defineLOAD_FONT4// Font 4. Medium 26 pixel high font, needs ~5848 bytes in FLASH, 96 characters#defineLOAD_FONT6// Font 6. Large 48 pixel font, needs ~2666 bytes in FLASH, only characters 1234567890:-.apm#defineLOAD_FONT7// Font 7. 7 segment 48 pixel font, needs ~2438 bytes in FLASH, only characters 1234567890:-.#defineLOAD_FONT8// Font 8. Large 75 pixel font needs ~3256 bytes in FLASH, only characters 1234567890:-.// #define LOAD_FONT8N // Font 8. Alternative to Font 8 above, slightly narrower, so 3 digits fit a 160 pixel TFT#defineLOAD_GFXFF// FreeFonts. Include access to the 48 Adafruit_GFX free fonts FF1 to FF48 and custom fonts// Comment out the #define below to stop the SPIFFS filing system and smooth font code being loaded// this will save ~20kbytes of FLASH#defineSMOOTH_FONT// ##################################################################################//// Section 4. Other options//// ##################################################################################// For RP2040 processor and SPI displays, uncomment the following line to use the PIO interface.// #define RP2040_PIO_SPI // Leave commented out to use standard RP2040 SPI port interface// For RP2040 processor and 8 or 16 bit parallel displays:// The parallel interface write cycle period is derived from a division of the CPU clock// speed so scales with the processor clock. This means that the divider ratio may need// to be increased when overclocking. It may also need to be adjusted dependant on the// display controller type (ILI94341, HX8357C etc). If RP2040_PIO_CLK_DIV is not defined// the library will set default values which may not suit your display.// The display controller data sheet will specify the minimum write cycle period. The// controllers often work reliably for shorter periods, however if the period is too short// the display may not initialise or graphics will become corrupted.// PIO write cycle frequency = (CPU clock/(4 * RP2040_PIO_CLK_DIV))// #define RP2040_PIO_CLK_DIV 1 // 32ns write cycle at 125MHz CPU clock// #define RP2040_PIO_CLK_DIV 2 // 64ns write cycle at 125MHz CPU clock// #define RP2040_PIO_CLK_DIV 3 // 96ns write cycle at 125MHz CPU clock// For the RP2040 processor define the SPI port channel used (default 0 if undefined)// #define TFT_SPI_PORT 1 // Set to 0 if SPI0 pins are used, or 1 if spi1 pins used// For the STM32 processor define the SPI port channel used (default 1 if undefined)// #define TFT_SPI_PORT 2 // Set to 1 for SPI port 1, or 2 for SPI port 2// Define the SPI clock frequency, this affects the graphics rendering speed. Too// fast and the TFT driver will not keep up and display corruption appears.// With an ILI9341 display 40MHz works OK, 80MHz sometimes fails// With a ST7735 display more than 27MHz may not work (spurious pixels and lines)// With an ILI9163 display 27 MHz works OK.// #define SPI_FREQUENCY   1000000// #define SPI_FREQUENCY   5000000// #define SPI_FREQUENCY  10000000// #define SPI_FREQUENCY  20000000#defineSPI_FREQUENCY27000000// #define SPI_FREQUENCY  40000000// #define SPI_FREQUENCY  55000000 // STM32 SPI1 only (SPI2 maximum is 27MHz)// #define SPI_FREQUENCY  80000000// Optional reduced SPI frequency for reading TFT#defineSPI_READ_FREQUENCY20000000// The XPT2046 requires a lower SPI clock rate of 2.5MHz so we define that here:// #define SPI_TOUCH_FREQUENCY 2500000// The ESP32 has 2 free SPI ports i.e. VSPI and HSPI, the VSPI is the default.// If the VSPI port is in use and pins are not accessible (e.g. TTGO T-Beam)// then uncomment the following line:// #define USE_HSPI_PORT// Comment out the following #define if "SPI Transactions" do not need to be// supported. When commented out the code size will be smaller and sketches will// run slightly faster, so leave it commented out unless you need it!// Transaction support is needed to work with SD library but not needed with TFT_SdFat// Transaction support is required if other SPI devices are connected.// Transactions are automatically enabled by the library for an ESP32 (to use HAL mutex)// so changing it here has no effect// #define SUPPORT_TRANSACTIONS

在lvgl库下找到lv_conf_template.h复制一份另取名为lv_conf.h

在这里插入图片描述

然后对lv_conf.h内容进行修改,修改前如下(完全是lv_conf_template.h的内容):

/**
 * @file lv_conf.h
 * Configuration file for v8.3.9
 *//*
 * Copy this file as `lv_conf.h`
 * 1. simply next to the `lvgl` folder
 * 2. or any other places and
 *    - define `LV_CONF_INCLUDE_SIMPLE`
 *    - add the path as include path
 *//* clang-format off */#if0/*Set it to "1" to enable content*/#ifndefLV_CONF_H#defineLV_CONF_H#include<stdint.h>/*====================
   COLOR SETTINGS
 *====================*//*Color depth: 1 (1 byte per pixel), 8 (RGB332), 16 (RGB565), 32 (ARGB8888)*/#defineLV_COLOR_DEPTH16/*Swap the 2 bytes of RGB565 color. Useful if the display has an 8-bit interface (e.g. SPI)*/#defineLV_COLOR_16_SWAP0/*Enable features to draw on transparent background.
 *It's required if opa, and transform_* style properties are used.
 *Can be also used if the UI is above another layer, e.g. an OSD menu or video player.*/#defineLV_COLOR_SCREEN_TRANSP0/* Adjust color mix functions rounding. GPUs might calculate color mix (blending) differently.
 * 0: round down, 64: round up from x.75, 128: round up from half, 192: round up from x.25, 254: round up */#defineLV_COLOR_MIX_ROUND_OFS0/*Images pixels with this color will not be drawn if they are chroma keyed)*/#defineLV_COLOR_CHROMA_KEYlv_color_hex(0x00ff00)/*pure green*//*=========================
   MEMORY SETTINGS
 *=========================*//*1: use custom malloc/free, 0: use the built-in `lv_mem_alloc()` and `lv_mem_free()`*/#defineLV_MEM_CUSTOM0#ifLV_MEM_CUSTOM ==0/*Size of the memory available for `lv_mem_alloc()` in bytes (>= 2kB)*/#defineLV_MEM_SIZE(48U*1024U)/*[bytes]*//*Set an address for the memory pool instead of allocating it as a normal array. Can be in external SRAM too.*/#defineLV_MEM_ADR0/*0: unused*//*Instead of an address give a memory allocator that will be called to get a memory pool for LVGL. E.g. my_malloc*/#ifLV_MEM_ADR ==0#undefLV_MEM_POOL_INCLUDE#undefLV_MEM_POOL_ALLOC#endif#else/*LV_MEM_CUSTOM*/#defineLV_MEM_CUSTOM_INCLUDE<stdlib.h>/*Header for the dynamic memory function*/#defineLV_MEM_CUSTOM_ALLOCmalloc#defineLV_MEM_CUSTOM_FREEfree#defineLV_MEM_CUSTOM_REALLOCrealloc#endif/*LV_MEM_CUSTOM*//*Number of the intermediate memory buffer used during rendering and other internal processing mechanisms.
 *You will see an error log message if there wasn't enough buffers. */#defineLV_MEM_BUF_MAX_NUM16/*Use the standard `memcpy` and `memset` instead of LVGL's own functions. (Might or might not be faster).*/#defineLV_MEMCPY_MEMSET_STD0/*====================
   HAL SETTINGS
 *====================*//*Default display refresh period. LVG will redraw changed areas with this period time*/#defineLV_DISP_DEF_REFR_PERIOD30/*[ms]*//*Input device read period in milliseconds*/#defineLV_INDEV_DEF_READ_PERIOD30/*[ms]*//*Use a custom tick source that tells the elapsed time in milliseconds.
 *It removes the need to manually update the tick with `lv_tick_inc()`)*/#defineLV_TICK_CUSTOM0#ifLV_TICK_CUSTOM#defineLV_TICK_CUSTOM_INCLUDE"Arduino.h"/*Header for the system time function*/#defineLV_TICK_CUSTOM_SYS_TIME_EXPR(millis())/*Expression evaluating to current system time in ms*//*If using lvgl as ESP32 component*/// #define LV_TICK_CUSTOM_INCLUDE "esp_timer.h"// #define LV_TICK_CUSTOM_SYS_TIME_EXPR ((esp_timer_get_time() / 1000LL))#endif/*LV_TICK_CUSTOM*//*Default Dot Per Inch. Used to initialize default sizes such as widgets sized, style paddings.
 *(Not so important, you can adjust it to modify default sizes and spaces)*/#defineLV_DPI_DEF130/*[px/inch]*//*=======================
 * FEATURE CONFIGURATION
 *=======================*//*-------------
 * Drawing
 *-----------*//*Enable complex draw engine.
 *Required to draw shadow, gradient, rounded corners, circles, arc, skew lines, image transformations or any masks*/#defineLV_DRAW_COMPLEX1#ifLV_DRAW_COMPLEX !=0/*Allow buffering some shadow calculation.
    *LV_SHADOW_CACHE_SIZE is the max. shadow size to buffer, where shadow size is `shadow_width + radius`
    *Caching has LV_SHADOW_CACHE_SIZE^2 RAM cost*/#defineLV_SHADOW_CACHE_SIZE0/* Set number of maximally cached circle data.
    * The circumference of 1/4 circle are saved for anti-aliasing
    * radius * 4 bytes are used per circle (the most often used radiuses are saved)
    * 0: to disable caching */#defineLV_CIRCLE_CACHE_SIZE4#endif/*LV_DRAW_COMPLEX*//**
 * "Simple layers" are used when a widget has `style_opa < 255` to buffer the widget into a layer
 * and blend it as an image with the given opacity.
 * Note that `bg_opa`, `text_opa` etc don't require buffering into layer)
 * The widget can be buffered in smaller chunks to avoid using large buffers.
 *
 * - LV_LAYER_SIMPLE_BUF_SIZE: [bytes] the optimal target buffer size. LVGL will try to allocate it
 * - LV_LAYER_SIMPLE_FALLBACK_BUF_SIZE: [bytes]  used if `LV_LAYER_SIMPLE_BUF_SIZE` couldn't be allocated.
 *
 * Both buffer sizes are in bytes.
 * "Transformed layers" (where transform_angle/zoom properties are used) use larger buffers
 * and can't be drawn in chunks. So these settings affects only widgets with opacity.
 */#defineLV_LAYER_SIMPLE_BUF_SIZE(24*1024)#defineLV_LAYER_SIMPLE_FALLBACK_BUF_SIZE(3*1024)/*Default image cache size. Image caching keeps the images opened.
 *If only the built-in image formats are used there is no real advantage of caching. (I.e. if no new image decoder is added)
 *With complex image decoders (e.g. PNG or JPG) caching can save the continuous open/decode of images.
 *However the opened images might consume additional RAM.
 *0: to disable caching*/#defineLV_IMG_CACHE_DEF_SIZE0/*Number of stops allowed per gradient. Increase this to allow more stops.
 *This adds (sizeof(lv_color_t) + 1) bytes per additional stop*/#defineLV_GRADIENT_MAX_STOPS2/*Default gradient buffer size.
 *When LVGL calculates the gradient "maps" it can save them into a cache to avoid calculating them again.
 *LV_GRAD_CACHE_DEF_SIZE sets the size of this cache in bytes.
 *If the cache is too small the map will be allocated only while it's required for the drawing.
 *0 mean no caching.*/#defineLV_GRAD_CACHE_DEF_SIZE0/*Allow dithering the gradients (to achieve visual smooth color gradients on limited color depth display)
 *LV_DITHER_GRADIENT implies allocating one or two more lines of the object's rendering surface
 *The increase in memory consumption is (32 bits * object width) plus 24 bits * object width if using error diffusion */#defineLV_DITHER_GRADIENT0#ifLV_DITHER_GRADIENT/*Add support for error diffusion dithering.
     *Error diffusion dithering gets a much better visual result, but implies more CPU consumption and memory when drawing.
     *The increase in memory consumption is (24 bits * object's width)*/#defineLV_DITHER_ERROR_DIFFUSION0#endif/*Maximum buffer size to allocate for rotation.
 *Only used if software rotation is enabled in the display driver.*/#defineLV_DISP_ROT_MAX_BUF(10*1024)/*-------------
 * GPU
 *-----------*//*Use Arm's 2D acceleration library Arm-2D */#defineLV_USE_GPU_ARM2D0/*Use STM32's DMA2D (aka Chrom Art) GPU*/#defineLV_USE_GPU_STM32_DMA2D0#ifLV_USE_GPU_STM32_DMA2D/*Must be defined to include path of CMSIS header of target processor
    e.g. "stm32f7xx.h" or "stm32f4xx.h"*/#defineLV_GPU_DMA2D_CMSIS_INCLUDE#endif/*Enable RA6M3 G2D GPU*/#defineLV_USE_GPU_RA6M3_G2D0#ifLV_USE_GPU_RA6M3_G2D/*include path of target processor
    e.g. "hal_data.h"*/#defineLV_GPU_RA6M3_G2D_INCLUDE"hal_data.h"#endif/*Use SWM341's DMA2D GPU*/#defineLV_USE_GPU_SWM341_DMA2D0#ifLV_USE_GPU_SWM341_DMA2D#defineLV_GPU_SWM341_DMA2D_INCLUDE"SWM341.h"#endif/*Use NXP's PXP GPU iMX RTxxx platforms*/#defineLV_USE_GPU_NXP_PXP0#ifLV_USE_GPU_NXP_PXP/*1: Add default bare metal and FreeRTOS interrupt handling routines for PXP (lv_gpu_nxp_pxp_osa.c)
    *   and call lv_gpu_nxp_pxp_init() automatically during lv_init(). Note that symbol SDK_OS_FREE_RTOS
    *   has to be defined in order to use FreeRTOS OSA, otherwise bare-metal implementation is selected.
    *0: lv_gpu_nxp_pxp_init() has to be called manually before lv_init()
    */#defineLV_USE_GPU_NXP_PXP_AUTO_INIT0#endif/*Use NXP's VG-Lite GPU iMX RTxxx platforms*/#defineLV_USE_GPU_NXP_VG_LITE0/*Use SDL renderer API*/#defineLV_USE_GPU_SDL0#ifLV_USE_GPU_SDL#defineLV_GPU_SDL_INCLUDE_PATH<SDL2/SDL.h>/*Texture cache size, 8MB by default*/#defineLV_GPU_SDL_LRU_SIZE(1024*1024*8)/*Custom blend mode for mask drawing, disable if you need to link with older SDL2 lib*/#defineLV_GPU_SDL_CUSTOM_BLEND_MODE(SDL_VERSION_ATLEAST(2,0,6))#endif/*-------------
 * Logging
 *-----------*//*Enable the log module*/#defineLV_USE_LOG0#ifLV_USE_LOG/*How important log should be added:
    *LV_LOG_LEVEL_TRACE       A lot of logs to give detailed information
    *LV_LOG_LEVEL_INFO        Log important events
    *LV_LOG_LEVEL_WARN        Log if something unwanted happened but didn't cause a problem
    *LV_LOG_LEVEL_ERROR       Only critical issue, when the system may fail
    *LV_LOG_LEVEL_USER        Only logs added by the user
    *LV_LOG_LEVEL_NONE        Do not log anything*/#defineLV_LOG_LEVELLV_LOG_LEVEL_WARN/*1: Print the log with 'printf';
    *0: User need to register a callback with `lv_log_register_print_cb()`*/#defineLV_LOG_PRINTF0/*Enable/disable LV_LOG_TRACE in modules that produces a huge number of logs*/#defineLV_LOG_TRACE_MEM1#defineLV_LOG_TRACE_TIMER1#defineLV_LOG_TRACE_INDEV1#defineLV_LOG_TRACE_DISP_REFR1#defineLV_LOG_TRACE_EVENT1#defineLV_LOG_TRACE_OBJ_CREATE1#defineLV_LOG_TRACE_LAYOUT1#defineLV_LOG_TRACE_ANIM1#endif/*LV_USE_LOG*//*-------------
 * Asserts
 *-----------*//*Enable asserts if an operation is failed or an invalid data is found.
 *If LV_USE_LOG is enabled an error message will be printed on failure*/#defineLV_USE_ASSERT_NULL1/*Check if the parameter is NULL. (Very fast, recommended)*/#defineLV_USE_ASSERT_MALLOC1/*Checks is the memory is successfully allocated or no. (Very fast, recommended)*/#defineLV_USE_ASSERT_STYLE0/*Check if the styles are properly initialized. (Very fast, recommended)*/#defineLV_USE_ASSERT_MEM_INTEGRITY0/*Check the integrity of `lv_mem` after critical operations. (Slow)*/#defineLV_USE_ASSERT_OBJ0/*Check the object's type and existence (e.g. not deleted). (Slow)*//*Add a custom handler when assert happens e.g. to restart the MCU*/#defineLV_ASSERT_HANDLER_INCLUDE<stdint.h>#defineLV_ASSERT_HANDLERwhile(1);/*Halt by default*//*-------------
 * Others
 *-----------*//*1: Show CPU usage and FPS count*/#defineLV_USE_PERF_MONITOR0#ifLV_USE_PERF_MONITOR#defineLV_USE_PERF_MONITOR_POSLV_ALIGN_BOTTOM_RIGHT#endif/*1: Show the used memory and the memory fragmentation
 * Requires LV_MEM_CUSTOM = 0*/#defineLV_USE_MEM_MONITOR0#ifLV_USE_MEM_MONITOR#defineLV_USE_MEM_MONITOR_POSLV_ALIGN_BOTTOM_LEFT#endif/*1: Draw random colored rectangles over the redrawn areas*/#defineLV_USE_REFR_DEBUG0/*Change the built in (v)snprintf functions*/#defineLV_SPRINTF_CUSTOM0#ifLV_SPRINTF_CUSTOM#defineLV_SPRINTF_INCLUDE<stdio.h>#definelv_snprintfsnprintf#definelv_vsnprintfvsnprintf#else/*LV_SPRINTF_CUSTOM*/#defineLV_SPRINTF_USE_FLOAT0#endif/*LV_SPRINTF_CUSTOM*/#defineLV_USE_USER_DATA1/*Garbage Collector settings
 *Used if lvgl is bound to higher level language and the memory is managed by that language*/#defineLV_ENABLE_GC0#ifLV_ENABLE_GC !=0#defineLV_GC_INCLUDE"gc.h"/*Include Garbage Collector related things*/#endif/*LV_ENABLE_GC*//*=====================
 *  COMPILER SETTINGS
 *====================*//*For big endian systems set to 1*/#defineLV_BIG_ENDIAN_SYSTEM0/*Define a custom attribute to `lv_tick_inc` function*/#defineLV_ATTRIBUTE_TICK_INC/*Define a custom attribute to `lv_timer_handler` function*/#defineLV_ATTRIBUTE_TIMER_HANDLER/*Define a custom attribute to `lv_disp_flush_ready` function*/#defineLV_ATTRIBUTE_FLUSH_READY/*Required alignment size for buffers*/#defineLV_ATTRIBUTE_MEM_ALIGN_SIZE1/*Will be added where memories needs to be aligned (with -Os data might not be aligned to boundary by default).
 * E.g. __attribute__((aligned(4)))*/#defineLV_ATTRIBUTE_MEM_ALIGN/*Attribute to mark large constant arrays for example font's bitmaps*/#defineLV_ATTRIBUTE_LARGE_CONST/*Compiler prefix for a big array declaration in RAM*/#defineLV_ATTRIBUTE_LARGE_RAM_ARRAY/*Place performance critical functions into a faster memory (e.g RAM)*/#defineLV_ATTRIBUTE_FAST_MEM/*Prefix variables that are used in GPU accelerated operations, often these need to be placed in RAM sections that are DMA accessible*/#defineLV_ATTRIBUTE_DMA/*Export integer constant to binding. This macro is used with constants in the form of LV_<CONST> that
 *should also appear on LVGL binding API such as Micropython.*/#defineLV_EXPORT_CONST_INT(int_value)struct_silence_gcc_warning/*The default value just prevents GCC warning*//*Extend the default -32k..32k coordinate range to -4M..4M by using int32_t for coordinates instead of int16_t*/#defineLV_USE_LARGE_COORD0/*==================
 *   FONT USAGE
 *===================*//*Montserrat fonts with ASCII range and some symbols using bpp = 4
 *https://fonts.google.com/specimen/Montserrat*/#defineLV_FONT_MONTSERRAT_80#defineLV_FONT_MONTSERRAT_100#defineLV_FONT_MONTSERRAT_120#defineLV_FONT_MONTSERRAT_141#defineLV_FONT_MONTSERRAT_160#defineLV_FONT_MONTSERRAT_180#defineLV_FONT_MONTSERRAT_200#defineLV_FONT_MONTSERRAT_220#defineLV_FONT_MONTSERRAT_240#defineLV_FONT_MONTSERRAT_260#defineLV_FONT_MONTSERRAT_280#defineLV_FONT_MONTSERRAT_300#defineLV_FONT_MONTSERRAT_320#defineLV_FONT_MONTSERRAT_340#defineLV_FONT_MONTSERRAT_360#defineLV_FONT_MONTSERRAT_380#defineLV_FONT_MONTSERRAT_400#defineLV_FONT_MONTSERRAT_420#defineLV_FONT_MONTSERRAT_440#defineLV_FONT_MONTSERRAT_460#defineLV_FONT_MONTSERRAT_480/*Demonstrate special features*/#defineLV_FONT_MONTSERRAT_12_SUBPX0#defineLV_FONT_MONTSERRAT_28_COMPRESSED0/*bpp = 3*/#defineLV_FONT_DEJAVU_16_PERSIAN_HEBREW0/*Hebrew, Arabic, Persian letters and all their forms*/#defineLV_FONT_SIMSUN_16_CJK0/*1000 most common CJK radicals*//*Pixel perfect monospace fonts*/#defineLV_FONT_UNSCII_80#defineLV_FONT_UNSCII_160/*Optionally declare custom fonts here.
 *You can use these fonts as default font too and they will be available globally.
 *E.g. #define LV_FONT_CUSTOM_DECLARE   LV_FONT_DECLARE(my_font_1) LV_FONT_DECLARE(my_font_2)*/#defineLV_FONT_CUSTOM_DECLARE/*Always set a default font*/#defineLV_FONT_DEFAULT&lv_font_montserrat_14/*Enable handling large font and/or fonts with a lot of characters.
 *The limit depends on the font size, font face and bpp.
 *Compiler error will be triggered if a font needs it.*/#defineLV_FONT_FMT_TXT_LARGE0/*Enables/disables support for compressed fonts.*/#defineLV_USE_FONT_COMPRESSED0/*Enable subpixel rendering*/#defineLV_USE_FONT_SUBPX0#ifLV_USE_FONT_SUBPX/*Set the pixel order of the display. Physical order of RGB channels. Doesn't matter with "normal" fonts.*/#defineLV_FONT_SUBPX_BGR0/*0: RGB; 1:BGR order*/#endif/*Enable drawing placeholders when glyph dsc is not found*/#defineLV_USE_FONT_PLACEHOLDER1/*=================
 *  TEXT SETTINGS
 *=================*//**
 * Select a character encoding for strings.
 * Your IDE or editor should have the same character encoding
 * - LV_TXT_ENC_UTF8
 * - LV_TXT_ENC_ASCII
 */#defineLV_TXT_ENCLV_TXT_ENC_UTF8/*Can break (wrap) texts on these chars*/#defineLV_TXT_BREAK_CHARS" ,.;:-_"/*If a word is at least this long, will break wherever "prettiest"
 *To disable, set to a value <= 0*/#defineLV_TXT_LINE_BREAK_LONG_LEN0/*Minimum number of characters in a long word to put on a line before a break.
 *Depends on LV_TXT_LINE_BREAK_LONG_LEN.*/#defineLV_TXT_LINE_BREAK_LONG_PRE_MIN_LEN3/*Minimum number of characters in a long word to put on a line after a break.
 *Depends on LV_TXT_LINE_BREAK_LONG_LEN.*/#defineLV_TXT_LINE_BREAK_LONG_POST_MIN_LEN3/*The control character to use for signalling text recoloring.*/#defineLV_TXT_COLOR_CMD"#"/*Support bidirectional texts. Allows mixing Left-to-Right and Right-to-Left texts.
 *The direction will be processed according to the Unicode Bidirectional Algorithm:
 *https://www.w3.org/International/articles/inline-bidi-markup/uba-basics*/#defineLV_USE_BIDI0#ifLV_USE_BIDI/*Set the default direction. Supported values:
    *`LV_BASE_DIR_LTR` Left-to-Right
    *`LV_BASE_DIR_RTL` Right-to-Left
    *`LV_BASE_DIR_AUTO` detect texts base direction*/#defineLV_BIDI_BASE_DIR_DEFLV_BASE_DIR_AUTO#endif/*Enable Arabic/Persian processing
 *In these languages characters should be replaced with an other form based on their position in the text*/#defineLV_USE_ARABIC_PERSIAN_CHARS0/*==================
 *  WIDGET USAGE
 *================*//*Documentation of the widgets: https://docs.lvgl.io/latest/en/html/widgets/index.html*/#defineLV_USE_ARC1#defineLV_USE_BAR1#defineLV_USE_BTN1#defineLV_USE_BTNMATRIX1#defineLV_USE_CANVAS1#defineLV_USE_CHECKBOX1#defineLV_USE_DROPDOWN1/*Requires: lv_label*/#defineLV_USE_IMG1/*Requires: lv_label*/#defineLV_USE_LABEL1#ifLV_USE_LABEL#defineLV_LABEL_TEXT_SELECTION1/*Enable selecting text of the label*/#defineLV_LABEL_LONG_TXT_HINT1/*Store some extra info in labels to speed up drawing of very long texts*/#endif#defineLV_USE_LINE1#defineLV_USE_ROLLER1/*Requires: lv_label*/#ifLV_USE_ROLLER#defineLV_ROLLER_INF_PAGES7/*Number of extra "pages" when the roller is infinite*/#endif#defineLV_USE_SLIDER1/*Requires: lv_bar*/#defineLV_USE_SWITCH1#defineLV_USE_TEXTAREA1/*Requires: lv_label*/#ifLV_USE_TEXTAREA !=0#defineLV_TEXTAREA_DEF_PWD_SHOW_TIME1500/*ms*/#endif#defineLV_USE_TABLE1/*==================
 * EXTRA COMPONENTS
 *==================*//*-----------
 * Widgets
 *----------*/#defineLV_USE_ANIMIMG1#defineLV_USE_CALENDAR1#ifLV_USE_CALENDAR#defineLV_CALENDAR_WEEK_STARTS_MONDAY0#ifLV_CALENDAR_WEEK_STARTS_MONDAY#defineLV_CALENDAR_DEFAULT_DAY_NAMES{"Mo","Tu","We","Th","Fr","Sa","Su"}#else#defineLV_CALENDAR_DEFAULT_DAY_NAMES{"Su","Mo","Tu","We","Th","Fr","Sa"}#endif#defineLV_CALENDAR_DEFAULT_MONTH_NAMES{"January","February","March","April","May","June","July","August","September","October","November","December"}#defineLV_USE_CALENDAR_HEADER_ARROW1#defineLV_USE_CALENDAR_HEADER_DROPDOWN1#endif/*LV_USE_CALENDAR*/#defineLV_USE_CHART1#defineLV_USE_COLORWHEEL1#defineLV_USE_IMGBTN1#defineLV_USE_KEYBOARD1#defineLV_USE_LED1#defineLV_USE_LIST1#defineLV_USE_MENU1#defineLV_USE_METER1#defineLV_USE_MSGBOX1#defineLV_USE_SPAN1#ifLV_USE_SPAN/*A line text can contain maximum num of span descriptor */#defineLV_SPAN_SNIPPET_STACK_SIZE64#endif#defineLV_USE_SPINBOX1#defineLV_USE_SPINNER1#defineLV_USE_TABVIEW1#defineLV_USE_TILEVIEW1#defineLV_USE_WIN1/*-----------
 * Themes
 *----------*//*A simple, impressive and very complete theme*/#defineLV_USE_THEME_DEFAULT1#ifLV_USE_THEME_DEFAULT/*0: Light mode; 1: Dark mode*/#defineLV_THEME_DEFAULT_DARK0/*1: Enable grow on press*/#defineLV_THEME_DEFAULT_GROW1/*Default transition time in [ms]*/#defineLV_THEME_DEFAULT_TRANSITION_TIME80#endif/*LV_USE_THEME_DEFAULT*//*A very simple theme that is a good starting point for a custom theme*/#defineLV_USE_THEME_BASIC1/*A theme designed for monochrome displays*/#defineLV_USE_THEME_MONO1/*-----------
 * Layouts
 *----------*//*A layout similar to Flexbox in CSS.*/#defineLV_USE_FLEX1/*A layout similar to Grid in CSS.*/#defineLV_USE_GRID1/*---------------------
 * 3rd party libraries
 *--------------------*//*File system interfaces for common APIs *//*API for fopen, fread, etc*/#defineLV_USE_FS_STDIO0#ifLV_USE_FS_STDIO#defineLV_FS_STDIO_LETTER'\0'/*Set an upper cased letter on which the drive will accessible (e.g. 'A')*/#defineLV_FS_STDIO_PATH""/*Set the working directory. File/directory paths will be appended to it.*/#defineLV_FS_STDIO_CACHE_SIZE0/*>0 to cache this number of bytes in lv_fs_read()*/#endif/*API for open, read, etc*/#defineLV_USE_FS_POSIX0#ifLV_USE_FS_POSIX#defineLV_FS_POSIX_LETTER'\0'/*Set an upper cased letter on which the drive will accessible (e.g. 'A')*/#defineLV_FS_POSIX_PATH""/*Set the working directory. File/directory paths will be appended to it.*/#defineLV_FS_POSIX_CACHE_SIZE0/*>0 to cache this number of bytes in lv_fs_read()*/#endif/*API for CreateFile, ReadFile, etc*/#defineLV_USE_FS_WIN320#ifLV_USE_FS_WIN32#defineLV_FS_WIN32_LETTER'\0'/*Set an upper cased letter on which the drive will accessible (e.g. 'A')*/#defineLV_FS_WIN32_PATH""/*Set the working directory. File/directory paths will be appended to it.*/#defineLV_FS_WIN32_CACHE_SIZE0/*>0 to cache this number of bytes in lv_fs_read()*/#endif/*API for FATFS (needs to be added separately). Uses f_open, f_read, etc*/#defineLV_USE_FS_FATFS0#ifLV_USE_FS_FATFS#defineLV_FS_FATFS_LETTER'\0'/*Set an upper cased letter on which the drive will accessible (e.g. 'A')*/#defineLV_FS_FATFS_CACHE_SIZE0/*>0 to cache this number of bytes in lv_fs_read()*/#endif/*PNG decoder library*/#defineLV_USE_PNG0/*BMP decoder library*/#defineLV_USE_BMP0/* JPG + split JPG decoder library.
 * Split JPG is a custom format optimized for embedded systems. */#defineLV_USE_SJPG0/*GIF decoder library*/#defineLV_USE_GIF0/*QR code library*/#defineLV_USE_QRCODE0/*FreeType library*/#defineLV_USE_FREETYPE0#ifLV_USE_FREETYPE/*Memory used by FreeType to cache characters [bytes] (-1: no caching)*/#defineLV_FREETYPE_CACHE_SIZE(16*1024)#ifLV_FREETYPE_CACHE_SIZE >=0/* 1: bitmap cache use the sbit cache, 0:bitmap cache use the image cache. *//* sbit cache:it is much more memory efficient for small bitmaps(font size < 256) *//* if font size >= 256, must be configured as image cache */#defineLV_FREETYPE_SBIT_CACHE0/* Maximum number of opened FT_Face/FT_Size objects managed by this cache instance. *//* (0:use system defaults) */#defineLV_FREETYPE_CACHE_FT_FACES0#defineLV_FREETYPE_CACHE_FT_SIZES0#endif#endif/*Rlottie library*/#defineLV_USE_RLOTTIE0/*FFmpeg library for image decoding and playing videos
 *Supports all major image formats so do not enable other image decoder with it*/#defineLV_USE_FFMPEG0#ifLV_USE_FFMPEG/*Dump input information to stderr*/#defineLV_FFMPEG_DUMP_FORMAT0#endif/*-----------
 * Others
 *----------*//*1: Enable API to take snapshot for object*/#defineLV_USE_SNAPSHOT0/*1: Enable Monkey test*/#defineLV_USE_MONKEY0/*1: Enable grid navigation*/#defineLV_USE_GRIDNAV0/*1: Enable lv_obj fragment*/#defineLV_USE_FRAGMENT0/*1: Support using images as font in label or span widgets */#defineLV_USE_IMGFONT0/*1: Enable a published subscriber based messaging system */#defineLV_USE_MSG0/*1: Enable Pinyin input method*//*Requires: lv_keyboard*/#defineLV_USE_IME_PINYIN0#ifLV_USE_IME_PINYIN/*1: Use default thesaurus*//*If you do not use the default thesaurus, be sure to use `lv_ime_pinyin` after setting the thesauruss*/#defineLV_IME_PINYIN_USE_DEFAULT_DICT1/*Set the maximum number of candidate panels that can be displayed*//*This needs to be adjusted according to the size of the screen*/#defineLV_IME_PINYIN_CAND_TEXT_NUM6/*Use 9 key input(k9)*/#defineLV_IME_PINYIN_USE_K9_MODE1#ifLV_IME_PINYIN_USE_K9_MODE ==1#defineLV_IME_PINYIN_K9_CAND_TEXT_NUM3#endif// LV_IME_PINYIN_USE_K9_MODE#endif/*==================
* EXAMPLES
*==================*//*Enable the examples to be built with the library*/#defineLV_BUILD_EXAMPLES1/*===================
 * DEMO USAGE
 ====================*//*Show some widget. It might be required to increase `LV_MEM_SIZE` */#defineLV_USE_DEMO_WIDGETS0#ifLV_USE_DEMO_WIDGETS#defineLV_DEMO_WIDGETS_SLIDESHOW0#endif/*Demonstrate the usage of encoder and keyboard*/#defineLV_USE_DEMO_KEYPAD_AND_ENCODER0/*Benchmark your system*/#defineLV_USE_DEMO_BENCHMARK0#ifLV_USE_DEMO_BENCHMARK/*Use RGB565A8 images with 16 bit color depth instead of ARGB8565*/#defineLV_DEMO_BENCHMARK_RGB565A80#endif/*Stress test for LVGL*/#defineLV_USE_DEMO_STRESS0/*Music player demo*/#defineLV_USE_DEMO_MUSIC0#ifLV_USE_DEMO_MUSIC#defineLV_DEMO_MUSIC_SQUARE0#defineLV_DEMO_MUSIC_LANDSCAPE0#defineLV_DEMO_MUSIC_ROUND0#defineLV_DEMO_MUSIC_LARGE0#defineLV_DEMO_MUSIC_AUTO_PLAY0#endif/*--END OF LV_CONF_H--*/#endif/*LV_CONF_H*/#endif/*End of "Content enable"*/

lv_conf.h修改完后,如下:

/**
 * @file lv_conf.h
 * Configuration file for v8.3.9
 *//*
 * Copy this file as `lv_conf.h`
 * 1. simply next to the `lvgl` folder
 * 2. or any other places and
 *    - define `LV_CONF_INCLUDE_SIMPLE`
 *    - add the path as include path
 *//* clang-format off */#if1/*Set it to "1" to enable content*/#ifndefLV_CONF_H#defineLV_CONF_H#include<stdint.h>/*====================
   COLOR SETTINGS
 *====================*//*Color depth: 1 (1 byte per pixel), 8 (RGB332), 16 (RGB565), 32 (ARGB8888)*/#defineLV_COLOR_DEPTH16/*Swap the 2 bytes of RGB565 color. Useful if the display has an 8-bit interface (e.g. SPI)*/#defineLV_COLOR_16_SWAP0/*Enable features to draw on transparent background.
 *It's required if opa, and transform_* style properties are used.
 *Can be also used if the UI is above another layer, e.g. an OSD menu or video player.*/#defineLV_COLOR_SCREEN_TRANSP0/* Adjust color mix functions rounding. GPUs might calculate color mix (blending) differently.
 * 0: round down, 64: round up from x.75, 128: round up from half, 192: round up from x.25, 254: round up */#defineLV_COLOR_MIX_ROUND_OFS0/*Images pixels with this color will not be drawn if they are chroma keyed)*/#defineLV_COLOR_CHROMA_KEYlv_color_hex(0x00ff00)/*pure green*//*=========================
   MEMORY SETTINGS
 *=========================*//*1: use custom malloc/free, 0: use the built-in `lv_mem_alloc()` and `lv_mem_free()`*/#defineLV_MEM_CUSTOM0#ifLV_MEM_CUSTOM ==0/*Size of the memory available for `lv_mem_alloc()` in bytes (>= 2kB)*/#defineLV_MEM_SIZE(48U*1024U)/*[bytes]*//*Set an address for the memory pool instead of allocating it as a normal array. Can be in external SRAM too.*/#defineLV_MEM_ADR0/*0: unused*//*Instead of an address give a memory allocator that will be called to get a memory pool for LVGL. E.g. my_malloc*/#ifLV_MEM_ADR ==0#undefLV_MEM_POOL_INCLUDE#undefLV_MEM_POOL_ALLOC#endif#else/*LV_MEM_CUSTOM*/#defineLV_MEM_CUSTOM_INCLUDE<stdlib.h>/*Header for the dynamic memory function*/#defineLV_MEM_CUSTOM_ALLOCmalloc#defineLV_MEM_CUSTOM_FREEfree#defineLV_MEM_CUSTOM_REALLOCrealloc#endif/*LV_MEM_CUSTOM*//*Number of the intermediate memory buffer used during rendering and other internal processing mechanisms.
 *You will see an error log message if there wasn't enough buffers. */#defineLV_MEM_BUF_MAX_NUM16/*Use the standard `memcpy` and `memset` instead of LVGL's own functions. (Might or might not be faster).*/#defineLV_MEMCPY_MEMSET_STD0/*====================
   HAL SETTINGS
 *====================*//*Default display refresh period. LVG will redraw changed areas with this period time*/#defineLV_DISP_DEF_REFR_PERIOD30/*[ms]*//*Input device read period in milliseconds*/#defineLV_INDEV_DEF_READ_PERIOD30/*[ms]*//*Use a custom tick source that tells the elapsed time in milliseconds.
 *It removes the need to manually update the tick with `lv_tick_inc()`)*/#defineLV_TICK_CUSTOM1#ifLV_TICK_CUSTOM#defineLV_TICK_CUSTOM_INCLUDE"Arduino.h"/*Header for the system time function*/#defineLV_TICK_CUSTOM_SYS_TIME_EXPR(millis())/*Expression evaluating to current system time in ms*//*If using lvgl as ESP32 component*/// #define LV_TICK_CUSTOM_INCLUDE "esp_timer.h"// #define LV_TICK_CUSTOM_SYS_TIME_EXPR ((esp_timer_get_time() / 1000LL))#endif/*LV_TICK_CUSTOM*//*Default Dot Per Inch. Used to initialize default sizes such as widgets sized, style paddings.
 *(Not so important, you can adjust it to modify default sizes and spaces)*/#defineLV_DPI_DEF130/*[px/inch]*//*=======================
 * FEATURE CONFIGURATION
 *=======================*//*-------------
 * Drawing
 *-----------*//*Enable complex draw engine.
 *Required to draw shadow, gradient, rounded corners, circles, arc, skew lines, image transformations or any masks*/#defineLV_DRAW_COMPLEX1#ifLV_DRAW_COMPLEX !=0/*Allow buffering some shadow calculation.
    *LV_SHADOW_CACHE_SIZE is the max. shadow size to buffer, where shadow size is `shadow_width + radius`
    *Caching has LV_SHADOW_CACHE_SIZE^2 RAM cost*/#defineLV_SHADOW_CACHE_SIZE0/* Set number of maximally cached circle data.
    * The circumference of 1/4 circle are saved for anti-aliasing
    * radius * 4 bytes are used per circle (the most often used radiuses are saved)
    * 0: to disable caching */#defineLV_CIRCLE_CACHE_SIZE4#endif/*LV_DRAW_COMPLEX*//**
 * "Simple layers" are used when a widget has `style_opa < 255` to buffer the widget into a layer
 * and blend it as an image with the given opacity.
 * Note that `bg_opa`, `text_opa` etc don't require buffering into layer)
 * The widget can be buffered in smaller chunks to avoid using large buffers.
 *
 * - LV_LAYER_SIMPLE_BUF_SIZE: [bytes] the optimal target buffer size. LVGL will try to allocate it
 * - LV_LAYER_SIMPLE_FALLBACK_BUF_SIZE: [bytes]  used if `LV_LAYER_SIMPLE_BUF_SIZE` couldn't be allocated.
 *
 * Both buffer sizes are in bytes.
 * "Transformed layers" (where transform_angle/zoom properties are used) use larger buffers
 * and can't be drawn in chunks. So these settings affects only widgets with opacity.
 */#defineLV_LAYER_SIMPLE_BUF_SIZE(24*1024)#defineLV_LAYER_SIMPLE_FALLBACK_BUF_SIZE(3*1024)/*Default image cache size. Image caching keeps the images opened.
 *If only the built-in image formats are used there is no real advantage of caching. (I.e. if no new image decoder is added)
 *With complex image decoders (e.g. PNG or JPG) caching can save the continuous open/decode of images.
 *However the opened images might consume additional RAM.
 *0: to disable caching*/#defineLV_IMG_CACHE_DEF_SIZE0/*Number of stops allowed per gradient. Increase this to allow more stops.
 *This adds (sizeof(lv_color_t) + 1) bytes per additional stop*/#defineLV_GRADIENT_MAX_STOPS2/*Default gradient buffer size.
 *When LVGL calculates the gradient "maps" it can save them into a cache to avoid calculating them again.
 *LV_GRAD_CACHE_DEF_SIZE sets the size of this cache in bytes.
 *If the cache is too small the map will be allocated only while it's required for the drawing.
 *0 mean no caching.*/#defineLV_GRAD_CACHE_DEF_SIZE0/*Allow dithering the gradients (to achieve visual smooth color gradients on limited color depth display)
 *LV_DITHER_GRADIENT implies allocating one or two more lines of the object's rendering surface
 *The increase in memory consumption is (32 bits * object width) plus 24 bits * object width if using error diffusion */#defineLV_DITHER_GRADIENT0#ifLV_DITHER_GRADIENT/*Add support for error diffusion dithering.
     *Error diffusion dithering gets a much better visual result, but implies more CPU consumption and memory when drawing.
     *The increase in memory consumption is (24 bits * object's width)*/#defineLV_DITHER_ERROR_DIFFUSION0#endif/*Maximum buffer size to allocate for rotation.
 *Only used if software rotation is enabled in the display driver.*/#defineLV_DISP_ROT_MAX_BUF(10*1024)/*-------------
 * GPU
 *-----------*//*Use Arm's 2D acceleration library Arm-2D */#defineLV_USE_GPU_ARM2D0/*Use STM32's DMA2D (aka Chrom Art) GPU*/#defineLV_USE_GPU_STM32_DMA2D0#ifLV_USE_GPU_STM32_DMA2D/*Must be defined to include path of CMSIS header of target processor
    e.g. "stm32f7xx.h" or "stm32f4xx.h"*/#defineLV_GPU_DMA2D_CMSIS_INCLUDE#endif/*Enable RA6M3 G2D GPU*/#defineLV_USE_GPU_RA6M3_G2D0#ifLV_USE_GPU_RA6M3_G2D/*include path of target processor
    e.g. "hal_data.h"*/#defineLV_GPU_RA6M3_G2D_INCLUDE"hal_data.h"#endif/*Use SWM341's DMA2D GPU*/#defineLV_USE_GPU_SWM341_DMA2D0#ifLV_USE_GPU_SWM341_DMA2D#defineLV_GPU_SWM341_DMA2D_INCLUDE"SWM341.h"#endif/*Use NXP's PXP GPU iMX RTxxx platforms*/#defineLV_USE_GPU_NXP_PXP0#ifLV_USE_GPU_NXP_PXP/*1: Add default bare metal and FreeRTOS interrupt handling routines for PXP (lv_gpu_nxp_pxp_osa.c)
    *   and call lv_gpu_nxp_pxp_init() automatically during lv_init(). Note that symbol SDK_OS_FREE_RTOS
    *   has to be defined in order to use FreeRTOS OSA, otherwise bare-metal implementation is selected.
    *0: lv_gpu_nxp_pxp_init() has to be called manually before lv_init()
    */#defineLV_USE_GPU_NXP_PXP_AUTO_INIT0#endif/*Use NXP's VG-Lite GPU iMX RTxxx platforms*/#defineLV_USE_GPU_NXP_VG_LITE0/*Use SDL renderer API*/#defineLV_USE_GPU_SDL0#ifLV_USE_GPU_SDL#defineLV_GPU_SDL_INCLUDE_PATH<SDL2/SDL.h>/*Texture cache size, 8MB by default*/#defineLV_GPU_SDL_LRU_SIZE(1024*1024*8)/*Custom blend mode for mask drawing, disable if you need to link with older SDL2 lib*/#defineLV_GPU_SDL_CUSTOM_BLEND_MODE(SDL_VERSION_ATLEAST(2,0,6))#endif/*-------------
 * Logging
 *-----------*//*Enable the log module*/#defineLV_USE_LOG0#ifLV_USE_LOG/*How important log should be added:
    *LV_LOG_LEVEL_TRACE       A lot of logs to give detailed information
    *LV_LOG_LEVEL_INFO        Log important events
    *LV_LOG_LEVEL_WARN        Log if something unwanted happened but didn't cause a problem
    *LV_LOG_LEVEL_ERROR       Only critical issue, when the system may fail
    *LV_LOG_LEVEL_USER        Only logs added by the user
    *LV_LOG_LEVEL_NONE        Do not log anything*/#defineLV_LOG_LEVELLV_LOG_LEVEL_WARN/*1: Print the log with 'printf';
    *0: User need to register a callback with `lv_log_register_print_cb()`*/#defineLV_LOG_PRINTF0/*Enable/disable LV_LOG_TRACE in modules that produces a huge number of logs*/#defineLV_LOG_TRACE_MEM1#defineLV_LOG_TRACE_TIMER1#defineLV_LOG_TRACE_INDEV1#defineLV_LOG_TRACE_DISP_REFR1#defineLV_LOG_TRACE_EVENT1#defineLV_LOG_TRACE_OBJ_CREATE1#defineLV_LOG_TRACE_LAYOUT1#defineLV_LOG_TRACE_ANIM1#endif/*LV_USE_LOG*//*-------------
 * Asserts
 *-----------*//*Enable asserts if an operation is failed or an invalid data is found.
 *If LV_USE_LOG is enabled an error message will be printed on failure*/#defineLV_USE_ASSERT_NULL1/*Check if the parameter is NULL. (Very fast, recommended)*/#defineLV_USE_ASSERT_MALLOC1/*Checks is the memory is successfully allocated or no. (Very fast, recommended)*/#defineLV_USE_ASSERT_STYLE0/*Check if the styles are properly initialized. (Very fast, recommended)*/#defineLV_USE_ASSERT_MEM_INTEGRITY0/*Check the integrity of `lv_mem` after critical operations. (Slow)*/#defineLV_USE_ASSERT_OBJ0/*Check the object's type and existence (e.g. not deleted). (Slow)*//*Add a custom handler when assert happens e.g. to restart the MCU*/#defineLV_ASSERT_HANDLER_INCLUDE<stdint.h>#defineLV_ASSERT_HANDLERwhile(1);/*Halt by default*//*-------------
 * Others
 *-----------*//*1: Show CPU usage and FPS count*/#defineLV_USE_PERF_MONITOR0#ifLV_USE_PERF_MONITOR#defineLV_USE_PERF_MONITOR_POSLV_ALIGN_BOTTOM_RIGHT#endif/*1: Show the used memory and the memory fragmentation
 * Requires LV_MEM_CUSTOM = 0*/#defineLV_USE_MEM_MONITOR0#ifLV_USE_MEM_MONITOR#defineLV_USE_MEM_MONITOR_POSLV_ALIGN_BOTTOM_LEFT#endif/*1: Draw random colored rectangles over the redrawn areas*/#defineLV_USE_REFR_DEBUG0/*Change the built in (v)snprintf functions*/#defineLV_SPRINTF_CUSTOM0#ifLV_SPRINTF_CUSTOM#defineLV_SPRINTF_INCLUDE<stdio.h>#definelv_snprintfsnprintf#definelv_vsnprintfvsnprintf#else/*LV_SPRINTF_CUSTOM*/#defineLV_SPRINTF_USE_FLOAT0#endif/*LV_SPRINTF_CUSTOM*/#defineLV_USE_USER_DATA1/*Garbage Collector settings
 *Used if lvgl is bound to higher level language and the memory is managed by that language*/#defineLV_ENABLE_GC0#ifLV_ENABLE_GC !=0#defineLV_GC_INCLUDE"gc.h"/*Include Garbage Collector related things*/#endif/*LV_ENABLE_GC*//*=====================
 *  COMPILER SETTINGS
 *====================*//*For big endian systems set to 1*/#defineLV_BIG_ENDIAN_SYSTEM0/*Define a custom attribute to `lv_tick_inc` function*/#defineLV_ATTRIBUTE_TICK_INC/*Define a custom attribute to `lv_timer_handler` function*/#defineLV_ATTRIBUTE_TIMER_HANDLER/*Define a custom attribute to `lv_disp_flush_ready` function*/#defineLV_ATTRIBUTE_FLUSH_READY/*Required alignment size for buffers*/#defineLV_ATTRIBUTE_MEM_ALIGN_SIZE1/*Will be added where memories needs to be aligned (with -Os data might not be aligned to boundary by default).
 * E.g. __attribute__((aligned(4)))*/#defineLV_ATTRIBUTE_MEM_ALIGN/*Attribute to mark large constant arrays for example font's bitmaps*/#defineLV_ATTRIBUTE_LARGE_CONST/*Compiler prefix for a big array declaration in RAM*/#defineLV_ATTRIBUTE_LARGE_RAM_ARRAY/*Place performance critical functions into a faster memory (e.g RAM)*/#defineLV_ATTRIBUTE_FAST_MEM/*Prefix variables that are used in GPU accelerated operations, often these need to be placed in RAM sections that are DMA accessible*/#defineLV_ATTRIBUTE_DMA/*Export integer constant to binding. This macro is used with constants in the form of LV_<CONST> that
 *should also appear on LVGL binding API such as Micropython.*/#defineLV_EXPORT_CONST_INT(int_value)struct_silence_gcc_warning/*The default value just prevents GCC warning*//*Extend the default -32k..32k coordinate range to -4M..4M by using int32_t for coordinates instead of int16_t*/#defineLV_USE_LARGE_COORD0/*==================
 *   FONT USAGE
 *===================*//*Montserrat fonts with ASCII range and some symbols using bpp = 4
 *https://fonts.google.com/specimen/Montserrat*/#defineLV_FONT_MONTSERRAT_80#defineLV_FONT_MONTSERRAT_100#defineLV_FONT_MONTSERRAT_120#defineLV_FONT_MONTSERRAT_141#defineLV_FONT_MONTSERRAT_160#defineLV_FONT_MONTSERRAT_180#defineLV_FONT_MONTSERRAT_200#defineLV_FONT_MONTSERRAT_220#defineLV_FONT_MONTSERRAT_240#defineLV_FONT_MONTSERRAT_260#defineLV_FONT_MONTSERRAT_280#defineLV_FONT_MONTSERRAT_300#defineLV_FONT_MONTSERRAT_320#defineLV_FONT_MONTSERRAT_340#defineLV_FONT_MONTSERRAT_360#defineLV_FONT_MONTSERRAT_380#defineLV_FONT_MONTSERRAT_400#defineLV_FONT_MONTSERRAT_420#defineLV_FONT_MONTSERRAT_440#defineLV_FONT_MONTSERRAT_460#defineLV_FONT_MONTSERRAT_480/*Demonstrate special features*/#defineLV_FONT_MONTSERRAT_12_SUBPX0#defineLV_FONT_MONTSERRAT_28_COMPRESSED0/*bpp = 3*/#defineLV_FONT_DEJAVU_16_PERSIAN_HEBREW0/*Hebrew, Arabic, Persian letters and all their forms*/#defineLV_FONT_SIMSUN_16_CJK0/*1000 most common CJK radicals*//*Pixel perfect monospace fonts*/#defineLV_FONT_UNSCII_80#defineLV_FONT_UNSCII_160/*Optionally declare custom fonts here.
 *You can use these fonts as default font too and they will be available globally.
 *E.g. #define LV_FONT_CUSTOM_DECLARE   LV_FONT_DECLARE(my_font_1) LV_FONT_DECLARE(my_font_2)*/#defineLV_FONT_CUSTOM_DECLARE/*Always set a default font*/#defineLV_FONT_DEFAULT&lv_font_montserrat_14/*Enable handling large font and/or fonts with a lot of characters.
 *The limit depends on the font size, font face and bpp.
 *Compiler error will be triggered if a font needs it.*/#defineLV_FONT_FMT_TXT_LARGE0/*Enables/disables support for compressed fonts.*/#defineLV_USE_FONT_COMPRESSED0/*Enable subpixel rendering*/#defineLV_USE_FONT_SUBPX0#ifLV_USE_FONT_SUBPX/*Set the pixel order of the display. Physical order of RGB channels. Doesn't matter with "normal" fonts.*/#defineLV_FONT_SUBPX_BGR0/*0: RGB; 1:BGR order*/#endif/*Enable drawing placeholders when glyph dsc is not found*/#defineLV_USE_FONT_PLACEHOLDER1/*=================
 *  TEXT SETTINGS
 *=================*//**
 * Select a character encoding for strings.
 * Your IDE or editor should have the same character encoding
 * - LV_TXT_ENC_UTF8
 * - LV_TXT_ENC_ASCII
 */#defineLV_TXT_ENCLV_TXT_ENC_UTF8/*Can break (wrap) texts on these chars*/#defineLV_TXT_BREAK_CHARS" ,.;:-_"/*If a word is at least this long, will break wherever "prettiest"
 *To disable, set to a value <= 0*/#defineLV_TXT_LINE_BREAK_LONG_LEN0/*Minimum number of characters in a long word to put on a line before a break.
 *Depends on LV_TXT_LINE_BREAK_LONG_LEN.*/#defineLV_TXT_LINE_BREAK_LONG_PRE_MIN_LEN3/*Minimum number of characters in a long word to put on a line after a break.
 *Depends on LV_TXT_LINE_BREAK_LONG_LEN.*/#defineLV_TXT_LINE_BREAK_LONG_POST_MIN_LEN3/*The control character to use for signalling text recoloring.*/#defineLV_TXT_COLOR_CMD"#"/*Support bidirectional texts. Allows mixing Left-to-Right and Right-to-Left texts.
 *The direction will be processed according to the Unicode Bidirectional Algorithm:
 *https://www.w3.org/International/articles/inline-bidi-markup/uba-basics*/#defineLV_USE_BIDI0#ifLV_USE_BIDI/*Set the default direction. Supported values:
    *`LV_BASE_DIR_LTR` Left-to-Right
    *`LV_BASE_DIR_RTL` Right-to-Left
    *`LV_BASE_DIR_AUTO` detect texts base direction*/#defineLV_BIDI_BASE_DIR_DEFLV_BASE_DIR_AUTO#endif/*Enable Arabic/Persian processing
 *In these languages characters should be replaced with an other form based on their position in the text*/#defineLV_USE_ARABIC_PERSIAN_CHARS0/*==================
 *  WIDGET USAGE
 *================*//*Documentation of the widgets: https://docs.lvgl.io/latest/en/html/widgets/index.html*/#defineLV_USE_ARC1#defineLV_USE_BAR1#defineLV_USE_BTN1#defineLV_USE_BTNMATRIX1#defineLV_USE_CANVAS1#defineLV_USE_CHECKBOX1#defineLV_USE_DROPDOWN1/*Requires: lv_label*/#defineLV_USE_IMG1/*Requires: lv_label*/#defineLV_USE_LABEL1#ifLV_USE_LABEL#defineLV_LABEL_TEXT_SELECTION1/*Enable selecting text of the label*/#defineLV_LABEL_LONG_TXT_HINT1/*Store some extra info in labels to speed up drawing of very long texts*/#endif#defineLV_USE_LINE1#defineLV_USE_ROLLER1/*Requires: lv_label*/#ifLV_USE_ROLLER#defineLV_ROLLER_INF_PAGES7/*Number of extra "pages" when the roller is infinite*/#endif#defineLV_USE_SLIDER1/*Requires: lv_bar*/#defineLV_USE_SWITCH1#defineLV_USE_TEXTAREA1/*Requires: lv_label*/#ifLV_USE_TEXTAREA !=0#defineLV_TEXTAREA_DEF_PWD_SHOW_TIME1500/*ms*/#endif#defineLV_USE_TABLE1/*==================
 * EXTRA COMPONENTS
 *==================*//*-----------
 * Widgets
 *----------*/#defineLV_USE_ANIMIMG1#defineLV_USE_CALENDAR1#ifLV_USE_CALENDAR#defineLV_CALENDAR_WEEK_STARTS_MONDAY0#ifLV_CALENDAR_WEEK_STARTS_MONDAY#defineLV_CALENDAR_DEFAULT_DAY_NAMES{"Mo","Tu","We","Th","Fr","Sa","Su"}#else#defineLV_CALENDAR_DEFAULT_DAY_NAMES{"Su","Mo","Tu","We","Th","Fr","Sa"}#endif#defineLV_CALENDAR_DEFAULT_MONTH_NAMES{"January","February","March","April","May","June","July","August","September","October","November","December"}#defineLV_USE_CALENDAR_HEADER_ARROW1#defineLV_USE_CALENDAR_HEADER_DROPDOWN1#endif/*LV_USE_CALENDAR*/#defineLV_USE_CHART1#defineLV_USE_COLORWHEEL1#defineLV_USE_IMGBTN1#defineLV_USE_KEYBOARD1#defineLV_USE_LED1#defineLV_USE_LIST1#defineLV_USE_MENU1#defineLV_USE_METER1#defineLV_USE_MSGBOX1#defineLV_USE_SPAN1#ifLV_USE_SPAN/*A line text can contain maximum num of span descriptor */#defineLV_SPAN_SNIPPET_STACK_SIZE64#endif#defineLV_USE_SPINBOX1#defineLV_USE_SPINNER1#defineLV_USE_TABVIEW1#defineLV_USE_TILEVIEW1#defineLV_USE_WIN1/*-----------
 * Themes
 *----------*//*A simple, impressive and very complete theme*/#defineLV_USE_THEME_DEFAULT1#ifLV_USE_THEME_DEFAULT/*0: Light mode; 1: Dark mode*/#defineLV_THEME_DEFAULT_DARK0/*1: Enable grow on press*/#defineLV_THEME_DEFAULT_GROW1/*Default transition time in [ms]*/#defineLV_THEME_DEFAULT_TRANSITION_TIME80#endif/*LV_USE_THEME_DEFAULT*//*A very simple theme that is a good starting point for a custom theme*/#defineLV_USE_THEME_BASIC1/*A theme designed for monochrome displays*/#defineLV_USE_THEME_MONO1/*-----------
 * Layouts
 *----------*//*A layout similar to Flexbox in CSS.*/#defineLV_USE_FLEX1/*A layout similar to Grid in CSS.*/#defineLV_USE_GRID1/*---------------------
 * 3rd party libraries
 *--------------------*//*File system interfaces for common APIs *//*API for fopen, fread, etc*/#defineLV_USE_FS_STDIO0#ifLV_USE_FS_STDIO#defineLV_FS_STDIO_LETTER'\0'/*Set an upper cased letter on which the drive will accessible (e.g. 'A')*/#defineLV_FS_STDIO_PATH""/*Set the working directory. File/directory paths will be appended to it.*/#defineLV_FS_STDIO_CACHE_SIZE0/*>0 to cache this number of bytes in lv_fs_read()*/#endif/*API for open, read, etc*/#defineLV_USE_FS_POSIX0#ifLV_USE_FS_POSIX#defineLV_FS_POSIX_LETTER'\0'/*Set an upper cased letter on which the drive will accessible (e.g. 'A')*/#defineLV_FS_POSIX_PATH""/*Set the working directory. File/directory paths will be appended to it.*/#defineLV_FS_POSIX_CACHE_SIZE0/*>0 to cache this number of bytes in lv_fs_read()*/#endif/*API for CreateFile, ReadFile, etc*/#defineLV_USE_FS_WIN320#ifLV_USE_FS_WIN32#defineLV_FS_WIN32_LETTER'\0'/*Set an upper cased letter on which the drive will accessible (e.g. 'A')*/#defineLV_FS_WIN32_PATH""/*Set the working directory. File/directory paths will be appended to it.*/#defineLV_FS_WIN32_CACHE_SIZE0/*>0 to cache this number of bytes in lv_fs_read()*/#endif/*API for FATFS (needs to be added separately). Uses f_open, f_read, etc*/#defineLV_USE_FS_FATFS0#ifLV_USE_FS_FATFS#defineLV_FS_FATFS_LETTER'\0'/*Set an upper cased letter on which the drive will accessible (e.g. 'A')*/#defineLV_FS_FATFS_CACHE_SIZE0/*>0 to cache this number of bytes in lv_fs_read()*/#endif/*PNG decoder library*/#defineLV_USE_PNG0/*BMP decoder library*/#defineLV_USE_BMP0/* JPG + split JPG decoder library.
 * Split JPG is a custom format optimized for embedded systems. */#defineLV_USE_SJPG0/*GIF decoder library*/#defineLV_USE_GIF0/*QR code library*/#defineLV_USE_QRCODE0/*FreeType library*/#defineLV_USE_FREETYPE0#ifLV_USE_FREETYPE/*Memory used by FreeType to cache characters [bytes] (-1: no caching)*/#defineLV_FREETYPE_CACHE_SIZE(16*1024)#ifLV_FREETYPE_CACHE_SIZE >=0/* 1: bitmap cache use the sbit cache, 0:bitmap cache use the image cache. *//* sbit cache:it is much more memory efficient for small bitmaps(font size < 256) *//* if font size >= 256, must be configured as image cache */#defineLV_FREETYPE_SBIT_CACHE0/* Maximum number of opened FT_Face/FT_Size objects managed by this cache instance. *//* (0:use system defaults) */#defineLV_FREETYPE_CACHE_FT_FACES0#defineLV_FREETYPE_CACHE_FT_SIZES0#endif#endif/*Rlottie library*/#defineLV_USE_RLOTTIE0/*FFmpeg library for image decoding and playing videos
 *Supports all major image formats so do not enable other image decoder with it*/#defineLV_USE_FFMPEG0#ifLV_USE_FFMPEG/*Dump input information to stderr*/#defineLV_FFMPEG_DUMP_FORMAT0#endif/*-----------
 * Others
 *----------*//*1: Enable API to take snapshot for object*/#defineLV_USE_SNAPSHOT0/*1: Enable Monkey test*/#defineLV_USE_MONKEY0/*1: Enable grid navigation*/#defineLV_USE_GRIDNAV0/*1: Enable lv_obj fragment*/#defineLV_USE_FRAGMENT0/*1: Support using images as font in label or span widgets */#defineLV_USE_IMGFONT0/*1: Enable a published subscriber based messaging system */#defineLV_USE_MSG0/*1: Enable Pinyin input method*//*Requires: lv_keyboard*/#defineLV_USE_IME_PINYIN0#ifLV_USE_IME_PINYIN/*1: Use default thesaurus*//*If you do not use the default thesaurus, be sure to use `lv_ime_pinyin` after setting the thesauruss*/#defineLV_IME_PINYIN_USE_DEFAULT_DICT1/*Set the maximum number of candidate panels that can be displayed*//*This needs to be adjusted according to the size of the screen*/#defineLV_IME_PINYIN_CAND_TEXT_NUM6/*Use 9 key input(k9)*/#defineLV_IME_PINYIN_USE_K9_MODE1#ifLV_IME_PINYIN_USE_K9_MODE ==1#defineLV_IME_PINYIN_K9_CAND_TEXT_NUM3#endif// LV_IME_PINYIN_USE_K9_MODE#endif/*==================
* EXAMPLES
*==================*//*Enable the examples to be built with the library*/#defineLV_BUILD_EXAMPLES1/*===================
 * DEMO USAGE
 ====================*//*Show some widget. It might be required to increase `LV_MEM_SIZE` */#defineLV_USE_DEMO_WIDGETS0#ifLV_USE_DEMO_WIDGETS#defineLV_DEMO_WIDGETS_SLIDESHOW0#endif/*Demonstrate the usage of encoder and keyboard*/#defineLV_USE_DEMO_KEYPAD_AND_ENCODER0/*Benchmark your system*/#defineLV_USE_DEMO_BENCHMARK0#ifLV_USE_DEMO_BENCHMARK/*Use RGB565A8 images with 16 bit color depth instead of ARGB8565*/#defineLV_DEMO_BENCHMARK_RGB565A80#endif/*Stress test for LVGL*/#defineLV_USE_DEMO_STRESS0/*Music player demo*/#defineLV_USE_DEMO_MUSIC0#ifLV_USE_DEMO_MUSIC#defineLV_DEMO_MUSIC_SQUARE0#defineLV_DEMO_MUSIC_LANDSCAPE0#defineLV_DEMO_MUSIC_ROUND0#defineLV_DEMO_MUSIC_LARGE0#defineLV_DEMO_MUSIC_AUTO_PLAY0#endif/*--END OF LV_CONF_H--*/#endif/*LV_CONF_H*/#endif/*End of "Content enable"*/

3.GUI-Guide工程库移植

把custom文件夹复制一份出来,然后把generated文件夹中的所有文件全部复制到副本里面

在这里插入图片描述

在这里插入图片描述

然后,直接把整个custom副本文件夹复制到我们Platformio工程的src文件夹下,并重命名为custom

在这里插入图片描述

接着,点开重命名好的custom文件夹,找到gui_guider.h,并蒋其里面的文件引用修改成下面所示

在这里插入图片描述

四、代码测试

回到main.c主函数文件,进行头文件引用

main.c源码如下:

#include<TFT_eSPI.h>#include<CST816S.h>#include<lvgl.h>/******************guider头文件与界面声明**********************/#include"custom/gui_guider.h"#include"custom/custom.h"#include"custom/events_init.h"
lv_ui guider_ui;/************************************************************/

CST816S touch(21,22,5,32);// sda, scl, rst, irq

TFT_eSPI tft =TFT_eSPI();/* TFT instance */staticconstuint16_t screenWidth =240;staticconstuint16_t screenHeight =280;staticlv_disp_draw_buf_t draw_buf;staticlv_color_t buf[screenWidth *10];voidmy_disp_flush(lv_disp_drv_t*disp,constlv_area_t*area,lv_color_t*color_p){uint32_t w =(area->x2 - area->x1 +1);uint32_t h =(area->y2 - area->y1 +1);

  tft.startWrite();
  tft.setAddrWindow(area->x1, area->y1, w, h);
  tft.pushColors((uint16_t*)&color_p->full, w * h, true);
  tft.endWrite();lv_disp_flush_ready(disp);}voidmy_touchpad_read(lv_indev_drv_t*indev_driver,lv_indev_data_t*data){if(touch.available()){
    data->state = LV_INDEV_STATE_PR;/*Set the coordinates*/
    data->point.x = touch.data.x;
    data->point.y = touch.data.y;
    Serial.print("Data x ");
    Serial.println(touch.data.x);
    Serial.print("Data y ");
    Serial.println(touch.data.y);}else{
    data->state = LV_INDEV_STATE_REL;}}staticvoidbtn_event_cb(lv_event_t*e){lv_event_code_t code =lv_event_get_code(e);lv_obj_t*btn =lv_event_get_target(e);if(code == LV_EVENT_CLICKED){staticuint8_t cnt =0;
    cnt++;/*Get the first child of the button which is the label and change its text*/lv_obj_t*label =lv_obj_get_child(btn,0);lv_label_set_text_fmt(label,"Button: %d", cnt);}}voidlv_example_get_started_1(void){lv_obj_t*btn =lv_btn_create(lv_scr_act());/*Add a button the current screen*/lv_obj_set_size(btn,120,50);/*Set its size*/lv_obj_align(btn, LV_ALIGN_CENTER,0,0);lv_obj_add_event_cb(btn, btn_event_cb, LV_EVENT_ALL,NULL);/*Assign a callback to the button*/lv_obj_t*label =lv_label_create(btn);/*Add a label to the button*/lv_label_set_text(label,"Button");/*Set the labels text*/lv_obj_center(label);}voidsetup(){//背光引脚pinMode(14, OUTPUT);digitalWrite(14, HIGH);
  Serial.begin(115200);
  touch.begin();
  tft.begin();
  tft.setRotation(0);lv_init();
  tft.fillScreen(TFT_BLACK);lv_disp_draw_buf_init(&draw_buf, buf,NULL, screenWidth *10);staticlv_disp_drv_t disp_drv;lv_disp_drv_init(&disp_drv);

  disp_drv.hor_res = screenWidth;
  disp_drv.ver_res = screenHeight;
  disp_drv.flush_cb = my_disp_flush;
  disp_drv.draw_buf =&draw_buf;lv_disp_drv_register(&disp_drv);staticlv_indev_drv_t indev_drv;lv_indev_drv_init(&indev_drv);
  indev_drv.type = LV_INDEV_TYPE_POINTER;
  indev_drv.read_cb = my_touchpad_read;lv_indev_drv_register(&indev_drv);/*编写你自己的代码*/// lv_example_get_started_1();/*****GUI界面初始化和事件初始化***/setup_ui(&guider_ui);events_init(&guider_ui);/*******************************/}voidloop(){lv_timer_handler();/* let the GUI do its work */delay(5);}

效果展示(小瑕疵:颜色不太对劲,我也不知道为啥了):

在这里插入图片描述

在这里插入图片描述

标签: vscode ide 编辑器

本文转载自: https://blog.csdn.net/ArsenLupin/article/details/135373799
版权归原作者 索子也敲代码 所有, 如有侵权,请联系我们删除。

“【ESP32+LVGL】Vscode+platformio之GUI-Guider工程代码移植”的评论:

还没有评论