LVGL 开发笔记

发布时间:2026/10/25 18:07:37

LVGL 开发笔记 LVGL采用的是一种面对对象编程思维在 C语言中并没有“类”的概念而LVGL通过结构体的形式实现了“类”的功能并 非真的“类”具体的实现逻辑如下图所示lv_obj_t 定义控件界面、按钮、文本变量 必须是指针类型LVGL 的所有样式设置、坐标对齐、事件绑定函数参数类型统一都是lv_obj_t *同时lv_obj_t 结构体的大小并不是完全固定死的它会根据你在 lv_conf.h 里的配置比如是否开启扩展属性、是否开启用户数据 LV_USE_USER_DATA、开启了哪些模块而在编译期改变结构体的大小因此在 LVGL 中定义控件变量时必须且只能是指针类型lv_obj_t *lv_obj_create() 创建容器、界面常用它创建界面、自定义控件的基础创建新界面首先要获取屏幕正在显示的活动屏幕对象lv_scr_act() 是 lv_screen_active()或 lv_scr_act 宏的缩写它是整个 UI 树的根节点Root Node。在 LVGL 中所有控件都遵循父子树形结构Parent-Child Tree。创建任何控件或容器比如 lv_obj_create时必须指定一个“父对象”parentlv_obj_t *scr lv_scr_act();lv_obj_t *page lv_obj_create(scr);lv_obj_create这些创建函数返回一个lv_obj_t类型的指针指向你创建的控件lv_obj_t结构体lv_obj_t结构体typedef struct _lv_obj_t {const lv_obj_class_t * class_p;struct _lv_obj_t * parent;_lv_obj_spec_attr_t * spec_attr;_lv_obj_style_t * styles;#if LV_USE_USER_DATAvoid * user_data;#endiflv_area_t coords;lv_obj_flag_t flags;lv_state_t state;uint16_t layout_inv : 1;uint16_t scr_layout_inv : 1;uint16_t skip_trans : 1;uint16_t style_cnt : 6;uint16_t h_layout : 1;uint16_t w_layout : 1;} lv_obj_t;里面包含控件类型父对象样式列表先获取当前正在显示的屏幕对象作为父节点 page为子对象作为创建的界面然后定义大小、样式同样界面里面的按钮文本这些控件也是page的子对象lv_btn_create() 创建按钮lv_label_create() 创建文本lv_obj_set_size(btn_back, 70, 46); //控件大小lv_obj_align(btn_back, LV_ALIGN_BOTTOM_RIGHT, -82, -44); //控件对齐方式也就是控件位置 param控件对象相对于父容器对齐方式x轴y轴左负右正lv_obj_add_event_cb( //按钮绑定事件回调函数也就是点击按钮会触发什么事件、触摸动作btn_back,page_navigate_cb, //事件回调函数LV_EVENT_CLICKED, //触摸事件(void *)(intptr_t)PAGE_HOME); //传给回调函数的变量用户自定义数据lv_timer_create()LVGL的软定时器lv_timer_t * lv_timer_create(lv_timer_cb_t timer_xcb, uint32_t period, void * user_data); 可以周期行的执行回调函数eg lv_timer_create(machine_running_ui_timer_cb, 100, NULL); 100ms 执行一次machine_running_ui_timer_cb函数字体eg:lv_obj_t *lbl_prefix lv_label_create(loop_cont); //文本标签lv_label_set_text(lbl_prefix, 剩余圈数); //显示文本内容lv_obj_set_style_text_color(lbl_prefix, lv_color_hex(0x354554), 0); //字体颜色 第三个参数selector 选择器常用0 也可以根据按钮状态动态的显示颜色lv_obj_set_style_text_font(lbl_prefix, lv_my_Font_20, 0); //使用的是哪一个字体LVGL没有中文字库显示的汉字需要到LVGL官方转换器里面把汉字转换成C语言文件得到这个C语言文件之后添加到LVGL源码font目录下并添加到项目工程然后在头文件或者.c文件顶部添加中文字体宏定义 LV_FONT_DECLARE(lv_my_Font_20);
延伸阅读

更多相关文章

2026/10/25 1:16:36

053、ABAP数据字典与ABAP程序联动

053、ABAP数据字典与ABAP程序联动 昨晚线上一个报表突然查不出数据,用户那边直接炸了。我远程连上去一看,程序逻辑没动过,数据库表里也有记录,但SELECT就是查不到。后来发现是有人在前台顺手改了一个数据元素,把域里的…

2026/10/24 9:07:48

052、帮助视图与锁视图

调试一个报表取数异常,愣是耗了整个下午。查到最后,根源出在视图上——不是数据库表,而是那种带关联条件的帮助视图。SE11里看着数据好好的,一进程序就缺行,或者重复。那时候你才会意识到,对ABAP视图的理解…

2026/10/26 3:10:58

Block Copy内存布局优化:从原理到性能调优实践

1. Block Copy 内存布局解析:从原理到实践在系统级编程和性能优化领域,内存操作的高效性直接决定了程序性能的上限。Block Copy(块拷贝)作为内存操作的基础单元,其背后的内存布局设计直接影响着拷贝操作的效率。不同于…

2026/10/26 3:10:58

ICMP与ARP协议详解:从ping不通到抓包定位的排障思路

1. 从两个"看不见的协议"说起:为什么ping通了不代表网络就通了很多人学网络协议时有个典型误区:把TCP/IP四层模型背得滚瓜烂熟,知道IP负责寻址、TCP负责可靠传输,却对ICMP和ARP这两个"打杂"的协议不屑一顾。结…

2026/10/26 3:10:58

慢SQL排查误区与优化实战指南

1. 慢SQL排查的常见误区与正确思路那天下午3点,系统监控突然报警,一个核心接口响应时间从平时的200ms飙升到8秒。团队第一反应是数据库出了问题,DBA立即被拉进群聊。但经过半小时的检查,数据库各项指标完全正常——CPU使用率不到3…

2026/10/26 3:10:58

HDFS架构设计与生产环境部署实战指南

1. HDFS核心架构解析:理解分布式文件系统的设计哲学HDFS(Hadoop Distributed File System)作为Hadoop生态的基石存储系统,其设计处处体现着"移动计算比移动数据更划算"的核心思想。我在实际生产环境中部署过多个PB级HDF…

2026/10/26 3:10:58

FS4412 U-Boot移植:SPL双阶段启动与DDR时序调试实战

简介:本资源是面向嵌入式Linux开发初学者与进阶工程师的FS4412平台U-Boot 2013版本移植实战代码包,聚焦ARM架构SoC引导程序定制化开发,解决从零启动、硬件适配、安全加密集成等核心问题。压缩包含2000个文件,主体为2879个C源码&am…

2026/10/26 3:05:58

Vue.js与ECharts实现价格趋势分析图实战

1. 项目概述:价格趋势分析图的技术选型价格趋势分析是金融、电商、能源等领域的核心需求之一。作为前端开发者,我们经常需要将复杂的数据变化趋势直观呈现给用户。Vue.js ECharts的组合是目前实现这类需求的最佳实践方案之一。为什么选择这个技术栈&…

2026/10/26 0:20:20

全国计算机二级C语言真题PDF高效刷题指南

简介:这份PDF是全国计算机二级C语言考试的试题与答案解析,专为备考二级C语言的考生准备。内容涵盖C语言特点与设计理念、程序基本组成单位、main函数执行流程、函数嵌套调用规则、标识符命名规范、整型实型字符型数据类型、八进制十六进制数合法形式、运…

2026/10/26 1:53:47

requests+BeautifulSoup:爬虫抓取h1标题的入门实战指南

简介:一份以实战为导向的Python爬虫入门资源,面向具备基本编程基础、希望快速掌握网络数据抓取的初学者,可解决从零编写简单爬虫的常见困惑。实例以requests库发送HTTP请求、BeautifulSoup解析HTML文档,完整演示从网页中提取 标题…

2026/10/26 0:20:17

递推最小二乘参数辨识MATLAB编程:二阶系统与渐消记忆实现

简介:这是一篇面向控制系统、信号处理与机器学习等领域学习者的最小二乘参数辨识程序说明文档。资源共包含一个docx格式文档,压缩包大小七十八KB,内容围绕递推最小二乘算法和渐消记忆最小二乘算法展开:先构造一个极点位于单位圆内…

2026/10/26 0:00:48

Nested Learning:解决AI灾难性遗忘的分层记忆架构

1. 为什么AI需要"记忆"能力?在传统深度学习模型中,我们常遇到一个根本性问题:模型在处理新任务时,往往会完全遗忘之前学到的知识。这种现象被业界称为"灾难性遗忘"(Catastrophic Forgetting)。想象一下&#…

2026/10/26 0:00:48

企业级大模型应用:OCR预处理、Dify编排与DeepSeek落地实战

1. 这不是“用大模型”,而是重构工作流的起点“大模型的应用和工具”——这八个字现在被贴在无数技术分享、招聘JD、内部立项书的标题栏里,但绝大多数人点进去后看到的,是零散的API调用示例、几个开源UI截图、或者一句“接入LLM就能降本增效”…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑