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

项目(3) - LVGL 图形用户界面(GUI)库

LVGL

  1. 常见的端侧的 UI 开发框架

    • Qt:支持 C++、Python,跨平台特性好,开源
    • LVGL:基于 C 语言,适用于单片机 + 嵌入式设备,开源、免费
    • Winform(C#)、MFC(C++)、WPF(C#)
  2. LVGL 是一个多用于嵌入式的图形界面开发库

  3. 动态库与静态库:

    • 优势:快速完成代码编译及开发;可在看不到源代码的情况下使用库文件
    • 静态库(lib库名.a):
      • 编译时加载到程序中
      • 会使代码体积增大
      • 每个程序独有一份,删除静态库不影响程序运行
    • 动态库(lib库名.so):
      • 运行时加载到程序中
      • 不会使代码体积增大
      • 可多个程序共用一份,删除动态库会导致程序无法执行
  4. LVGL 的移植

    • 移植触摸屏驱动代码:
      • 修改并更新设备树
      • 编译驱动并配置系统启动后自动加载
      • 依赖 input 子系统生成 /dev/event1 节点(精度有限)
      • 移植 tslib 库(生成校准文件)以产生校准后的坐标
      • 在 LVGL 中指定读取触摸屏坐标的节点,由 tslib 库自动校准后传递给 LVGL
      • LVGL 支持按下、松开、滑动等事件
      • 在 LVGL 中指定 LCD 屏幕显示节点,LVGL 基于 framebuffer 技术将显示数据写入显存完成界面显示
    • 移植需完成的工作:
      • LCD 驱动:静态编译到 zImage 中
      • 触摸屏驱动:动态编译为gt9147.ko文件,需配置开机自启动(通过insmod加载到系统)
      • 移植 tslib 库
      • 适配 LVGL 代码
      • 编写 LVGL 代码(设计 UI 界面)
      • 编译 LVGL 代码
      • 将编译后的程序放入开发板中执行
  5. LVGL 的界面开发

一、LVGL

LVGL9.4文档:

https://docs.lvgl.io/master/intro/getting_started/

LVGL(全称 Light and Versatile Graphics Library,意为 “轻量且通用的图形库”)是一款开源的嵌入式图形用户界面(GUI)库,主要用于为资源受限的嵌入式设备(如微控制器、嵌入式系统)构建美观、交互丰富的图形界面。

1.核心特点:

  1. 轻量级与高效性设计上针对嵌入式场景优化,内存占用低(最低仅需数十 KB RAM 和 Flash),可在性能有限的硬件(如 STM32、ESP32 等单片机)上流畅运行。

  2. 跨平台兼容性不依赖特定硬件,支持多种处理器架构(ARM、RISC-V、x86 等)和操作系统(FreeRTOS、Linux、裸机系统等),也可在 PC 端通过模拟器开发。

  3. 丰富的 UI 组件内置大量现成的界面元素,如按钮、滑块、图表、列表、进度条、菜单等,且支持自定义样式(颜色、字体、动画等),便于快速搭建个性化界面。

  4. 强大的交互能力支持触摸、按键、鼠标等多种输入设备,提供平滑的动画效果(过渡、缩放、旋转等),提升用户体验。

  5. 开源与活跃社区基于 MIT 许可证开源,可免费商用;社区活跃,文档完善,开发者可获取丰富的示例和技术支持。

2.适用场景:

LVGL 广泛应用于需要图形界面的嵌入式设备,例如:

  • 智能手表、手环等可穿戴设备
  • 家电控制面板(如洗衣机、冰箱)
  • 车载系统、导航设备
  • 工业控制终端、医疗设备
  • 物联网(IoT)设备的本地交互界面

3. 与framebuffer关系

framebuffer作为LVGL的底层基础,二者有紧密的关系

        framebuffer:是Linux系统提供的一块内存区域,直接对应屏幕像素。它提供了​​画点、画线​​等最基础的绘图能力,相当于一张“画布”

        LVGL:是一个高级的图形库,建立在framebuffer(或其他显示驱动)上,提供按钮、标签、滑块等现成的UI组件和动画效果,通过调用framebuffer接口将图像显示到屏幕上

二、LVGL移植

可在此查看相关步骤

解压LVGL-V8_3.tar

LVGL框架        用于移植的模板

lvgl库的核心          图形库的核心代码 (控件)

相关驱动

1、 相关函数

1. main.c

2. lv_init

3. fbdev_init

3. 修改参数

接口选择:800 * 480 色深:RGB888

打开二维码:

4. 快捷操作

ctrl + f        查找

ctrl+d        复制光标所在行插入到下一行

ctrl+p        通过文件名查找

ctrl+g        跳转到指定行

2、修改makefile

编译  j8 ----并行编译 速度快

三、makefile代码功能说明

这个 Makefile 是一个用于交叉编译 LVGL 图形库应用程序的构建脚本,主要针对 ARM 架构的嵌入式系统。下面分部分解析其功能和各参数的作用:

一、基础变量定义(工具链与路径配置)

CC = arm-linux-gnueabihf-gcc  # 指定交叉编译器:用于在x86主机编译ARM架构的程序
LVGL_DIR_NAME ?= lvgl        # LVGL库的目录名(默认lvgl)
LVGL_DIR ?= ${shell pwd}     # LVGL库的根路径(默认当前目录,可通过外部传入覆盖)
CFLAGS ?= -O3 -g0 -I$(LVGL_DIR)/ -std=gnu99  # 编译选项
LDFLAGS ?= -lm -lpthread     # 链接选项
BIN = demo                   # 最终生成的可执行文件名
  • CC:指定交叉编译器为arm-linux-gnueabihf-gcc,说明目标平台是 ARM 架构的嵌入式系统(而非 x86 主机)。
  • LVGL_DIR:定义 LVGL 库的根目录,默认是当前目录(${shell pwd}获取当前路径),方便后续引用 LVGL 的头文件和源文件。
  • CFLAGS:编译参数详解:
    • -O3:最高级别的代码优化(加速程序运行,减小体积)。
    • -g0:关闭调试信息(减少可执行文件大小,发布时常用)。
    • -I$(LVGL_DIR)/:添加 LVGL 库的头文件搜索路径(确保编译器能找到lvgl.h等头文件)。
    • -std=gnu99:使用 GNU C99 标准编译(兼容 C99 语法)。
    • 注释中的大量-W选项是编译警告开关(目前被注释,未启用),启用后可检测代码潜在问题。
  • LDFLAGS:链接参数:
    • -lm:链接数学库(libm,LVGL 可能用到数学运算)。
    • -lpthread:链接线程库(libpthread,支持多线程,LVGL 的部分功能依赖线程)。

二、源文件与依赖配置

MAINSRC = ./main.c  # 主程序源文件(用户编写的应用入口)# 包含LVGL库和驱动的Makefile(核心依赖)
include $(LVGL_DIR)/lvgl/lvgl.mk
include $(LVGL_DIR)/lv_drivers/lv_drivers.mkCSRCS += $(LVGL_DIR)/mouse_cursor_icon.c  # 额外添加的C源文件(鼠标光标图标)
  • MAINSRC:指定用户编写的主程序文件(main.c,包含main函数,是程序入口)。
  • include指令:引入 LVGL 库自带的lvgl.mklv_drivers.mk,这两个文件是 LVGL 官方提供的,内部定义了 LVGL 核心库和驱动(如显示驱动、输入驱动)的源文件列表、编译规则等,避免用户手动列举所有 LVGL 源文件。
  • CSRCS:汇总所有 C 源文件(包括 LVGL 库的源文件和用户添加的mouse_cursor_icon.c,后者是鼠标光标的图标资源)。

三、目标文件与编译规则

OBJEXT ?= .o  # 目标文件扩展名(默认.o)# 生成目标文件列表(将源文件后缀替换为.o)
AOBJS = $(ASRCS:.S=$(OBJEXT))  # 汇编源文件对应的目标文件
COBJS = $(CSRCS:.c=$(OBJEXT))  # C源文件对应的目标文件
MAINOBJ = $(MAINSRC:.c=$(OBJEXT))  # 主程序对应的目标文件SRCS = $(ASRCS) $(CSRCS) $(MAINSRC)  # 所有源文件汇总
OBJS = $(AOBJS) $(COBJS) $(MAINOBJ)  # 所有目标文件汇总
  • 这部分通过变量替换,将所有源文件(.c.S)转换为对应的目标文件(.o),方便后续批量编译。

四、核心编译与链接规则

# 编译规则:将.c文件编译为.o目标文件
%.o: %.c@$(CC)  $(CFLAGS) -c $< -o $@  # 执行编译:$<是源文件,$@是目标文件@echo "CC $<"  # 打印编译信息(如"CC main.c")# 默认目标:编译并链接生成可执行文件
default: $(AOBJS) $(COBJS) $(MAINOBJ)$(CC) -o $(BIN) $(MAINOBJ) $(AOBJS) $(COBJS) $(LDFLAGS)  # 链接所有目标文件# 清理规则:删除生成的文件
clean: rm -f $(BIN) $(AOBJS) $(COBJS) $(MAINOBJ)  # 删除可执行文件和所有目标文件
  • %.o: %.c:通用编译规则,对所有.c文件生效,将其编译为.o目标文件(使用CCCFLAGS参数)。
  • default:默认执行的目标,依赖所有目标文件,执行时会将所有.o文件链接成最终的可执行文件demo(使用LDFLAGS指定链接选项)。
  • clean:清理目标,用于删除编译生成的可执行文件和目标文件,方便重新编译。

总结

这个 Makefile 的核心作用是:通过交叉编译器,将用户的 LVGL 应用程序(main.c)与 LVGL 库、驱动代码一起编译链接,生成可在 ARM 嵌入式设备上运行的 GUI 程序(demo

使用时,只需在终端执行make即可编译,执行make clean可清理编译产物。如果需要修改 LVGL 路径或编译选项,可通过外部传入变量(如make LVGL_DIR=/path/to/lvgl)覆盖默认配置。

四、相关操作

1、屏幕上显示字

ctrl + P  查找文件

./demo  运行

实现功能:        屏幕上可显示  hello aaaaaaaaaaaaaaaa

2、电容触摸屏GT9147

1、修改设备树

2、修改

insmod  touch.ko

3、触摸屏上显示点击次数

跳转到----

驱动资料包_zhao  里面有详细步骤

3、Gui Guider人机交互界面设计

“GUI” 是 Graphical User Interface(图形用户界面) 的缩写,指通过图形(窗口、按钮、图标等)而非纯文字命令与计算机交互的界面(比如手机 App、电脑桌面都属于 GUI)。

Gui Guider-1.6.1-GA

NXP GUI Guider—— 恩智浦开发的一款嵌入式系统 GUI 开发工具。它基于开源 LVGL 图形库,提供 “拖放式可视化设计” 功能,能帮开发者快速为智能手表、工业设备等嵌入式产品设计人机交互界面,支持 Windows/Linux/macOS 多平台,还能无缝集成到 QNX 实时操作系统中。

1. 新建画布

1. 版本选择

v8.3.5

2. 开发板

simulator模拟器

3. 模板选择

emptyUI空

4. 配置信息

2、图形设计

背景 - 文字 - 图表 - 图片 - 二维码 - 按钮 

1. window寻找字体

        C盘 - Windows - Fonts

2. 选择字体复制到工程目录下

        工程目录下import - font

3. 导入字体

        资源管理 - 字体 - 导入字体​

4. 添加文字时选择字体

3、代码修改

1.导出
2.将文件拷贝到 mylvgl 的同级目录下

3. 将 main.c 代码中相关部分添加到 mylvgl 的 main.c 中

添加头文件和全局变量

4. 修改Makefile至最终版
        添加 .c 和 .h 文件地址
        添加编译许可
http://www.dtcms.com/a/462651.html

相关文章:

  • 长春专业网站推广给我高清电影
  • Redis07-面试题
  • 甘肃省建设社厅网站电商要怎么做起来
  • 做软件常用的网站四川建筑职业技术学院教务网
  • 公司营业执照可以做几个网站微信小程序怎么制作自己的程序
  • 磁悬浮轴承的“眼睛”与“神经”:位移传感原理深度解析
  • Linux小课堂: 从TTY到图形化终端的完整解析
  • 网站带后台免费下载搜图片找原图
  • 网站怎么快速收录wordpress 文件 钩子
  • 互联网科技公司做网站哪家好农场游戏系统开发 网站建设推广
  • PyTorch 模型部署实战:用 Flask 搭图像分类 API
  • 如何进行目的地网站建设东莞厚街创新科技职业学院
  • 网站标题修改重庆网站设计排名
  • 做图表用的网站做网站有什么工具
  • 温州做网站seophp网站开发就业前景
  • 问题记录:一个简单的字符串正则匹配算法引发的 CPU 告警
  • 公共数据资源的“整体授权”是什么涵义?
  • 如何增加网站关键词密度网站建设与维护网课
  • 建立门户网站的程序漳州企业网站建设制作
  • 汕头房产网站建设公司网站界面设计
  • [7-01-02].第05节:环境搭建 - 基础环境
  • BLIP模型
  • 网站建设添加资料搜索引擎优化seo什么意思
  • Playwright与Python:从入门到精通的完整指南
  • maven本地仓库有相应的依赖,依旧会从远程仓库拉取问题的原因及解决
  • 如何修改wordpress站景区旅游网站平台建设方案
  • 网站建设拾金手指下拉十九济南天桥区做网站的
  • 甘肃水利工程建设管理网站东省住房和城乡建设厅网站
  • 10.9 换根dp
  • 上海做网站设计温州专业微网站制作多少钱