系统编程-lvgl

带界面的MP3播放器 -- lvgl

目录

带界面的MP3播放器 -- lvgl

一、什么是lvgl?

二、简单使用lvgl

在工程中编写代码

实现带界面的mp3播放器

main.c

events_init.c

events_init.h

补充1:glob函数

补充2:atexit函数


一、什么是lvgl?

-- LVGL是一个开源的嵌入式图形库,用于创建图形界面应用程序。它提供了丰富的图形元素和用户界面控件,能够在各种嵌入式平台上运行,包括单片机和微处理器。

-- Gui和LVGL是两个相关的概念。

  • GUI是指图形用户界面,是用户与计算机进行交互的界面。
  • LVGL是一个开源的GUI库,可以用于创建嵌入式系统中的图形用户界面。

-- lvgl提供了一套丰富的图形绘制和交互功能,可以在嵌入式设备上创建漂亮、交互式的用户界面。它支持多种显示控制器和输入设备,并具有高度可定制性。

-- 因此,Gui和LVGL的关系是,LVGL是一种用于创建Gui的库或工具。使用LVGL,开发人员可以更容易地实现各种功能的图形界面,从而提升用户体验

二、简单使用lvgl

  • 1、首先将安装包复制到linux虚拟机中 

    alt text

  • 2、安装需要的库
sudo apt-get install libsdl2-dev
  • 3.安装好之后,进行软件的安装
sudo dpkg -i 软件名
  • 4、在左下角的应用找到,打开即可 

    alt text

  • 5、创建项目(可以改项目生成代码的路径) 

    alt text

  • 6、lvgl相关操作

-- 1 

alt text

-- 2 

alt text

-- 3 

alt text

-- 4 设置好之后点击上面的生成代码 会在设置好的路径下生成我们的项目文件 

注!!!要确保组件弄正确后再生成代码,如果后续在项目中将代码改过后,然后又回来改组件再次生成代码,那么原先的代码会被覆盖!!!功能模块就要重新写

alt text

-- 5 生成好之后 在项目得了路径下使用make进行项目的编译 

alt text

-- 6 生成的可执行文件放在 该路径下的build下的bin里面,有一个simulator文件: 

alt text

在工程中编写代码

-- 工程代码中我们会使用到的源文件,只用改变两个文件即可 ,这里有的函数头文件可能会报红,不用管,只要能make成功即可。

alt text

实现带界面的mp3播放器

main.c

alt text

alt text


events_init.c

alt text

alt text


events_init.h

alt text


 


补充1:glob函数

-- 在 Linux 中, C 语言的 glob 函数用于根据给定的模式查找文件名。 它实现了类似于 shell 的通配符匹配功能

-- 函数原型:

  • int glob(const char *pattern, int flags, int (*errfunc)(const char *epathname, int eerrno), glob_t *pglob);

-- 函数参数

  • const char * pattern:要匹配的路径模式。例如," * .c" 会匹配当前目录下的所有 C 源文件。

  • int flags:控制匹配行为的标志。这些标志可以是以下之一或多个(使用按位或 | 运算符组合):
    -- GLOB_ERR:在访问某个路径时发生错误时,glob 函数会立即返回错误。如果未设置此标志,glob 将在出现错误时继续处理后续路径。
    -- GLOB_MARK:在匹配到的路径名称后面添加一个斜杠(/),表示这是一个目录。
    -- GLOB_NOSORT:不对匹配结果进行排序,结果将按照文件系统的顺序返回。
    -- GLOB_DOT:匹配以点 (.) 开头的文件(如 .git),默认情况下,glob 不匹配这些文件。

  • int (*errfunc)(const char *epathname, int eerrno):一个可选的回调函数,用于处理错误。如果为 NULL,不调用此函数。

  • glob_t *pglob:指向 glob_t 结构的指针。该结构用于存储匹配结果。glob_t 结构定义如下:
    -- gl_pathc:匹配到的路径数量。 -- gl_pathv:指向字符串数组的指针,其中存储了所有匹配的路径。

typedef struct {  size_t gl_pathc;      char **gl_pathv;      size_t gl_offs;       
} glob_t;

alt text

alt text

-- 去给的路径下找相应通配符的文件。结果存在结构体中。

补充2:atexit函数

-- atexit 是一个 C 标准库函数,用于注册在程序正常终止时会被调用的函数。

-- 函数原型:

#include <stdlib.h>  int atexit(void (*func)(void));

-- 函数参数

  • func:指向无参数且返回类型为 void 的函数的指针。当 exit 被调用时,这个函数将被执行。

-- 函数返回值

  • 如果成功,atexit 返回 0。如果发生错误(如超出可注册函数的数量),则返回非零值。

alt text

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

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

相关文章

Axios 中的相关参数

在 Axios 中&#xff0c;发起 HTTP 请求时你可以使用多种参数来配置请求的行为。以下是一些主要的参数&#xff1a; 1. url 描述&#xff1a;请求的 URL。示例&#xff1a;axios.get(/api/users) 2. method 描述&#xff1a;HTTP 请求的方法&#xff0c;可以是 GET, POST, …

通过C# 读取PDF页面大小、方向、旋转角度

在处理PDF文件时&#xff0c;了解页面的大小、方向和旋转角度等信息对于PDF的显示、打印和布局设计至关重要。本文将介绍如何使用免费.NET 库通过C#来读取PDF页面的这些属性。 文章目录 C# 读取PDF页面大小&#xff08;宽度、高度&#xff09;C# 判断PDF页面方向C# 检测PDF页面…

31套科技风PPT模版免费下载

目录 资源名称&#xff1a;31套科技风PPT模板合集资源简介&#xff1a;部分展示&#xff1a;适用人群&#xff1a;资源内容&#xff1a;使用指南&#xff1a;资源下载链接&#xff08;免费&#xff0c;已设置0个积分下载&#xff09; 资源名称&#xff1a;31套科技风PPT模板合集…

Spring + Boot + Cloud + JDK8 + Elasticsearch 单节点 模式下实现全文检索高亮-分页显示 快速入门案例

1. 安装elasticsearchik分词器插件 sudo wget https://release.infinilabs.com/analysis-ik/stable/elasticsearch-analysis-ik-8.13.4.zip sudo mkdir -p ./es_plugins/analysis-ik sudo mkdir ./es_data sudo unzip elasticsearch-analysis-ik-8.13.4.zip -d ./es_plugins/a…

7-zip常见问题

7-Zip作为一款广受欢迎的免费压缩工具&#xff0c;以其高效、稳定的特点赢得了众多用户的青睐。然而&#xff0c;在使用过程中&#xff0c;用户也可能会遇到一些常见问题。以下是一些常见问题及其解决方法&#xff1a; 一、无法打开压缩文件 问题描述&#xff1a; 用户尝试打…

WIFI 频段及信道简介

一、WiFi 三频AP规划信道时&#xff0c;建议分别采用2.4G、5.2G、5.8G频段可用信道。 2.4G频段&#xff1b;5.2G频段&#xff1b;5.8G频段。 1、中国5G WiFi频段 5.8GHz频段&#xff0c;中国开放只有149、153、157、161、165这5个信道&#xff1b; 其中可支持一组80MHz信道…

【ACM出版,高录用EI快检索】第七届计算机信息科学与人工智能国际学术会议(CISAI 2024,9月6-8)

第七届计算机信息科学与人工智能国际学术会议(CISAI 2024) 将于2024年09月6-8日在中国浙江-绍兴举行。 计算机信息科学与人工智能国际学术会议的主题主要围绕“信息科学”与“人工智能”的最新研究展开&#xff0c;旨在荟聚世界各地该领域的专家、学者、研究人员及相关从业人员…

C++—八股文总结(25秋招期间一直更新)

1、const 1.1 指针常量和常量指针 说说const int *a, int const *a, const int a, int *const a, const int *const a分别是什么&#xff0c;有什么特点。 const int *aint const *a; //可以通过 a 访问整数值&#xff0c;但不能通过 a 修改该整数的值&#xff0c;指针本身是…

前端工作常用知识

1. JS为什么单线程 一个简单的原因就是&#xff0c;js在设计之初只是进行一些简单的表单校验&#xff0c;这完全不需要多线程&#xff0c;单线程完全可以胜任这项工作。即便后来前端发展迅速&#xff0c;承载的能力越来越多&#xff0c;也没有发展到非多线程不可的程度。 而且…

Rustrover、IDEA 的 Rust 类型不显示(已解决)

关键词&#xff1a;rustrover 类型不显示&#xff0c;rustrover 不显示类型&#xff0c;IntelliJ IDEA Rust 类型不显示&#xff0c;IntelliJ IDEA Rust 不显示类型 若移动端访问不佳&#xff0c;请使用 –> Github版 背景 博主手欠&#xff0c;使用 IntelliJ IDEA 时&am…

教程:如何搜索社交媒体

文章目录 一、使用 Python 搜索 Telegram1.1. 第 1 步 - 设置代理1.2. 第 2 步 - 安装 Telethon 库1.3. 第 3 步 - 创建数据库文件并登录1.4. 第 4 步 - 创建结果列表1.5. 第 5 步 - 选择要搜索成员的组1.6. 第 6 步 - 导出所有成员的详细信息1.7. 第 7 步 - 将导出的数据存储到…

mysql中出现错误1138-Invalid use of NULL value

问题&#xff1a;1138-Invalid use of NULL value 解决&#xff1a; 问题是当前字段中&#xff0c;有null的值&#xff0c;简单来说就是&#xff0c;你表里有空值&#xff0c;不能设置不为空&#xff01;&#xff01;&#xff01; 把空的值删掉重新设计就好了

LaTex插入图片

LaTeX 提供了许多定制化图片的功能。这篇文章将会介绍如何用最常见的格式插入图片、缩放图片以及如何在文档中引用这些图片。 1.基本使用 效果图如图所示。 \documentclass{article} \usepackage{graphicx} \graphicspath{ {./figure/} }\begin{document}\begin{figure}[!t]…

大数据环境下的数据提取挑战

在大数据环境下&#xff0c;数据提取面临着多方面的挑战。这些挑战不仅源于数据本身的特性和复杂性&#xff0c;还涉及到技术、资源、法律等多个层面。以下是对这些挑战的具体分析&#xff1a; 1. 数据质量与准确性 数据质量问题&#xff1a;大数据环境下&#xff0c;数据来源…

JUC-Synchronized原理进阶

轻量级锁 轻量级锁的使用场景&#xff1a;如果一个对象虽然有多线程要加锁&#xff0c;但加锁的时间是错开的&#xff08;也就是没有竞争&#xff09;&#xff0c;那么可以使用轻量级锁来优化。轻量级锁对使用者是透明的&#xff0c;即语法仍然是 synchronized 假设有两个方法同…

opencv处理图片(实战指南)

一、OpenCV简介 OpenCV&#xff08;Open Source Computer Vision Library&#xff09;是一个开源的计算机视觉和机器学习软件库。它拥有众多的图像处理和计算机视觉功能&#xff0c;包括各种常用的图像处理技术&#xff0c;如滤波、边缘检测、特征提取等。OpenCV支持多种编程语…

UDP 和TCP的应用

一、网络模型 &#xff08;一&#xff09;C/S 模型 客户端 / 服务器&#xff08;Client/Server&#xff0c;C/S&#xff09;模型是一种常见的网络架构。在这种模型中&#xff0c;客户端是主动的角色&#xff0c;向服务器发起请求&#xff1b;服务器端是被动的角色&#xff0c;…

electron-vite封装UI级的消息提示

说明 Electron Vite Vue3 Element Plus Electron中写提示有两种方案&#xff1a; 系统级&#xff1a;electron带的dialog相关APIUI级&#xff1a;UI框架内部的提示&#xff0c;如ElMessage、ElMessageBox、ElNotification等 今天来封装一下UI级别的提示 代码 效果图 源…

Springboot 定时任务cron表达式

Cron表达式是一个强大的字符串&#xff0c;用于在Unix/Linux系统中配置cron job&#xff08;计划任务&#xff09;的时间表。然而&#xff0c;在Spring框架&#xff08;包括Spring Boot&#xff09;中&#xff0c;Cron表达式也被广泛使用于Scheduled注解中&#xff0c;以定义定…

LLM之基于llama-index部署本地embedding与GLM-4模型并初步搭建RAG(其他大模型也可,附上ollma方式运行)

前言 日常没空&#xff0c;留着以后写 llama-index简介 官网&#xff1a;https://docs.llamaindex.ai/en/stable/ 简介也没空&#xff0c;以后再写 注&#xff1a;先说明&#xff0c;随着官方的变动&#xff0c;代码也可能变动&#xff0c;大家运行不起来&#xff0c;可以进…