LVGL学习系列
第一章 基于VS2019 的VS仿真
基于VS2019 的VS仿真(一)
提示:本文LVGL版本为LVGL8系列。
一、LVGL简介
LVGL(轻量级和通用图形库)是一个免费和开源的图形库,它提供了创建嵌入式GUI所需的一切,具有易于使用的图形元素,美丽的视觉效果和低内存占用。
Key features (主要特性)
强大的构建块,如按钮,图表,列表,滑块,图像等。
高级图形动画,抗锯齿,不透明度,平滑滚动
各种输入设备,如触摸板、鼠标、键盘、编码器等
多语言支持与UTF-8编码
多显示器支持,即使用更多的TFT,单色显示器同时
完全可定制的图形元素与css类样式
硬件独立与任何微控制器或显示器使用
可扩展,使用少量内存(64kb Flash, 16kb RAM)
支持操作系统、外部内存和GPU,但不是必需的
单帧缓冲操作,甚至与高级图形效果
用C编写的最大兼容性(c++兼容)
模拟器在没有嵌入式硬件的PC上开始嵌入式GUI设计
绑定到MicroPython
教程,例子,快速GUI设计的主题
文档可以在线和PDF格式获取
Requirements(配置要求)
基本上,每个现代控制器(能够驱动显示器)都适合运行 LVGL。最低要求是:
16、32 或 64 位微控制器或处理器
建议使用 16 MHz 时钟速度
闪存/ROM: > 64 kB 用于非常重要的组件 (> 建议使用 180 kB)
RAM:
静态 RAM 使用量:~2 kB,取决于使用的功能和对象类型
堆: > 2kB (> 建议使用 8 kB)
动态数据(堆): > 2 KB (> 如果使用多个对象,建议使用 16 kB). 在 lv_conf.h 文件中配置 LV_MEM_SIZE 生效。
显示缓冲区:> “水平分辨率”像素(推荐> 10 × 10ד水平分辨率”)
MCU 或外部显示控制器中的一个帧缓冲器
C99 或更新的编译器
具备基本的 C(或 C++)知识: pointers, structs, callbacks
请注意,内存使用量可能因架构、编译器和构建选项而异。
二、环境配置
1.使用git下载仿真代码
此命令将在一个步骤中克隆 lv_sim_visual_studio 存储库和所有子模块。
代码如下(示例):
git clone --recurse-submodules https://github.com/lvgl/lv_sim_visual_studio.git
克隆主存储库使用如下命令:
git clone https://github.com/lvgl/lv_sim_visual_studio.git
克隆主存储库后,使用下面命令克隆子模块:
cd lv_sim_visual_studio
git submodule update --init --recursive
更新保持最新版本,使用下面的命令:
git pull
git submodule update --init --recursive
2.运行测试代码
代码如下(示例):
// ----------------------------------
// Demos from lv_examples
// ----------------------------------
lv_demo_widgets(); // 运行的演示demo
// lv_demo_benchmark();
// lv_demo_keypad_encoder(); // ok
// lv_demo_music(); // removed from repository
// lv_demo_printer(); // removed from repository
// lv_demo_stress(); // ok
演示demo效果
还可以在主函数中设置显示的像素
if (!lv_win32_init(
GetModuleHandleW(NULL),
SW_SHOW,
320, //定义显示区域的宽度
240, //定义显示区域的高度
LoadIconW(GetModuleHandleW(NULL), MAKEINTRESOURCE(IDI_LVGL))))
{
return -1;
}
3.定义自己的LVGL
只是运行演示Demo是,没有任何意义的,需要开发自己的界面才是真正的玩转LVGL,加入自己的LVGL可以参在下面的步骤:
(1)在主界面加入mylvgl.h文件,在其中加入如下代码:
#ifndef MYLVGL_H
#define MYLVGL_H
#ifdef __cplusplus
extern "C" {
#endif
/*********************
* INCLUDES
*********************/
/*********************
* DEFINES
*********************/
/**********************
* TYPEDEFS
**********************/
/**********************
* GLOBAL PROTOTYPES
**********************/
void lv_mylvgl_demo(void); //自定义demo的主函数
/**********************
* MACROS
**********************/
#ifdef __cplusplus
} /* extern "C" */
#endif
#endif /*LV_DEMO_STRESS_H*/#pragma once
(2)在主界面加入mylvgl.cpp文件,在其中加入如下代码:
/*********************
* INCLUDES
*********************/
#include "../LVGL.Simulator/lv_demos/src/lv_demo.h" //lv_demo头文件,根据自己工程中的文件位置修改
#if MY_LVGL
void lv_mylvgl_demo(void)
{
自定义显示内容
}
#endif /* LV_USE_DEMO_STRESS */
(3)在lv_demo_conf.h中加入宏定义:
#define MY_LVGL 1
(4)在lv_dem.h中加入自定义demo的头文件:
#include "../mylvgl.h" //添加的LVGL头文件
4.定义LVGL Demo演示
设置320*240像素的显示区域,并设置背景为红色。
在主界面加入mylvgl.cpp文件,在其中加入如下代码:
void lv_mylvgl_demo(void)
{
static lv_style_t style;
lv_style_init(&style);
lv_style_set_bg_color(&style, lv_palette_lighten(LV_PALETTE_RED, 1));
lv_obj_t* obj = lv_obj_create(lv_scr_act()); //创建显示屏幕
lv_obj_add_style(obj, &style, 0);
lv_obj_center(obj);
lv_obj_set_x(obj, 0);//设置X轴起点
lv_obj_set_y(obj, 0);//设置Y轴起点
lv_obj_set_size(obj, 320, 240);//设置覆盖大小
}
显示效果