一、Vscode库文件加载lvgl,版本选8.3

二、根目录下加lv_conf.h
#ifndef LV_CONF_H
#define LV_CONF_H
#define LV_CONF_SKIP 0
/* Color depth: 1 (1 byte per pixel), 8 (RGB332), 16 (RGB565), 32 (ARGB8888) */
#define LV_COLOR_DEPTH 16
/* Size of the memory available for `lv_mem_alloc()` in bytes (>= 2kB) */
#define LV_MEM_SIZE (32 * 1024U)
/* Use a custom tick source */
#define LV_TICK_CUSTOM 1
#if LV_TICK_CUSTOM
#define LV_TICK_CUSTOM_INCLUDE "Arduino.h"
#define LV_TICK_CUSTOM_SYS_TIME_EXPR (millis())
#endif
/* Log settings */
#define LV_USE_LOG 1
#if LV_USE_LOG
#define LV_LOG_LEVEL LV_LOG_LEVEL_WARN
#define LV_LOG_PRINTF 1
#endif
/* Font usage */
#define LV_FONT_MONTSERRAT_8 0
#define LV_FONT_MONTSERRAT_10 0
#define LV_FONT_MONTSERRAT_12 1
#define LV_FONT_MONTSERRAT_14 1
#define LV_FONT_MONTSERRAT_16 1
#define LV_FONT_MONTSERRAT_18 1
#define LV_FONT_MONTSERRAT_20 1
#define LV_FONT_MONTSERRAT_22 0
#define LV_FONT_MONTSERRAT_24 0
/* Enable the built-in themes */
#define LV_USE_THEME_DEFAULT 1
#endif
三、主程序
#include <Arduino.h>
#include <lvgl.h>
#include <TFT_eSPI.h>
#include <SPI.h>
TFT_eSPI tft = TFT_eSPI();
// 显示缓冲区
static lv_disp_draw_buf_t draw_buf;
static lv_color_t buf1[240 * 20]; // 增大缓冲区
// 屏幕尺寸 - 根据你的实际屏幕修改
#define TFT_HOR_RES 240
#define TFT_VER_RES 280
void create_test_ui();
void my_disp_flush(lv_disp_drv_t *disp, const lv_area_t *area, lv_color_t *color_p);
void my_disp_flush(lv_disp_drv_t *disp, const lv_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, w * h, true);
tft.endWrite();
lv_disp_flush_ready(disp);
}
void setup() {
Serial.begin(115200);
delay(1000); // 给串口时间初始化
Serial.println("LVGL初始化开始...");
// 初始化TFT
tft.init();
tft.setRotation(2); // 重大:尝试不同的旋转值
tft.fillScreen(TFT_BLACK);
// 开启背光
pinMode(26, OUTPUT);
digitalWrite(26, LOW); // 根据你的屏幕调整
Serial.println("TFT初始化完成");
// 初始化LVGL
lv_init();
Serial.println("LVGL库初始化完成");
// 初始化显示缓冲区
lv_disp_draw_buf_init(&draw_buf, buf1, NULL, 240 * 20);
Serial.println("显示缓冲区初始化完成");
// 配置显示驱动
static lv_disp_drv_t disp_drv;
lv_disp_drv_init(&disp_drv);
// 重大:设置正确的屏幕分辨率
disp_drv.hor_res = TFT_HOR_RES;
disp_drv.ver_res = TFT_VER_RES;
disp_drv.flush_cb = my_disp_flush;
disp_drv.draw_buf = &draw_buf;
lv_disp_drv_register(&disp_drv);
Serial.println("显示驱动注册完成");
// 创建测试界面
create_test_ui();
Serial.println("界面创建完成");
}
void loop() {
lv_timer_handler();
delay(5);
}
void create_test_ui() {
// 设置背景颜色
lv_obj_set_style_bg_color(lv_scr_act(), lv_color_hex(0x000000), LV_PART_MAIN);
// 创建第一个标签 - 使用更明显的样式
lv_obj_t *label1 = lv_label_create(lv_scr_act());
lv_label_set_text(label1, "标签1: Hello LVGL!");
lv_obj_set_style_text_color(label1, lv_color_hex(0xFF0000), 0);
lv_obj_set_style_text_font(label1, &lv_font_montserrat_20, 0);
lv_obj_set_style_bg_color(label1, lv_color_hex(0x333333), 0);
lv_obj_set_style_bg_opa(label1, LV_OPA_COVER, 0);
lv_obj_set_style_pad_all(label1, 10, 0);
lv_obj_align(label1, LV_ALIGN_TOP_MID, 0, 20);
// 创建第二个标签
lv_obj_t *label2 = lv_label_create(lv_scr_act());
lv_label_set_text(label2, "标签2: ESP32 + TFT");
lv_obj_set_style_text_color(label2, lv_color_hex(0x00FF00), 0);
lv_obj_set_style_text_font(label2, &lv_font_montserrat_16, 0);
lv_obj_set_style_bg_color(label2, lv_color_hex(0x444444), 0);
lv_obj_set_style_bg_opa(label2, LV_OPA_COVER, 0);
lv_obj_set_style_pad_all(label2, 10, 0);
lv_obj_align(label2, LV_ALIGN_CENTER, 0, 0);
// 创建第三个标签显示状态
lv_obj_t *label3 = lv_label_create(lv_scr_act());
lv_label_set_text(label3, "running");
lv_obj_set_style_text_color(label3, lv_color_hex(0x0000FF), 0);
lv_obj_set_style_text_font(label3, &lv_font_montserrat_14, 0);
lv_obj_align(label3, LV_ALIGN_BOTTOM_MID, 0, -20);
Serial.println("三个标签创建完成");
}
四、实际效果

© 版权声明
文章版权归作者所有,未经允许请勿转载。
相关文章
暂无评论...