LVGL学习之路——模拟器的搭建,使用button做出第一个ui界面

LVGL模拟器搭建

我用的是vs搭建的模拟器,实际上很简单,去下载最新的vs然后我是选择了vs
接下来,下载安装。再下载官方的模拟器。就可以进行仿真了

熟悉模拟器的结构

拿到模拟器第一反应就是F5运行一下。
lvgl
然后就可以打开main文件去查看一下主函数结构。

static void hal_init(void);
static int tick_thread(void *data);
static lv_indev_t * kb_indev;
int main(int argc, char** argv)
{
	lv_init();       		// 初始化lvgl
	hal_init();				// 这里单片机就是硬件初始化,模拟器中是模拟器初始化(修改配置)
	lv_demo_widgets();		// 这个函数就是演示的demo(修改示例)
	while (1) 
	{
		lv_task_handler();	// lvgl的任务处理,主要处理事件响应
		Sleep(10); 			// 休眠10ms
	}
}

经过分析实际我们只需要修改配置和demo就行了,经过对hal_init()的分析发现在lv_conf.h里有个宏定义

/* Maximal horizontal and vertical resolution to support by the library.*/
#define LV_HOR_RES_MAX          (800)
#define LV_VER_RES_MAX          (480)

/* Color depth:
 * - 1:  1 byte per pixel
 * - 8:  RGB332
 * - 16: RGB565
 * - 32: ARGB8888
 */
#define LV_COLOR_DEPTH     32

这里有长宽和色深,我们可以修改它,当然还有很多配置,可以自己选择修改。

编写自己的demo

通过寻找我们找到了lv_demo_widgets();所在的地方: .\src\lv_demo_benchmark\lv_demo_benchmark.c
于是我就自己在src里建立了一个lv_test的文件夹在文件夹内建立了一个.h和.c,然后打开https://docs.lvgl.io/v7/en/html/widgets/btn.html?highlight=button,研究一下button控件,开始自己编写button啦

#include "../../lv_examples.h"
#include "test.h"
#include <Windows.h>

void lv_ex_btn(void)
{
    lv_obj_t* btn1 = lv_btn_create(lv_scr_act(), NULL);
}

主函数把之前例子函数换成lv_ex_btn(),F5就出来啦
按钮
不过这样感觉太简单了加入

lv_obj_t* label = lv_label_create(btn1, NULL);
lv_label_set_text(label, "Button");

通过创建lable并放到button上,就可以显示Button这个名字啦
标签

可以通过

lv_obj_align(btn1, NULL, LV_ALIGN_CENTER, 0, 0);

就可以把它放到中央了,这时我们的按钮就很漂亮了,可以发现因为之前标签放到button上所以移动的时候是二者一起移动的
但是我们点击它什么反应都没有。那是因为我们没有绑定相关的“动作函数”在c语言里叫回调函数。

static void event_handler(lv_obj_t* obj, lv_event_t event) 	// 设置动作函数
{
    if (event == LV_EVENT_CLICKED) { // 按下的时候会产生点击事件通过判断可以做出相应响应
        printf("Clicked\n");
    }
}

在lv_ex_btn()中加入绑定

lv_obj_set_event_cb(btn1, event_handler);

就可以实现效果啦
回调
再举一反三,就完成了第一个简单的ui了

#include "../../lv_examples.h"
#include "test.h"
#include <Windows.h>

static void event_handler(lv_obj_t* obj, lv_event_t event)
{
    if (event == LV_EVENT_CLICKED) {
        printf("Clicked\n");
    }
    else if (event == LV_EVENT_VALUE_CHANGED) {
        printf("Toggled\n");
    }
}

void lv_ex_btn(void)
{

    lv_obj_t* btn1 = lv_btn_create(lv_scr_act(), NULL);
    lv_obj_set_event_cb(btn1, event_handler);
    

    lv_obj_t* label = lv_label_create(btn1, NULL);
    lv_label_set_text(label, "Button");
    lv_obj_align(btn1, NULL, LV_ALIGN_CENTER, 0, -40);

    lv_obj_t* btn2 = lv_btn_create(lv_scr_act(), NULL);
    lv_obj_set_event_cb(btn2, event_handler);
    lv_obj_align(btn2, NULL, LV_ALIGN_CENTER, 0, 40);
    lv_btn_set_checkable(btn2, true);
    lv_btn_toggle(btn2);
    lv_btn_set_fit2(btn2, LV_FIT_NONE, LV_FIT_TIGHT);

    label = lv_label_create(btn2, NULL);
    lv_label_set_text(label, "Toggled");
}

运行效果:
图片

【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 的魅力,使用嵌入式系统上是非常不错的选择。
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值