GUI Guider(V1.7.2) 设计UI在嵌入式系统上的应用(N32G45XVL-STB)

news2024/11/23 23:16:34

目录

概述

1 使用GUI Guider 设计UI

1.1 创建页面

1.2 页面切换事件实现

1.3 生成代码和仿真

1.3.1 生成和编译代码

1.3.2  仿真UI 

2 GUI Guider生成的代码结构

2.1 代码结构介绍

2.2 Project目录下的文件

3 板卡上移植UI

3.1 加载代码至工程目录

3.2 主函数中调用UI

4 测试


GUI Guider 设计UI在嵌入式系统上的应用(N32G45XVL-STB)

概述

本文主要介绍使用GUI Guider工具设计UI,该UI的底层实现方式是基于lvgl。文中详细介绍了使用GUI Guider创建项目的全部过程,包括生成代码,编译和仿真。重点介绍了如何将GUI Guider 生成的UI代码移植到嵌入式系统中,笔者使用N32G45XVL-STB板块,通过实操的方式介绍了完整的实现过程。

1 使用GUI Guider 设计UI

1.1 创建页面

打开GUI-Guider-1.7.2-GA软件,并创建工程,LCD选择480x320。完成项目创建后。窗口两个页面,其UI如下:

1)页面-1:

功能介绍:在该页面上设计一个表盘和一个button,表盘上动态显示数值的变化。button实现页面切换功能。

2)页面-2:

功能介绍:在该页面上设计一个图表和一个button,图标上动态显示数值的变化的波形。button实现页面切换功能。

1.2 页面切换事件实现

 在GUI Guider上可通过配置button事件对象,实现页面切换功能,其配置方法如下:

step-1) 鼠标右键点击button按钮

step-2) 配置跳转的页面

step-3) 使用同样方法配置第二个页面的跳转screen

通过以上步骤完成UI的设计,接下来进行代码生成和仿真。

1.3 生成代码和仿真

1.3.1 生成和编译代码

 在GUI Guider上,点击如下Item,生成代码

如果代码生成成功,可以在log栏看见如下信息:

 完成代码生成过程后,就可以编译代码,点击如下item就可以编译代码

如果编译代码成功,就会生成.exe文件,此时就可以仿真UI

1.3.2  仿真UI 

点击如下Item运行代码

如果.exe文件能正常运行时,可以看见如下UI

 运行一段时间之后的UI图像:

2 GUI Guider生成的代码结构

2.1 代码结构介绍

点击GUI Guider的Code Editor,可以代码的整体结构

Custom 文件夹下的代码功能: 

1)实现和UI触发事件相关的功能,本例中有两个页面的UI,

页面一: 速度表值变化

页面二: 数据值变化

Generated文件夹下的代码功能:

1)该文件下的.c文件分为3个类型

events_init.c: 事件初始化函数类

gui_guider.c: GUI初始化入口函数库

setup_scr_xxxx.c : 页面的UI布局函数库

widgets_init.c:  更新UI数据函数库 

2.2 Project目录下的文件

该目录下的文件夹很多,对于做移植而言,我们不要知道每个文件里的内容,只需要掌握使用方法即可。如果打算深入理解GUI Guider实现结构,如果时间允许,可做详细study。

这里重点介绍3个目录:

1)custom:  user功能代码目录

2)generated: UI功能代码目录

3)lvgl-simulator: 仿真程序目录,通过study该目录下的代码,可以了解UI的调用层级关系

3 板卡上移植UI

在移植GUI Guider生成的UI代码之前,必须保证板卡上已经完整移植了lvgl代码,且能正常工作。

3.1 加载代码至工程目录

step-1: 复制文件

将custom和generated下的文件全部复制到工程目录下

step-2: 添加文件至项目

在keil的项目文件下创建generated文件目录,然后将custom和generated中的所有.c加载到该目录中

step-3: Keil配置文件路径

在keil中将custom和generated中的.h文件路径配置到项目中,便于编译代码

3.2 主函数中调用UI

在调用GUI Guider生成的代码之前,必须保证lvgl已经被初始化。

代码第25行: 创建guider_ui对象

代码第28行: UI架构初始化

代码第29行: 用户UI和事件等初始化

源代码:

lv_ui guider_ui;
void lv_mainstart(void)
{
    setup_ui(&guider_ui);
    custom_init(&guider_ui);
}

4 测试

完成以上步骤之后,GUI Guider的UI框架已经全部移植完毕。在main.c中调用lv_mainstart()函数,编译代码,并将执行文件下载到板卡中。其运行结果如下:

1)speed UI 测试

2) wave UI测试

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1830468.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

新旧torch中傅里叶变换实现(fft)

由泰勒级数我们知道,一个函数可以被分解成无穷个幂函数叠加的形式,于是同样地,一个周期函数也可以被分解成多个周期函数叠加,于是自然而然地,三角函数符合这个需求,由傅里叶级数我们可以将周期函数分解成无…

【车载音视频AI电脑】铁路视频监控系统解决方案

方案简介 铁路视频监控系统解决方案针对铁路行业安全运营保障需求,根据中国铁路总公司的技术规范要求,基于铁路系统的IP网络,采用先进的视频监控技术,构建一套完备的数字化、智能化、分布式铁路综合视频监控系统,实现视…

第二证券A股重要变化!今起实施

A股系列重要指数迎来样本股调整! 此前,深交所及其全资子公司深证信息发布公告,将对深证成指、创业板指、深证100(以下统称“深市中心指数”)施行样本股定时调整。此次调整于6月17日(今日)正式施…

关于电脑文件的规划思考

概述 设置C、D、E、F 四个盘 C盘:系统数据使用,操作系统、其他软件需要用到的系统性资源 D盘:应用软件区 的使用,数据库、navacat、idea、visual studio、浏览器、向日葵、虚拟机…… E盘:工作区:公司资料…

如何移植libwebsockets

libwebsockets是一个高性能的开源C语言库,专为实现WebSocket协议及相关的HTTP协议而设计。它不仅使开发者能够在客户端与服务器端轻松构建WebSocket连接,还可以用作标准HTTP服务器。WebSocket是一种在单个TCP连接上进行全双工通信的协议,可以…

APS为什么是业务、开发、数据和算法的结合体

获取更多资讯,赶快关注上面的公众号吧! 文章目录 一 引言二 业务是灵魂2.1 生产类型2.2 生产模式2.3 生产约束三 开发是支撑3.1 开发语言3.2 技术架构3.3 内存计算3.4 系统集成3.5 系统交互四 数据是基础五 算法是核心5.1 问题建模5.2 算法建模总结APS系统的实施是一个类似阶…

技术心得总结:a 标签实现新标签页打开功能

最近,有用户提出希望在点击菜单项时,能够在新标签页中打开对应的链接功能。这类似于我们常用的右键菜单中的“在新标签页打开链接”功能。经过对需求的分析和代码的查看,我们找到了实现这一功能的方法。 原始实现 最初的跳转实现是通过用户触…

three.js 基础01

1.场景创建 Scene() 2.常用形状集几何体「Geometry」[可设置长宽高等内容,如:new THREE.BoxGeometry(...)] 长方体 BoxGeometry圆柱体 CylinderGeometry 球体SphereGeometry圆锥体ConeGeometry矩形平面 PlaneGeometry 圆面体 CircleGeo…

Linux中文件查找相关命令比较

Linux中与文件定位的命令有find、locate、whereis、which,type。 一、find find命令最强,能搜索各种场景下的文件,需要配合相关参数,搜索速度慢。在文件系统中递归查找文件。 find /path/to/search -name "filename"…

人工智能发展历程了解和Tensorflow基础开发环境构建

目录 人工智能的三次浪潮 开发环境介绍 Anaconda Anaconda的下载和安装 下载说明 安装指导 模块介绍 使用Anaconda Navigator Home界面介绍 Environment界面介绍 使用Jupter Notebook 打开Jupter Notebook 配置默认目录 新建文件 两种输入模式 Conda 虚拟环境 添…

《软件测试52讲》——测试基础知识篇

1 你真的懂测试吗?从“用户登录”测试谈起 从“用户登录”测试谈起,“用户登录”功能作为测试对象 作为测试工程师,你的目标是要保证系统在各种应用场景下的功能是符合设计要求的,所以你需要考虑的测试用例就需要更多、更全面。 …

Java I/O操作

引言 在Java编程中,输入和输出(I/O)操作是必不可少的部分。Java I/O通过一系列流(Stream)类和方法,支持文件操作、控制台输入输出、网络I/O等多种I/O操作。本文将详细介绍Java I/O的基础概念、文件操作、字…

SQL注入攻击

网站是什么工作的? php写的代码电脑不认识,脚本引擎就是做翻译的,把高级代码翻译为机器语言 访问网站的地址,不同的新闻的id是不一样的,就是对应数据库的不同位置 这里面一个ip地址对应三个网站(怎么能对应…

JavaScript领域的五大AI工程利器

五大引领AI工程的JavaScript工具,为欲将LLM融入项目的开发者提供关键资源。 译自Top 5 JavaScript Tools for AI Engineering,作者 Alexander T. Williams。 传统上以在网页开发中扮演角色而闻名的JavaScript,令许多人惊讶的是,它…

CAN测试工具——BUSMASTER

文章目录 推荐理由一、菜单栏Transmit WindowDiagnostics二、Tools推荐理由 BUSMASTER是一个用于设计,监测,分析与模拟CAN网络的开源的开放式总线PC软件. 1) 可以和十几种常用CAN总线硬件兼容。比如:IXXAT、PEAK、Kvaser、CANcase XL等。 2)免费,开源 https://rbei-etas.g…

pandas获取某列最大值的所有数据

第一种方法: 按照某列进行由大到小的排序,然后再进去去重,保留第一个值,最终保留的结果就是最大值的数据 # 由大到小排序 data_frame data_frame.sort_values(bycolumn_a, ascendingFalse)# 按照column_b列去重保留第一条&#…

人工智能在数字病理领域的最新进展|顶刊速递·24-06-14

小罗碎碎念 文献主题:人工智能在【数字病理】领域的最新进展 今天在写这篇推文的时候,脑子里就一个念头——大模型的风,终于还是卷到了病理学领域。 这是一个好事哈,如果我们搞病理研究的,也能有一个像Chatgpt一样的工…

如何使用 pip 卸载所有已安装的 Python 包?

在开发过程中,我们可能会安装许多 Python 包,有时需要彻底清理环境,以便从头开始或者解决冲突问题。下面将介绍如何使用 pip 命令卸载所有已安装的 Python 包。 一、列出所有已安装的包 首先,需要列出当前环境中所有已安装的包。…

开源模型应用落地-LangChain高阶-LCEL-表达式语言(七)

一、前言 尽管现在的大语言模型已经非常强大,可以解决许多问题,但在处理复杂情况时,仍然需要进行多个步骤或整合不同的流程才能达到最终的目标。然而,现在可以利用langchain来使得模型的应用变得更加直接和简单。 LCEL是什么&…

树状数组练习

先看一下最后一题&#xff0c;这是一个树状数组的题目&#xff0c;那就水一下吧,但是由于没有注意问题&#xff0c;wa了很多次 const int N (int)1e5 5; int n; int flag[N]; int dp[N]; class Solution { public:vector<int> countOfPeaks(vector<int>& num…