当前位置: 首页 > article >正文

从LVGL官方例程到自定义界面:在Windows上用CodeBlocks模拟器快速玩转GUI设计

从LVGL官方例程到自定义界面在Windows上用CodeBlocks模拟器快速玩转GUI设计对于嵌入式开发者而言图形用户界面(GUI)设计往往需要在硬件平台上反复烧录测试效率低下。而LVGL模拟器配合CodeBlocks的组合为开发者提供了一个在PC端快速原型设计的绝佳解决方案。本文将带你超越基础环境搭建直接进入实战环节——如何基于官方Demo工程快速创建自定义界面将模拟器转化为高效的原型设计工具。1. 工程结构与核心文件解析在开始修改前我们需要先理解LVGL CodeBlocks工程的关键组成部分。打开工程后左侧文件树中这几个文件尤为重要├── main.c # 程序入口与主循环 ├── lvgl/ # LVGL核心库 │ ├── src/ # 核心组件实现 │ └── widgets/ # 内置控件源码 ├── lv_drivers/ # 显示/输入驱动 └── lv_conf.h # 库功能配置开关重点关注main.c中的这三个函数void lv_port_disp_init(void); // 显示初始化 void lv_port_indev_init(void); // 输入设备初始化 void lv_demo_widgets(void); // 官方示例入口提示修改前建议备份原始工程可通过复制整个项目文件夹实现2. 从Demo到自定义的第一步替换示例入口官方示例虽然炫酷但我们要创建自己的界面。首先在main.c中找到lv_demo_widgets()调用处将其替换为我们的初始化函数// 原调用 // lv_demo_widgets(); // 替换为 lv_user_ui_init();接着在文件末尾添加我们的实现函数void lv_user_ui_init(void) { lv_obj_t *scr lv_scr_act(); // 获取当前屏幕对象 lv_obj_set_style_bg_color(scr, lv_color_hex(0x003366), 0); // 设置背景色 // 添加标题标签 lv_obj_t *label lv_label_create(scr); lv_label_set_text(label, 我的第一个LVGL界面); lv_obj_align(label, LV_ALIGN_TOP_MID, 0, 20); }编译运行后你会看到一个深蓝色背景中央显示白色文字的简单界面。这个过程中有几个关键点需要注意lv_obj_t是所有LVGL对象的基类型创建对象后必须设置其属性和位置颜色使用16进制值表示0x后跟RRGGBB格式3. 构建温湿度监控面板实战让我们实现一个更实用的示例——模拟温湿度显示面板。首先在lv_user_ui_init()中创建基础框架// 创建主容器 lv_obj_t *panel lv_obj_create(scr); lv_obj_set_size(panel, 200, 150); lv_obj_center(panel); // 添加面板标题 lv_obj_t *title lv_label_create(panel); lv_label_set_text(title, 环境监测); lv_obj_align(title, LV_ALIGN_TOP_MID, 0, 10);接着添加温度显示部分// 温度图标 lv_obj_t *temp_icon lv_label_create(panel); lv_label_set_text(temp_icon, LV_SYMBOL_TEMP); lv_obj_set_style_text_color(temp_icon, lv_color_hex(0xFF3333), 0); lv_obj_align(temp_icon, LV_ALIGN_TOP_LEFT, 20, 40); // 温度值 lv_obj_t *temp_value lv_label_create(panel); lv_label_set_text(temp_value, 25.3°C); lv_obj_align_to(temp_value, temp_icon, LV_ALIGN_OUT_RIGHT_MID, 10, 0);用同样的方式添加湿度显示// 湿度图标 lv_obj_t *humi_icon lv_label_create(panel); lv_label_set_text(humi_icon, LV_SYMBOL_DROP); lv_obj_set_style_text_color(humi_icon, lv_color_hex(0x3399FF), 0); lv_obj_align(humi_icon, LV_ALIGN_TOP_LEFT, 20, 70); // 湿度值 lv_obj_t *humi_value lv_label_create(panel); lv_label_set_text(humi_value, 62%); lv_obj_align_to(humi_value, humi_icon, LV_ALIGN_OUT_RIGHT_MID, 10, 0);此时界面已具备基本元素但数据是静态的。接下来我们实现动态更新4. 实现数据动态更新与事件响应在main.c顶部添加变量声明static lv_obj_t *temp_value NULL; static lv_obj_t *humi_value NULL; static float current_temp 25.3; static float current_humi 62.0;修改之前的标签创建代码去掉局部变量声明// 原代码 // lv_obj_t *temp_value lv_label_create(panel); // 改为 temp_value lv_label_create(panel);添加定时器回调函数static void sensor_update_cb(lv_timer_t *timer) { // 模拟数据波动 current_temp (rand() % 10 - 5) * 0.1; current_humi (rand() % 10 - 5) * 0.5; // 限制数值范围 current_temp LV_CLAMP(15.0, current_temp, 35.0); current_humi LV_CLAMP(30.0, current_humi, 90.0); // 更新显示 char buf[16]; snprintf(buf, sizeof(buf), %.1f°C, current_temp); lv_label_set_text(temp_value, buf); snprintf(buf, sizeof(buf), %.0f%%, current_humi); lv_label_set_text(humi_value, buf); }在lv_user_ui_init()末尾添加定时器创建lv_timer_create(sensor_update_cb, 1000, NULL); // 每秒更新一次现在运行程序你会看到温湿度数值每隔一秒随机变化模拟真实传感器数据。5. 高级技巧样式系统与动画效果LVGL的强大之处在于其灵活的样式系统。让我们为面板添加一些视觉效果// 定义渐变色样式 static lv_style_t panel_style; lv_style_init(panel_style); lv_style_set_bg_opa(panel_style, LV_OPA_COVER); lv_style_set_bg_color(panel_style, lv_color_hex(0x1E1E2D)); lv_style_set_bg_grad_color(panel_style, lv_color_hex(0x3A3A4D)); lv_style_set_bg_grad_dir(panel_style, LV_GRAD_DIR_VER); lv_style_set_radius(panel_style, 10); lv_style_set_shadow_width(panel_style, 20); lv_style_set_shadow_color(panel_style, lv_color_hex(0x1E1E2D)); // 应用样式到面板 lv_obj_add_style(panel, panel_style, 0);添加温度计图标动画效果// 创建动画对象 lv_anim_t anim; lv_anim_init(anim); lv_anim_set_exec_cb(anim, (lv_anim_exec_xcb_t)lv_obj_set_y); lv_anim_set_var(anim, temp_icon); lv_anim_set_values(anim, 40, 45); lv_anim_set_time(anim, 500); lv_anim_set_repeat_count(anim, LV_ANIM_REPEAT_INFINITE); lv_anim_set_playback_time(anim, 500); lv_anim_start(anim);这些效果立即提升了界面的专业感。LVGL的样式系统支持多种属性设置样式属性说明示例值bg_color背景颜色lv_color_hex(0xFF0000)border_width边框宽度2text_font文本字体lv_font_montserrat_16pad_top上内边距10shadow_width阴影宽度156. 工程组织与模块化开发当界面复杂度增加时合理的代码组织尤为重要。建议采用如下结构project/ ├── src/ │ ├── main.c # 主循环和硬件抽象 │ ├── ui/ # 界面相关 │ │ ├── home.c # 主界面实现 │ │ └── home.h # 界面接口声明 │ └── utils/ # 工具函数 └── lvgl/ # LVGL库创建home.h头文件#ifndef HOME_UI_H #define HOME_UI_H #include lvgl/lvgl.h void home_ui_init(void); void home_ui_update_temp(float value); void home_ui_update_humi(float value); #endif对应的home.c实现#include home.h static lv_obj_t *temp_value NULL; static lv_obj_t *humi_value NULL; void home_ui_init(void) { // 界面初始化代码... } void home_ui_update_temp(float value) { char buf[16]; snprintf(buf, sizeof(buf), %.1f°C, value); lv_label_set_text(temp_value, buf); }这种模块化方式使代码更易维护也方便团队协作开发。

相关文章:

从LVGL官方例程到自定义界面:在Windows上用CodeBlocks模拟器快速玩转GUI设计

从LVGL官方例程到自定义界面:在Windows上用CodeBlocks模拟器快速玩转GUI设计 对于嵌入式开发者而言,图形用户界面(GUI)设计往往需要在硬件平台上反复烧录测试,效率低下。而LVGL模拟器配合CodeBlocks的组合,为开发者提供了一个在PC…...

别再轮询了!在Qt里用HIDAPI实现USB设备通信,试试这个异步读取方案

告别轮询:在Qt中实现高效USB-HID异步通信的现代方案 当开发者需要在Qt应用中与USB-HID设备通信时,传统的轮询方式往往会导致UI卡顿、CPU资源浪费等问题。本文将介绍几种更优雅的异步通信方案,充分利用Qt的事件循环机制,实现高效、…...

终极指南:3步掌握Path of Building装备规划与角色构建

终极指南:3步掌握Path of Building装备规划与角色构建 【免费下载链接】PathOfBuilding Offline build planner for Path of Exile. 项目地址: https://gitcode.com/gh_mirrors/pat/PathOfBuilding Path of Building是一款强大的离线Build规划工具&#xff0…...

用Proteus玩转Arduino?别忘了这些电阻的‘潜规则’(附光敏电阻模拟方案)

用Proteus玩转Arduino?别忘了这些电阻的‘潜规则’(附光敏电阻模拟方案) 在虚拟原型开发领域,Proteus与Arduino的结合为创客们提供了无限可能。但许多开发者往往忽略了电路仿真中最基础的元件——电阻的巧妙运用。本文将揭示那些鲜…...

发现安卓应用宝库:APKMirror客户端让你安全下载任何版本应用

发现安卓应用宝库:APKMirror客户端让你安全下载任何版本应用 【免费下载链接】APKMirror 项目地址: https://gitcode.com/gh_mirrors/ap/APKMirror 还记得上次为了找一个旧版本的微信,在各种论坛里翻来覆去地找,最后下载的APK文件还让…...

不止是怀旧:用Docker部署超级马里奥,聊聊容器化对经典软件保存的意义

容器化时光机:用Docker守护数字文化遗产的技术实践 在数字时代洪流中,经典软件如同沙漏中的细沙,正以惊人的速度从我们的指尖流逝。那些曾经定义了一个时代的程序、游戏和工具,正面临着"数字消亡"的威胁——操作系统迭代…...

通过用量看板深度分析,回顾团队月度大模型API开销明细

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 通过用量看板深度分析,回顾团队月度大模型API开销明细 对于团队管理者而言,清晰、透明地掌握大模型API的使…...

树莓派当机载电脑:搭建Pixhawk无人机与动捕系统的ROS通信桥梁(VRPN/MOCAP_NOKOV双方案)

树莓派作为机载计算机:构建Pixhawk无人机与动作捕捉系统的ROS通信框架 在无人机自主飞行和机器人协同控制领域,高精度的位置反馈是实现稳定控制的基础。传统GPS定位在室内环境中完全失效,而基于光学动作捕捉系统的定位方案能够提供毫米级的精…...

用Xilinx Artix-7 FPGA手把手教你实现一个32位ALU(含数码管显示与状态灯)

从零构建Xilinx Artix-7 FPGA上的32位ALU实战:数码管动态显示与状态灯设计 在数字电路与计算机体系结构的学习中,算术逻辑单元(ALU)作为CPU的核心组件,其设计与实现一直是硬件工程师的必修课。本文将带领读者使用Xilinx Artix-7 FPGA开发板(x…...

别再死记硬背了!用Vivado 2022.1和Vitis搭建ZYNQ工程,这份避坑清单帮你省下3小时

ZYNQ开发实战:从Vivado到Vitis的高效避坑指南 当第一次打开Vivado和Vitis的开发者,往往会被复杂的界面和繁琐的配置流程所困扰。本文将以"按键控制LED"这一经典案例为主线,揭示ZYNQ开发中最容易踩中的12个深坑,并提供经…...

TDengine数据迁移与备份实战:使用taosdump将2.x数据安全升级到3.0

TDengine 2.x到3.0数据迁移完全指南:从备份策略到避坑实践 时序数据库的版本升级往往伴随着数据迁移的挑战。当企业决定将TDengine从2.x升级到3.0时,如何确保数据安全迁移成为技术团队面临的首要问题。本文将深入解析使用taosdump工具进行数据迁移的全流…...

手把手教你用85033E校准套件搞定E5071C网分的TDR和S参数测量

手把手教你用85033E校准套件搞定E5071C网分的TDR和S参数测量 在射频和微波测试领域,网络分析仪是工程师不可或缺的工具,而E5071C作为一款经典的中端矢量网络分析仪,广泛应用于通信、雷达、天线等领域的研发和测试。对于刚接触这款设备的新手工…...

如何新建自己的应用

建议步骤如下。 1 创建 WPF 项目 项目文件至少包含&#xff1a; <TargetFramework>net7.0-windows</TargetFramework> <UseWPF>true</UseWPF>2 引用基础库 至少引用&#xff1a; HeBianGu.Base.WpfBaseHeBianGu.General.WpfControlLib 根据需要再…...

Vue项目部署后Nginx报500?手把手教你排查并修复‘rewrite or internal redirection cycle‘循环重定向

Vue项目部署后Nginx报500&#xff1f;手把手教你排查并修复rewrite or internal redirection cycle循环重定向 部署Vue项目时遇到Nginx报500错误&#xff0c;日志显示"rewrite or internal redirection cycle"&#xff0c;这可能是许多前端开发者都会遇到的典型问题。…...

GD32C103RBT6 I2C 驱动全解析

一、I2C 通信基础概述 1. I2C 硬件接口 GD32C10x 提供 I2C0、I2C1 两组硬件 I2C: SCL:串行时钟线(由主机产生) SDA:串行数据线 需外接 上拉电阻(4.7kΩ 经典值) 支持 多主机、多从机 2. 通信模式 主机模式:MCU 主动发起通信(最常用) 从机模式:MCU 被其他主机访问 …...

Blender Shape Keys进阶:从表情到形态的精准控制

1. Shape Keys基础概念与核心价值 第一次接触Blender的Shape Keys功能时&#xff0c;我完全被它强大的变形能力震撼了。简单来说&#xff0c;Shape Keys&#xff08;形态键&#xff09;就像给3D模型预设了多种"表情包"&#xff0c;通过滑块控制就能实现平滑的形态过渡…...

SteamAutoCrack完整指南:一键移除游戏DRM保护

SteamAutoCrack完整指南&#xff1a;一键移除游戏DRM保护 【免费下载链接】Steam-auto-crack Steam Game Automatic Cracker 项目地址: https://gitcode.com/gh_mirrors/st/Steam-auto-crack SteamAutoCrack是一款专业的开源游戏DRM移除工具&#xff0c;能够自动解除Ste…...

还在对着学校格式手册掉头发?Paperxie 帮你一键搞定毕业论文排版

paperxie-免费查重复率aigc检测/开题报告/毕业论文/智能排版/文献综述/AI PPThttps://www.paperxie.cn/format/typesettinghttps://www.paperxie.cn/format/typesetting 改完论文正文&#xff0c;本以为能松口气&#xff0c;结果学校的格式手册又把你打回原形。字体字号、页眉页…...

格式改到心态崩?Paperxie 智能排版,一键把论文 “捏” 成学校模板

paperxie-免费查重复率aigc检测/开题报告/毕业论文/智能排版/文献综述/AI PPThttps://www.paperxie.cn/format/typesettinghttps://www.paperxie.cn/format/typesetting 改完论文正文、降完重复率&#xff0c;本以为终于能喘口气&#xff0c;结果被导师一句 “格式全错&#xf…...

Grok 4.3与未来展望——智能体时代的Grok与AI安全新范式

目录1 Grok 4.3 Beta&#xff1a;最新版本的技术跃迁1.1 2026年4月&#xff1a;Grok 4.3的发布1.2 Computer Use&#xff1a;AI操作计算机的新范式2 reasoning_effort参数的深度解析2.1 推理资源的动态分配2.2 推理深度与质量的实证关系3 Grok的AI安全框架3.1 "最大真实性…...

消息平台接入实战:Hermes Agent 实现微信/钉钉日常任务自动化的 4 步配置

1. 微信/钉钉自动化不是“接个API就完事”,而是上下文边界的重新定义 大多数人第一次配置 Hermes Agent 接入微信或钉钉时,会下意识打开官方文档,复制粘贴几行 webhook 配置,跑通一条“收到消息→回复‘你好’”的 demo 就以为大功告成。我试过三次——第一次在测试环境里…...

2025最新版PHP加密系统MENC加密系统 V2.4.0 含搭建教程

内容目录一、详细介绍二、效果展示1.部分代码2.效果图展示三、学习资料下载一、详细介绍 很牛逼的一款加密系统&#xff0c;PHP代码加密系统是一个值得信赖的工具&#xff0c;它可以帮助开发者保护自己的代码不受恶意攻击和盗用。无论是个人开发者还是企业用户&#xff0c;都可…...

Claude Code 用户如何通过 Taotoken 配置稳定 API 连接避免封号困扰

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 Claude Code 用户如何通过 Taotoken 配置稳定 API 连接避免封号困扰 基础教程类&#xff0c;针对经常遇到 Claude Code 封号或 Tok…...

编程统计员工午休时长,下午工作效率数据,划定合理休息时间,科学提升全天职场整体工作产能。

基于商务智能&#xff08;BI&#xff09;思想的「员工午休时长 vs 下午工作效率」分析系统&#xff0c;保持中立、去营销化、无引流。一、实际应用场景描述某中型互联网团队发现&#xff1a;- 有人午休时间过长&#xff0c;下午精神仍不佳- 有人午休过短&#xff0c;下午效率明…...

B站视频下载神器:如何优雅地将Bilibili内容保存到本地

B站视频下载神器&#xff1a;如何优雅地将Bilibili内容保存到本地 【免费下载链接】BilibiliDown (GUI-多平台支持) B站 哔哩哔哩 视频下载器。支持稍后再看、收藏夹、UP主视频批量下载|Bilibili Video Downloader &#x1f633; 项目地址: https://gitcode.com/gh_mirrors/b…...

手把手教你改造10块钱的USBASP烧录器,让它兼容Arduino IDE和AVRDUDESS

10元USBASP烧录器改造实战&#xff1a;解锁Arduino与AVRDUDESS全兼容方案 从闲置到全能&#xff1a;低成本硬件改造的价值探索 在电子制作和嵌入式开发领域&#xff0c;专业烧录工具往往价格不菲。但你可能不知道&#xff0c;手头那台吃灰的"智峰"版USBASP烧录器&…...

2026届必备的六大AI辅助论文方案实际效果

Ai论文网站排名&#xff08;开题报告、文献综述、降aigc率、降重综合对比&#xff09; TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 处在信息爆炸的当下之时段&#xff0c;内容创作成为了个人以及企业的核心竞争力所在。针对广…...

GX Works3实战:基于TCP+SLMP协议与三菱FX5U的工业互联配置详解

1. 从零开始搭建FX5U通信环境 第一次接触三菱FX5U系列PLC时&#xff0c;我被它小巧的机身和强大的性能惊艳到了。这款PLC虽然体积只有传统Q系列的一半大小&#xff0c;但处理能力却提升了两倍以上。不过在实际项目中&#xff0c;最让我头疼的就是通信配置问题——特别是从老项…...

2025届学术党必备的五大AI论文平台解析与推荐

Ai论文网站排名&#xff08;开题报告、文献综述、降aigc率、降重综合对比&#xff09; TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 针对AI写作工具标题的创作&#xff0c;要精准去把握目标客户的核心需求&#xff0c;目标客户…...

Taotoken多模型API助力MATLAB用户解决复杂建模问题

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 Taotoken多模型API助力MATLAB用户解决复杂建模问题 对于在MATLAB环境中进行算法开发与系统仿真的研究人员而言&#xff0c;日常工作…...