涂流如 发表于 2025-6-8 22:02:43

LVGL-屏幕

屏幕

在使用屏幕之前需要对屏幕参数进行设置

[*]定义显示缓冲区static lv_disp_draw_buf_t draw_buf;
[*]对显示缓冲区进行初始化lv_disp_draw_buf_init(&draw_buf, buf1, buf2, buf_size);
[*]定义显示驱动结构体 static lv_disp_drv_t disp_drv;
[*]初始化显示驱动lv_disp_drv_init(&disp_drv);
[*]设置显示驱动参数
[*]注册显示驱动 lv_disp_drv_register(&disp_drv);
//example:

/*LittlevGL init*/
    lv_init();

    /*Linux frame buffer device init*/
    fbdev_init();

    /*A small buffer for LittlevGL to draw the screen's content*/
    static lv_color_t buf;

    /*Initialize a descriptor for the buffer*/
    static lv_disp_draw_buf_t disp_buf;
    lv_disp_draw_buf_init(&disp_buf, buf, NULL, DISP_BUF_SIZE);

    /*Initialize and register a display driver*/
    static lv_disp_drv_t disp_drv;
    lv_disp_drv_init(&disp_drv);
    disp_drv.draw_buf   = &disp_buf;
    disp_drv.flush_cb   = fbdev_flush;
    disp_drv.hor_res    = 1024;
    disp_drv.ver_res    = 600;
    lv_disp_drv_register(&disp_drv);lv_disp_draw_buf_init函数

此函数用于对显示缓冲区进行初始化
void lv_disp_draw_buf_init(lv_disp_draw_buf_t * draw_buf, lv_color_t * buf1, lv_color_t * buf2, uint32_t buf_size);
//draw_buf:指向要初始化的 lv_disp_draw_buf_t 结构体的指针。这个结构体用于存储显示缓冲区的相关信息。
//buf1:指向第一个缓冲区的指针
//buf2:指向第二个缓冲区的指针
//buf_size:缓冲区的大小,单位是像素lv_disp_drv_init函数

此函数用于初始化显示驱动结构体
void lv_disp_drv_init(lv_disp_drv_t * drv);
//drv:指向要初始化的 lv_disp_drv_t 结构体的指针lv_disp_drv_register函数

用于将初始化好的显示驱动结构体 lv_disp_drv_t 注册到 LVGL 系统中。注册后,LVGL 将使用这个驱动来与硬件显示设备进行交互。
lv_disp_t * lv_disp_drv_register(lv_disp_drv_t * drv);
//drv:指向初始化好的 lv_disp_drv_t 结构体的指针
//ret:返回一个指向新注册的显示设备的 lv_disp_t 指针lv_obj_create函数

此函数主要用于创建一个屏幕
lv_obj_t * lv_obj_create(lv_obj_t * parent, const lv_obj_t * copy);
//parent:指向父对象的指针。如果设置为 NULL,则新创建的对象将成为屏幕的子对象
//copy:指向要复制的对象的指针。如果设置为 NULL,则创建一个新的对象;如果设置为一个已存在的对象,则新创建的对象将是该对象的副本。
ret:一个指向新创建的对象的指针lv_scr_load函数

此函数用于加载一个新的屏幕
void lv_scr_load(lv_obj_t * scr);
//scr:指向要加载的屏幕对象的指针。这个屏幕对象必须已经创建并准备好显示内容。lv_scr_act函数

此函数用于获取当前活动的屏幕对象
lv_obj_t * lv_scr_act(lv_disp_t * disp);
//disp:指向显示设备的指针。如果设置为 NULL,则使用默认的显示设备。
//ret;返回一个指向当前活动屏幕的指针//example
#include "lvgl.h"

// 假设已经注册了两个显示设备 disp1 和 disp2
lv_disp_t * disp1;
lv_disp_t * disp2;

void example_add_label_to_specific_screen(void) {
    // 获取第一个屏幕的当前活动屏幕
    lv_obj_t * scr1 = lv_scr_act(disp1);

    // 在第一个屏幕上添加一个标签
    lv_obj_t * label1 = lv_label_create(scr1);
    lv_label_set_text(label1, "Hello, Screen 1!");
    lv_obj_align(label1, LV_ALIGN_CENTER, 0, 0);

    // 获取第二个屏幕的当前活动屏幕
    lv_obj_t * scr2 = lv_scr_act(disp2);

    // 在第二个屏幕上添加一个标签
    lv_obj_t * label2 = lv_label_create(scr2);
    lv_label_set_text(label2, "Hello, Screen 2!");
    lv_obj_align(label2, LV_ALIGN_CENTER, 0, 0);
}lv_layer_top宏

用于访问当前屏幕的顶层图层,顶层图层是一个特殊的图层,通常用于显示临时内容,如弹出窗口、对话框、提示信息等。这些内容通常需要覆盖在其他对象之上,而不会影响屏幕上的其他内容。
#define lv_layer_top(disp) ((disp)->layer_top)
//disp:指向显示设备的指针。如果省略参数,通常会使用默认的显示设备。lv_layer_sys函数

用于在所有屏幕的最上层显示内容。它位于 layer_top 的上方,确保其内容始终可见
lv_obj_t * sys_layer = lv_layer_sys(); // 获取系统层
lv_obj_t * label = lv_label_create(sys_layer); // 在系统层上创建标签
lv_label_set_text(label, "System Layer Label"); // 设置标签文本
lv_obj_align(label, LV_ALIGN_CENTER, 0, 0); // 将标签居中对齐lv_scr_load_anim函数

用于加载新屏幕并应用动画效果的函数
void lv_scr_load_anim(lv_obj_t * scr, lv_scr_load_anim_t anim_type, uint32_t time, uint32_t delay, bool auto_del);
//scr:指向要加载的新屏幕的指针
//anim_type:动画类型,定义在 lv_scr_load_anim_t 枚举中
/* ***********************************************************
LV_SCR_LOAD_ANIM_NONE:无动画,立即切换。
LV_SCR_LOAD_ANIM_MOVE_LEFT:新屏幕从右侧滑入,旧屏幕向左滑出。
LV_SCR_LOAD_ANIM_MOVE_RIGHT:新屏幕从左侧滑入,旧屏幕向右滑出。
LV_SCR_LOAD_ANIM_MOVE_TOP:新屏幕从底部滑入,旧屏幕向上滑出。
LV_SCR_LOAD_ANIM_MOVE_BOTTOM:新屏幕从顶部滑入,旧屏幕向下滑出。
LV_SCR_LOAD_ANIM_FADE_ON:新屏幕淡入,旧屏幕淡出。
************************************************************** */
//time:动画持续时间,单位是毫秒(ms)
//delay:动画开始前的延迟时间
//auto_del:布尔值,如果设置为 true,动画完成后会自动删除旧屏幕及其子对象lv_disp_set_default函数

函数用于设置默认的显示设备,默认显示设备是 LVGL 在没有明确指定显示设备时,会自动使用的显示设备
void lv_disp_set_default(lv_disp_t * disp);
//disp:指向要设置为默认的显示设备的指针lv_obj_add_state函数

此函数用于为对象添加状态
void lv_obj_add_state(lv_obj_t * obj, lv_state_t state);
//obj:指向要操作的对象的指针
//state:要添加的状态,类型为 lv_state_t 枚举
//LV_STATE_DEFAULT:默认状态。
//LV_STATE_FOCUSED:对象获得焦点时的状态。
//LV_STATE_PRESSED:对象被按下时的状态。
//LV_STATE_CHECKED:对象被选中时的状态(例如复选框)。
//LV_STATE_DISABLED:对象被禁用时的状态。
//LV_STATE_HOVERED:鼠标悬停在对象上时的状态。
//LV_STATE_FOCUSED_KEY:通过键盘获得焦点时的状态。
//LV_STATE_FOCUSED_PRESSED:获得焦点且被按下时的状态。
//LV_STATE_PRESSED_HOVERED:被按下且鼠标悬停时的状态。
//LV_STATE_FOCUSED_HOVERED:获得焦点且鼠标悬停时的状态。#include "lvgl.h"

void example_add_state_to_button(void) {
    // 创建一个按钮
    lv_obj_t * btn = lv_btn_create(lv_scr_act());

    // 创建一个样式
    static lv_style_t style_btn;
    lv_style_init(&style_btn);

    // 设置默认状态的样式
    lv_style_set_bg_color(&style_btn, LV_STATE_DEFAULT, lv_color_hex(0xCCCCCC));
    lv_style_set_text_color(&style_btn, LV_STATE_DEFAULT, lv_color_hex(0x000000));

    // 设置按下状态的样式
    lv_style_set_bg_color(&style_btn, LV_STATE_PRESSED, lv_color_hex(0xAAAAAA));
    lv_style_set_text_color(&style_btn, LV_STATE_PRESSED, lv_color_hex(0xFFFFFF));

    // 将样式应用到按钮
    lv_obj_add_style(btn, LV_BTN_PART_MAIN, &style_btn);

    // 添加状态:按下状态
    lv_obj_add_state(btn, LV_STATE_PRESSED);
}lv_obj_clear_state函数

此函数清除对象(如按钮、标签等)的某个或某些状态
void lv_obj_clear_state(lv_obj_t * obj, lv_state_t state);
//obj:指向要操作的对象的指针
//state:要清除的状态
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
页: [1]
查看完整版本: LVGL-屏幕