![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
LVGL
文章平均质量分 72
LVGL官方文档翻译
cntimothy
这个作者很懒,什么都没留下…
展开
-
LVGL官方文档-7.11.0-19-Overview-Tasks
LVGL内置了Task系统。可以通过注册一个函数来周期性执行它。Task是在lv_task_handler()中处理并调用的,而lv_task_handler()需要每隔几毫秒就周期性调用一次。前往Porting了解详情。Task是非抢占式的,这表示一个Task不能打断另一个Task。因此在Task中可以自由调用任何LVGL相关的函数。Create a task通过调用lv_task_create(task_cb, period_ms, LV_TASK_PRIO_OFF/LOWEST/LOW/MID/翻译 2021-07-30 14:49:08 · 1365 阅读 · 0 评论 -
LVGL官方文档-7.11.0-18-Overview-Animations
可以使用Animation可以在起始值和结束值之间自动改变一个变量的值。Animation通过周期性用相应值调用“animator”函数来实现。“animator”函数的原型如下:void func(void * var, lv_anim_var_t value);这个原型和大部分LVGL的set函数一致,如lv_obj_set_x(obj, value)和lv_obj_set_width(obj, value)。Create an animation要创建动画,需要初始化一个lv_anim_t翻译 2021-07-30 10:47:28 · 1001 阅读 · 0 评论 -
LVGL官方文档-7.11.0-17-Overview-File system
LVGL有个“File System”的抽象模块,使得其支持各种类型的文件系统。File System是用一个驱动的字母来标记的。例如,如果SD卡是与字母“S”相关联,那么其上的文件路径就是“S:path/to/file.txt”。Add a driver要添加一个驱动,需要初始化一个lv_fs_drv_t类型的变量:lv_fs_drv_t drv;lv_fs_drv_init(&drv); /*Basic initialization*/drv.翻译 2021-07-29 18:10:53 · 385 阅读 · 0 评论 -
LVGL官方文档-7.11.0-16-Overview-Images
图像可以是一个文件,也可以是一个存储了bitmap数据本身以及其他元数据的变量。Store images可以在两个地方存储图像:内部存储器(RAM或者ROM)中的变量文件Variables存储在变量中的图像主要由有以下字段的lv_img_dsc_t结构体组成:headercf 颜色格式w 以像素为单位的宽度h 以像素为单位的高度总是0的三个比特reserved 保留字段data 指向存储图像数据的数组的指针data_size data字段的长度,单位字节这些通常以翻译 2021-07-29 17:44:34 · 3809 阅读 · 0 评论 -
LVGL官方文档-7.11.0-15-Overview-Fonts
在LVGL中,字体是位图和为了渲染字母的图像所需的其他信息的集合。字体存储在lv_font_t类型的变量中,可以设置于Style的text_font字段,例如:lv_style_set_text_font(&my_style, LV_STATE_DEFAULT, &lv_font_montserrat_28); /*Set a larger font*/字体有个bpp(bits per pixel)属性,它的意思是用多少位来描述字体中的一个像素。像素的值决定了像素的不透明度。这样的话翻译 2021-07-27 17:59:08 · 975 阅读 · 0 评论 -
LVGL官方文档-7.11.0-14-Overview-Displays
Multiple display support在LVGL中,可以存在多个Display,每个都有他们各自的Driver和Object。唯一的限制是这些Display的颜色深度要一样(由LV_COLOR_DEPTH定义)。如果Display的颜色深度不一致,图像可以在驱动的flush_cb中转换成正确的格式。可以轻松创建多个Display:只需要为每个Display初始化各自的Display Buffer并注册各自的Driver。当创建UI的时候,调用lv_disp_set_default(disp)来翻译 2021-07-27 11:39:54 · 2251 阅读 · 0 评论 -
LVGL官方文档-7.11.0-13-Overview-Input devices
Input Device通常意味着:指针类设备,如触摸板或者鼠标。按键板,如普通的键盘或者简单的按键板。能左转、右转、按下的编码器。能映射到屏幕指定区域的外置硬件按键。Pointers指针类设备可以有光标(如鼠标)。...lv_indev_t * mouse_indev = lv_indev_drv_register(&indev_drv);LV_IMG_DECLARE(mouse_cursor_icon); /*Declar翻译 2021-07-26 15:23:33 · 611 阅读 · 0 评论 -
LVGL官方文档-7.11.0-12-Overview-Styles
Style用于给Object设置外观。LVGL中的Style由CSS启发,其设计理念大致如下:Style是一个lv_style_t类型的变量,其中保存属性,如边框宽度,文字颜色等。类似于CSS中的class。使用的时候不需要指定全部属性,未指定的属性为默认值。Style可以赋值给Object来改变其外观。同一个Style可以由多个Object共用。Style可以是级联的。这意味着可以将多个Style赋值给同一个Object。例如style_btn用于显示一个灰色的按钮,style_btn_red翻译 2021-07-23 17:27:41 · 2488 阅读 · 2 评论 -
LVGL官方文档-7.11.0-11-Overview-Events
当有用户可能感兴趣的事情发生的时候,会在LVGL中触发Event。例如一个Object被点击、被拖动、改变其值的时候。用户可以给一个Object设置一个回调函数来查看事件。一个实际的回调函数如下:lv_obj_t * btn = lv_btn_create(lv_scr_act(), NULL);lv_obj_set_event_cb(btn, my_event_cb); /*Assign an event callback*/...static void my_event_cb(lv_o翻译 2021-07-20 16:23:47 · 759 阅读 · 0 评论 -
LVGL官方文档-7.11.0-10-Overview-Layer
Order of creation默认情况下,老Object绘制在背景,新Object绘制在前景。举例来说,我们创建一个名为button1的按钮,然后创建一个名为button2的按钮。那么button1及其子Object都会在背景中,并被button2及其子Object覆盖。/*Create a screen*/lv_obj_t * scr = lv_obj_create(NULL, NULL);lv_scr_load(scr); /*Load the screen*//*翻译 2021-07-20 14:02:36 · 460 阅读 · 0 评论 -
LVGL官方文档-7.11.0-9-Overview-Objects
在LVGL中,用户界面的基本组成元素是objects,也称为widegts,如Button, Label,Image,List,Chart和Text area。AttributesBasic attributes所有的Object都拥有一些基本属性:PositionSizeParentDrag enableClick enable等等可以通过lv_obj_set_…和lv_obj_get_…来设置或者获取这些属性:/*Set basic object attributes*/lv_翻译 2021-07-19 17:39:04 · 1244 阅读 · 0 评论 -
LVGL官方文档-7.11.0-8-Porting-Logging
LVGL有内置的日志模块来告诉用户LVGL库内部发生了什么。Log level将lv_conf.h中的LV_USE_LOG宏设置为1以打开日志,然后,将LV_LOG_LEVEL设置成下列值之一:LV_LOG_LEVEL_TRACE 打印大量日志,给出详细信息LV_LOG_LEVEL_INFO 打印重要的事件LV_LOG_LEVEL_WARN 发生了不该发生的时间,但是并没有引起崩溃LV_LOG_LEVEL_ERROR 只打印关键信息,系统可能会崩溃LV_LOG_LEVEL_NONE 什么也不翻译 2021-07-17 16:32:45 · 343 阅读 · 0 评论 -
LVGL官方文档-7.11.0-6-Porting-Tick interface, Task handler and Sleep management
Tick interface为了处理动画和其他的task,LVGL需要系统时钟,来获取过去了多少时间。你需要周期性调用lv_tick_inc(tick_period)来通知LVGL时间间隔。例如lv_tick_inc(1)表示每个毫秒调用一次。lv_tick_inc需要在比lv_task_handler()更高优先级的地方调用(例如中断),以更加精确的指导过去了多少毫秒,及时lv_task_handler的执行要花费更多的时间。在FreeRTOS中,lv_tick_inc可以在vApplicatio翻译 2021-07-17 11:47:45 · 1081 阅读 · 0 评论 -
LVGL官方文档-7.11.0-5-Porting-Input device interface
Types of input devices配置输入设备的时候,需要初始化一个lv_indev_drv_t类型的变量:lv_indev_drv_t indev_drv;lv_indev_drv_init(&indev_drv); /*Basic initialization*/indev_drv.type =... /*See below.*/indev_drv.read_cb =... /*See below.*//*翻译 2021-07-16 18:11:02 · 654 阅读 · 0 评论 -
LVGL官方文档-7.11.0-4-Porting-Display interface
为了配置一个display,一个lv_disp_buf_t类型的变量和一个lv_disp_drv_t类型的变量必须要初始化。lv_disp_buf_t 包含内部的图像bufferlv_disp_drv_t 包含与display交互的回调函数,并进行绘图相关的操作Display bufferlv_disp_buf_t可以像这样初始化:/*A static or global variable to store the buffers*/static lv_disp_buf_t disp_buf翻译 2021-07-16 11:58:45 · 1866 阅读 · 0 评论 -
LVGL官方文档-7.11.0-3-Porting-Set-up a project
Get the libraryLVGL图形库可从GitHub获取:https://github.com/lvgl/lvgl。可以从GitHub克隆或者下载最新版本的库。图形库是lvgl目录,这个目录需要复制到你的工程。Configuration fileLVGL有个配置的头文件,名称是lv_conf.h。这个头文件设置了库的基本行为,关闭不需要的模块,调整编译时的内存buffer等。复制lvgl目录下的lv_conf_template.h并重命名为lv_conf.h。打开文件,将文件开头的宏定义翻译 2021-07-14 17:56:47 · 419 阅读 · 0 评论 -
LVGL官方文档-7.11.0-2-Porting-System overview
System overviewApplication 创建GUI,处理任务的应用LVGL 图形库。应用可以与图形库进行交互,以创建GUI。其包含一个HAL接口来注册显示和输入设备驱动Driver 出了包含一般的驱动,还包括驱动显示(可能包含GPU),读触摸板和按键的函数的功能。MCU有两种硬件配置。一种是包含内置的LCD/TFT驱动,另一种是没有这个。在两种情况下,都需要frame buffer来存储屏幕的当前显示图像。包含TFT/LCD驱动的MCU。在这种情况下,你就可以直接通过RGB接口来翻译 2021-07-14 17:31:52 · 208 阅读 · 0 评论 -
LVGL官方文档-7.11.0-1-Get started-Quick overview
在这里,你将学习到关于LVGL最重要的东西。你应该首先阅读这部分,以得到一个总体的影响,然后再阅读详细的Porting和Overview部分。使用模拟器强烈建议从使用模拟器入手,而不是直接移植LVGL到嵌入式设备。LVGL支持众多IDE,你可以从中选择你喜欢的。你可以前往模拟器那一章节,使用已经编写好的工程运行在PC上,这样你就可以暂时跳过移植这一步,直接体验LVGL。将LVGL添加到项目请按以下步骤,在拥有显示和触摸功能的嵌入式系统中设置LVGL。从github中下载或者克隆LVGL:git翻译 2021-07-14 16:22:35 · 1018 阅读 · 0 评论 -
LVGL官方文档-7.11.0-7-Porting-Operating system and interrupts
默认情况下,LVGL不是线程安全的。但是,在下列情况下,调用LVGL相关函数是安全的。在events中。在lv_tasks中。Tasks and threads如果你需要使用正常的tasks或者是线程,你需要一个mutex,在lv_task_handler之前调用,在其之后释放。同样,在其他tasks或者threads里面,也要用同样的mutex包裹住每个LVGL相关的调用。这样,就能在真正的多任务环境中使用LVGL。要确保避免并行调用LVGL函数。Interrupt尽量避免在中断中调用L翻译 2021-07-17 16:10:40 · 1209 阅读 · 2 评论