【LVGL快速入门(二)】LVGL开源框架入门教程之框架使用(UI界面设计)

目录

零.前置篇章

一.UI设计

二.简单测试

三.正式开发

1.创建工程

2.设计界面

3.运行测试

4.移植代码

5.错误解决方案

四.移植成功


零.前置篇章

本篇前置文章为【LVGL快速入门(一)】LVGL开源框架入门教程之框架移植

一.UI设计

        介绍使用之前,我们要学习一款LVGL官方的UI设计工具SquareLine Studio,使用图形化设计方式设计出我们想要的界面,然后生成对应源文件导入工程使用。

详情参考这篇文章:【学习笔记】SquareLine Studio安装教程(LVGL官方工具)-CSDN博客

         另一种非官方工具Gui Guider(恩智浦开发)也可以进行UI设计:

Gui Guider官方下载地址:GUI Guider | NXP 半导体

 个人比较喜欢恩智浦这个工具,界面看着更简洁,而且免费。

二.简单测试

        在while前添加以下代码来简单测试是否移植成功:

    // 按钮
    lv_obj_t *myBtn = lv_btn_create(lv_scr_act());                               // 创建按钮; 父对象:当前活动屏幕
    lv_obj_set_pos(myBtn, 10, 10);                                               // 设置坐标
    lv_obj_set_size(myBtn, 120, 50);                                             // 设置大小
   
    // 按钮上的文本
    lv_obj_t *label_btn = lv_label_create(myBtn);                                // 创建文本标签,父对象:上面的btn按钮
    lv_obj_align(label_btn, LV_ALIGN_CENTER, 0, 0);                              // 对齐于:父对象
    lv_label_set_text(label_btn, "Test");                                        // 设置标签的文本
 
    // 独立的标签
    lv_obj_t *myLabel = lv_label_create(lv_scr_act());                           // 创建文本标签; 父对象:当前活动屏幕
    lv_label_set_text(myLabel, "Hello world!");                                  // 设置标签的文本
    lv_obj_align(myLabel, LV_ALIGN_CENTER, 0, 0);                                // 对齐于:父对象
    lv_obj_align_to(myBtn, myLabel, LV_ALIGN_OUT_TOP_MID, 0, -20);               // 对齐于:某对象

 可以看到一个Test按钮以及Hello world!

遇到错误或者奇怪的现象可以参考:LCD典型问题及解决方案_hx8399c-CSDN博客 

三.正式开发

        这里笔者使用GUI Guider来做演示。

1.创建工程

        Create a new project来创建新工程:

貌似只适配8.3的 框架,next下一步:

选择设备模拟器为模板: 

选择空工程:

根据自己的屏幕选择尺寸,以及自命名工程和保存路径:

单击Create即可创建成功:

2.设计界面

依次单击以下图标可以呼出组件界面:

先添加一个容器覆盖我们的界面:

组件中选择图片,然后导入几张图片:

修缮一下: 

选择标签,加点文字:

3.运行测试

点击右上角的三角运行无误后,即可开始移植

4.移植代码

将代码导出至指定路径:

打开我们移植好LVGL的STM32的工程以及工程文件夹,在LVGL文件夹中创建一个guider文件夹,将guider生成的源码src文件夹全部放入(删除生成的main.c):

 

工程管理中创建组并添加文件:

魔术棒中添加头文件路径:

打开GUI Guider导出的main.c文件,将main.c中的头文件加入到我们自己工程的头文件中:

//Guider
#include "../generated/gui_guider.h"
#include "../generated/events_init.h"

在main.c主函数上方添加全局变量:

lv_ui guider_ui;

在主函数中调用(LVGL框架初始化之后):

setup_ui(&guider_ui);
events_init(&guider_ui);

编译成功即可。

5.错误解决方案

以下是笔者移植时遇到的错误总结:

1.error:#8:missing closing quote

这个错误主要由编码错误引起,在魔术棒->C/C++->Misc Controls中添加:--locale=english

后即可解决

2.画面倒置

烧入成功后发现画面是旋转的或者倒置的话,可以使用LVGL自带的属性进行修改旋转

打开lv_port_disp.c这个文件,找到void lv_port_disp_init(void)这个函数

lv_disp_drv_register(&disp_drv);前添加堆属性的修改即可

disp_drv.sw_rotate = 1;
disp_drv.rotated = LV_DISP_ROT_90;

这两句是开启旋转并旋转90度,其他宏如:

LV_DISP_ROT_NONELV_DISP_ROT_90LV_DISP_ROT_180,  LV_DISP_ROT_270 

分别可旋转不同的角度

四.移植成功

        哈哈很浪漫的啊!

【RT-Thread作品秀】基于 lvgl 的漏电保护装置校验仪 UI 界面设计作者:赵加文 概述低压漏电引起的各种安全事故已经严重影响到生产生活,威胁到生命财产安全。而解决这一现象的设备就是漏电保护开关,漏电保护开关的漏报率、误报率是很关键的参数,因此有必要对漏电保护开关的性能进行测试。因此,漏电保护装置校验仪是很有必要的。 开发环境硬件:ART-Pi 开发板,正点原子 480*272 4.3寸 RGB 屏幕 RT-Thread版本:4.0.3 开发工具及版本: RT-Thread Studio 2.0.0 :编写 编译 调试 下载代码 STM32CubeMX 6.1.0: codeBlocks 20.03:用于在 PC 机上进行 lvgl 模拟 MCU_Font V2.0: 用于转换中文,然后使得中文能够在 lvgl 中显示 RT-Thread使用情况概述在 UI 设计的整个过程中,使用到 RT-Thread 的部分主要有以下几个方面: 内核部分:动态线程,信号量 组件部分:PIN 设备、I2C 设备、TOUCH 设备框架、LCD 设备框架、finsh 组件 软件包部分:littlevgl2rtt、gt9147 硬件框架软件框架说明系统整体流程图: 软件模块说明整个UI 系统设计所遵循的是 lvgl 图形库的一个回调函数的机制,将各个事件与对应的操作所绑定起来,当滑动滑条时对应的滑条的回调函数就会被触发,那么就会执行滑条回调函数的内容,当滑动点击文本框时,文本框对应的回调函数就会被触发,进而创建键盘的控件,通过键盘输入所需要的数据。 演示效果图片展示: 演示视频: 比赛感悟这次参赛,之前还没有使用过 RT-Thread studio 这个集成开发环境,这次在使用 ART-Pi 的时候全程是使用 RT-Thread studio 这个开发环境,在使用的过程中也碰到了很多问题,有时候明明配置了相关组件,但是保存之后,并没有代码添加到工程里。现在也没有弄明白问题出在哪里,虽然存在着这里问题,但是在使用的过程中,还是非常的方便,整个开发过程就如同搭积木一样方便,与 RTT操作系统贴合的非常的紧密。 除此之外,便是在使用 lvgl 的过程中碰到了很多的问题,现在网上的教程基本是 lvgl v6 版本的教程,关于 lvgl v7 版本的教程很少,而且 v6版本与 V7 版本的 API 相差很大,不能按照 V6 版本来使用 V7 ,在这个过程中摸索了好多,同时也感受到了 lvgl 的魅力,使用在嵌入式系统上是非常不错的选择。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

五羟基己醛

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

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

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

打赏作者

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

抵扣说明:

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

余额充值