LVGL,lable实时显示数据更新

本文介绍了在实际项目中如何使用LVGL库实现Label控件的实时数值变化显示,包括定义全局变量、初始化Label、设置事件回调和触发值变化事件的发送过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里插入图片描述

1. 背景

在做实际项目的时候,常常遇到,界面数据需要实时更新的场景,一般,我们都用lable控件来显示数据,静态显示大家应该都能搞定,那如果是显示实时变化的数值呢?
本篇将主要介绍,如何实现lable控件的数值实时变化显示。

在这里插入图片描述


2. 解决方案

首先,我们需要定义一个全局的object变量:

lv_obj_t* parameter_value_lable;

然后,在对应界面初始化的时候,将该变量赋值(及创建lable“实体”):

......
parameter_value_lable = lv_label_create(body_obj);
lv_obj_set_size(parameter_value_lable, 230, 45);
lv_obj_set_pos(parameter_value_lable, 5, 100);
lv_label_set_text(parameter_value_lable, "采样值:");
lv_obj_add_event_cb(parameter_value_lable, event_set_parameter_value_handler, LV_EVENT_VALUE_CHANGED, NULL);
......

注意,我们还添加设置了,lable的“事件”属性,事件触发回调函数:event_set_parameter_value_handler

static void event_set_parameter_value_handler(lv_event_t* e)
{
    lv_event_code_t code = lv_event_get_code(e);    // 获取回调事件
    lv_obj_t *obj = lv_event_get_target(e);
    if((LV_EVENT_VALUE_CHANGED == code) && (obj == parameter_value_lable))
    {
        lv_label_set_text_fmt(obj, "采样值:%d", samplevalue);
    }
}

最后,最关键的一步,我们需要设置触发源,就是当采样值变化了,需要更新lable显示的时候,需要发送个信号通知对应的lable,即触发上面的步骤中事件:

lv_event_send(parameter_value_lable, LV_EVENT_VALUE_CHANGED, NULL);

因为,parameter_value_lable是个全局的变量,lv_event_send函数可以在任何地方被调用(LVGL初始化完成后)。

经过上面的描述,相信各位小伙伴已经掌握了lable实时显示数据更新的方法,赶紧去试试吧!
请添加图片描述

### 如何在LVGL中实现中文显示 #### 字体生成工具 为了使 LVGL 能够支持中文字符的显示,可以利用官方提供的字体生成工具来创建自定义字体。该工具允许开发者将 TrueType (TTF) 或 Web Open Font Format (WOFF) 文件转换为适合嵌入式系统的 C 数组形式[^2]。 #### 编码转换注意事项 由于常用的中文字体通常采用 GB2312 编码标准,而 LVGL 所需的是 UTF-8 格式的字形数据,因此需要先完成从 GB2312 至 UTF-8 的编码转换过程[^1]。这一环节可以通过多种方式达成,比如借助专门软件或者脚本程序自动处理大量字符集映射关系。 #### 配置步骤概览 当准备好了适配后的字体资源之后,在项目源代码里声明所要应用的新字体对象,并通过设置样式属性指定给特定控件使用即可。例如下面这段演示代码展示了如何在一个标签组件上运用名为 `Font30` 的定制化汉字方案: ```c #include "lv_font.h" // 声明之前由工具生成并导入项目的字体变量 LV_FONT_DECLARE(Font30); void lv_mainstart(void) { // 创建一个新的标签实例附加到当前屏幕活动区域 lv_obj_t *font_lable = lv_label_create(lv_scr_act()); // 设置此标签的文字风格为其关联新字体 lv_obj_set_style_text_font(font_lable, &Font30, LV_STATE_DEFAULT); // 更新标签内容为一段含有中文字符的字符串 lv_label_set_text(font_lable, "简易数字万用表"); // 将该标签居中放置于父容器之中 lv_obj_center(font_lable); } ``` 值得注意的一点在于,如果更改了原始导出文件的名字,则必须确认内部引用保持一致;否则可能导致链接错误或其他异常情况发生[^3]。另外还需留意开发环境本身的文本保存格式设定——确保其默认选项设定了兼容 UTF-8 的模式,从而避免潜在的数据解析偏差引发界面渲染失败等问题同样重要。 ### 示例:完整的流程说明 假设现在有一个需求是要让某个基于 Linux 平台运行的应用能够正常显示出包含繁体汉字在内的各种语言混合组成的短句“你好世界 Hello World”。以下是具体操作指南: 1. **挑选合适的字体素材** - 访问 https://www.google.com/get/noto/ 下载覆盖范围广泛的 Noto Sans SC Regular 版本作为基础材料 2. **启动在线转换服务** - 浏览至地址栏输入 https://lvgl.io/tools/fontconverter 后打开页面 3. **上传目标ttf文档** - 使用界面上提供的功能按钮选取刚才下载下来的压缩包里的 .ttf 类型单个文件提交上去 4. **调整参数细节** - 在弹出来的对话框里面勾选对应大小数值(如30px),同时激活高级选项卡下的子集筛选机制,手动录入期望保留的具体Unicode区间列表 `{...}` 5. **获取最终产物** - 经过短暂等待后会得到一组新的头文件(.h)+二进制数组描述符(.c),将其妥善存放到工程目录下相应位置处 6. **集成进原有框架结构** - 修改初始化函数部分增加必要的调用语句如下所示: ```c extern const lv_font_t my_custom_chinese_font_30; static void setup_ui() { ... /* Assign custom font */ lv_theme_t* th = lv_theme_default_init(NULL, NULL, NULL, NULL, NULL); lv_theme_set_current(th); lv_disp_t *disp = lv_disp_get_default(); lv_disp_set_user_data(disp, &my_custom_chinese_font_30); ... } ``` 7. **验证效果呈现** - 构建完成后重新部署镜像观察实际表现是否符合预期
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

智驾

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值