找回密码
 立即注册
首页 业界区 科技 LVGL-屏幕

LVGL-屏幕

涂流如 2025-6-8 22:02:43
屏幕

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

  • 定义显示缓冲区  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);
  1. //example:
  2. /*LittlevGL init*/
  3.     lv_init();
  4.     /*Linux frame buffer device init*/
  5.     fbdev_init();
  6.     /*A small buffer for LittlevGL to draw the screen's content*/
  7.     static lv_color_t buf[DISP_BUF_SIZE];
  8.     /*Initialize a descriptor for the buffer*/
  9.     static lv_disp_draw_buf_t disp_buf;
  10.     lv_disp_draw_buf_init(&disp_buf, buf, NULL, DISP_BUF_SIZE);
  11.     /*Initialize and register a display driver*/
  12.     static lv_disp_drv_t disp_drv;
  13.     lv_disp_drv_init(&disp_drv);
  14.     disp_drv.draw_buf   = &disp_buf;
  15.     disp_drv.flush_cb   = fbdev_flush;
  16.     disp_drv.hor_res    = 1024;
  17.     disp_drv.ver_res    = 600;
  18.     lv_disp_drv_register(&disp_drv);
复制代码
lv_disp_draw_buf_init函数

此函数用于对显示缓冲区进行初始化
  1. 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);
  2. //draw_buf:指向要初始化的 lv_disp_draw_buf_t 结构体的指针。这个结构体用于存储显示缓冲区的相关信息。
  3. //buf1:指向第一个缓冲区的指针
  4. //buf2:指向第二个缓冲区的指针
  5. //buf_size:缓冲区的大小,单位是像素
复制代码
lv_disp_drv_init函数

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

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

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

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

此函数用于获取当前活动的屏幕对象
  1. lv_obj_t * lv_scr_act(lv_disp_t * disp);
  2. //disp:指向显示设备的指针。如果设置为 NULL,则使用默认的显示设备。
  3. //ret;返回一个指向当前活动屏幕的指针
复制代码
  1. //example
  2. #include "lvgl.h"
  3. // 假设已经注册了两个显示设备 disp1 和 disp2
  4. lv_disp_t * disp1;
  5. lv_disp_t * disp2;
  6. void example_add_label_to_specific_screen(void) {
  7.     // 获取第一个屏幕的当前活动屏幕
  8.     lv_obj_t * scr1 = lv_scr_act(disp1);
  9.     // 在第一个屏幕上添加一个标签
  10.     lv_obj_t * label1 = lv_label_create(scr1);
  11.     lv_label_set_text(label1, "Hello, Screen 1!");
  12.     lv_obj_align(label1, LV_ALIGN_CENTER, 0, 0);
  13.     // 获取第二个屏幕的当前活动屏幕
  14.     lv_obj_t * scr2 = lv_scr_act(disp2);
  15.     // 在第二个屏幕上添加一个标签
  16.     lv_obj_t * label2 = lv_label_create(scr2);
  17.     lv_label_set_text(label2, "Hello, Screen 2!");
  18.     lv_obj_align(label2, LV_ALIGN_CENTER, 0, 0);
  19. }
复制代码
lv_layer_top宏

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

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

用于加载新屏幕并应用动画效果的函数
  1. 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);
  2. //scr:指向要加载的新屏幕的指针
  3. //anim_type:动画类型,定义在 lv_scr_load_anim_t 枚举中
  4. /* ***********************************************************
  5. LV_SCR_LOAD_ANIM_NONE:无动画,立即切换。
  6. LV_SCR_LOAD_ANIM_MOVE_LEFT:新屏幕从右侧滑入,旧屏幕向左滑出。
  7. LV_SCR_LOAD_ANIM_MOVE_RIGHT:新屏幕从左侧滑入,旧屏幕向右滑出。
  8. LV_SCR_LOAD_ANIM_MOVE_TOP:新屏幕从底部滑入,旧屏幕向上滑出。
  9. LV_SCR_LOAD_ANIM_MOVE_BOTTOM:新屏幕从顶部滑入,旧屏幕向下滑出。
  10. LV_SCR_LOAD_ANIM_FADE_ON:新屏幕淡入,旧屏幕淡出。
  11. ************************************************************** */
  12. //time:动画持续时间,单位是毫秒(ms)
  13. //delay:动画开始前的延迟时间
  14. //auto_del:布尔值,如果设置为 true,动画完成后会自动删除旧屏幕及其子对象
复制代码
lv_disp_set_default函数

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

此函数用于为对象添加状态
  1. void lv_obj_add_state(lv_obj_t * obj, lv_state_t state);
  2. //obj:指向要操作的对象的指针
  3. //state:要添加的状态,类型为 lv_state_t 枚举
  4. //LV_STATE_DEFAULT:默认状态。
  5. //LV_STATE_FOCUSED:对象获得焦点时的状态。
  6. //LV_STATE_PRESSED:对象被按下时的状态。
  7. //LV_STATE_CHECKED:对象被选中时的状态(例如复选框)。
  8. //LV_STATE_DISABLED:对象被禁用时的状态。
  9. //LV_STATE_HOVERED:鼠标悬停在对象上时的状态。
  10. //LV_STATE_FOCUSED_KEY:通过键盘获得焦点时的状态。
  11. //LV_STATE_FOCUSED_PRESSED:获得焦点且被按下时的状态。
  12. //LV_STATE_PRESSED_HOVERED:被按下且鼠标悬停时的状态。
  13. //LV_STATE_FOCUSED_HOVERED:获得焦点且鼠标悬停时的状态。
复制代码
  1. #include "lvgl.h"
  2. void example_add_state_to_button(void) {
  3.     // 创建一个按钮
  4.     lv_obj_t * btn = lv_btn_create(lv_scr_act());
  5.     // 创建一个样式
  6.     static lv_style_t style_btn;
  7.     lv_style_init(&style_btn);
  8.     // 设置默认状态的样式
  9.     lv_style_set_bg_color(&style_btn, LV_STATE_DEFAULT, lv_color_hex(0xCCCCCC));
  10.     lv_style_set_text_color(&style_btn, LV_STATE_DEFAULT, lv_color_hex(0x000000));
  11.     // 设置按下状态的样式
  12.     lv_style_set_bg_color(&style_btn, LV_STATE_PRESSED, lv_color_hex(0xAAAAAA));
  13.     lv_style_set_text_color(&style_btn, LV_STATE_PRESSED, lv_color_hex(0xFFFFFF));
  14.     // 将样式应用到按钮
  15.     lv_obj_add_style(btn, LV_BTN_PART_MAIN, &style_btn);
  16.     // 添加状态:按下状态
  17.     lv_obj_add_state(btn, LV_STATE_PRESSED);
  18. }
复制代码
lv_obj_clear_state函数

此函数清除对象(如按钮、标签等)的某个或某些状态
  1. void lv_obj_clear_state(lv_obj_t * obj, lv_state_t state);
  2. //obj:指向要操作的对象的指针
  3. //state:要清除的状态
复制代码
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
您需要登录后才可以回帖 登录 | 立即注册