LVGL 8.0 以后好像取消了自定义任务模块,想要使用多线程只能使用系统的线程。

一、定时器结构体

typedef struct _lv_timer_t {
uint32_t period; // 定时器运行的频率
uint32_t last_run; // 定时器上次运行的时间
lv_timer_cb_t timer_cb; // 定时器注册的回调函数
void * user_data; // 用户自定义数据
int32_t repeat_count; // 重复次数,-1为永久重复,0为关闭,大于0为重复次数。
uint32_t paused : 1; // 定时器运行状态
} lv_timer_t;

二、常用函数

/* 创建定时器 */
lv_timer_t * lv_timer_create(lv_timer_cb_t timer_xcb, uint32_t period, void * user_data); /* 删除定时器 */
void lv_timer_del(lv_timer_t * timer); /* 使定时器挂起 */
void lv_timer_pause(lv_timer_t * timer); /* 使定时器进入运行状态 */
void lv_timer_resume(lv_timer_t * timer); /* 设置定时器的回调函数 */
void lv_timer_set_cb(lv_timer_t * timer, lv_timer_cb_t timer_cb); /* 设置定时器的运行频率 */
void lv_timer_set_period(lv_timer_t * timer, uint32_t period); /* 这里应该是读取定时器上次运行的时间 */
void lv_timer_ready(lv_timer_t * timer); /* 设置定时器运行的次数 */
void lv_timer_set_repeat_count(lv_timer_t * timer, int32_t repeat_count); /* 重置定时器运行的频率 */
void lv_timer_reset(lv_timer_t * timer); /* 启用或禁用整个定时器处理 */
void lv_timer_enable(bool en); /* 获取定时器空闲百分比 */
uint8_t lv_timer_get_idle(void); /* 遍历定时器 */
lv_timer_t * lv_timer_get_next(lv_timer_t * timer);

注意: 这里定时器使用的滴答时钟是移植时运行lv_tick_inc()的时间,比如我10ms运行一次lv_tick_inc(),那么lvgl的周期设置为100时,对应的是 100*10ms = 1s。

三、使用案例

  1. 案例一

    重复运行定时器

    lv_timer_t * lvgl_task1 = NULL;
    
    void lvgl_task1_cb(lv_timer_t * tmr)
    {
    LV_LOG_USER("timer test ......");
    } void lvgl_gui_test(void)
    {
    lv_obj_t *test_label = lv_label_create(lv_scr_act());
    lv_label_set_text(test_label, LV_SYMBOL_OK); // 正常显示,则应显示一个 ✓ 字符。
    lv_obj_align(test_label, LV_ALIGN_CENTER, 0, 0); lvgl_task1 = lv_timer_create(lvgl_task1_cb, 1000, 0); // 运行周期为lvgl的1000个滴答时钟
    }
  2. 案例二

    运行指定次数的定时器

    lv_timer_t * lvgl_task1 = NULL;
    
    void lvgl_task1_cb(lv_timer_t * tmr)
    {
    LV_LOG_USER("timer test ......");
    } void lvgl_gui_test(void)
    {
    lv_obj_t *test_label = lv_label_create(lv_scr_act());
    lv_label_set_text(test_label, LV_SYMBOL_OK); // 正常显示,则应显示一个 ✓ 字符。
    lv_obj_align(test_label, LV_ALIGN_CENTER, 0, 0); lvgl_task1 = lv_timer_create(lvgl_task1_cb, 1000, 0); // 运行周期为lvgl的1000个滴答时钟
    lv_timer_set_repeat_count(lvgl_task1, 5);
    }

LVGL 定时器的更多相关文章

  1. FreeRTOS+LVGL|Freertos+lvgl如何配置lvgl的心跳和任务管理器

    目录 配置lvgl心跳(Tick) 配置lvgl任务管理器(Task Handler) LVGL中文手册 lvgl需要系统滴答声(心跳)才能知道动画和其他任务的经过时间,所以我们必须要配置好lvgl的 ...

  2. LVGL库入门教程01-移植到STM32(触摸屏)

    LVGL库移植STM32 LVGL库简介 LVGL(Light and Versatile Graphics Library)是一个免费.开源的嵌入式图形库,可以创建丰富.美观的界面,具有许多可以自定 ...

  3. AIR32F103(十) 在无系统环境和FreeRTOS环境集成LVGL

    目录 AIR32F103(一) 合宙AIR32F103CBT6开发板上手报告 AIR32F103(二) Linux环境和LibOpenCM3项目模板 AIR32F103(三) Linux环境基于标准外 ...

  4. Objective-C三种定时器CADisplayLink / NSTimer / GCD的使用

    OC中的三种定时器:CADisplayLink.NSTimer.GCD 我们先来看看CADiskplayLink, 点进头文件里面看看, 用注释来说明下 @interface CADisplayLin ...

  5. 微信小程序中利用时间选择器和js无计算实现定时器(将字符串或秒数转换成倒计时)

    转载注明出处 改成了一个单独的js文件,并修改代码增加了通用性,点击这里查看 今天写小程序,有一个需求就是用户选择时间,然后我这边就要开始倒计时. 因为小程序的限制,所以直接选用时间选择器作为选择定时 ...

  6. [Java定时器]用Spring Task实现一个简单的定时器.

    今天做一个项目的的时候需要用到定时器功能.具体需求是: 每个月一号触发一次某个类中的方法去拉取别人的接口获取上一个月份车险过期的用户.如若转载请附上原文链接:http://www.cnblogs.co ...

  7. Node+fs+定时器(node-schedule)+MySql

    目标:将本人写博客时候的截图保存到桌面的图片 执行保存到指定文件进行整理 并写入数据库 先看最终的目录结构: package.json文件: { "name": "zqz ...

  8. 深入理解定时器系列第一篇——理解setTimeout和setInterval

    × 目录 [1]setTimeout [2]setInterval [3]运行机制[4]作用[5]应用 前面的话 很长时间以来,定时器一直是javascript动画的核心技术.但是,关于定时器,人们通 ...

  9. 前端开发:setTimeout与setInterval 定时器与异步循环数组

    前端开发:setTimeout与setInterval 定时器与异步循环数组 前言: 开通博客园三个月以来,随笔记录了工作中遇到的大大小小的难题,也看过无数篇令人启发的文章,我觉得这样的环境是极好的, ...

  10. 转载---javascript 定时器总结

    转载:http://www.jb51.net/article/40193.htm JS里设定延时: 使用SetInterval和设定延时函数setTimeout 很类似.setTimeout 运用在延 ...

随机推荐

  1. zynq之TF卡写入常见问题

    zynq之TF卡写入常见问题 1.基本原理 前面做过zynq的TF读写实验,使用串口返回了实验所需的现象.那个时候也没有深究头文件"ff.h"里的几个常用的函数.这次需要使用TF卡 ...

  2. java使用ftp连接linux处理文件

    1.Maven依赖 <!-- FTP使用包 --> <dependency> <groupId>commons-net</groupId> <ar ...

  3. KingbaseES V8R6集群运维案例之---同一主机节点部署多个集群

    案例说明: 在同一主机环境,由于生产需要,需要部署两个集群:本案例详细描述了两个集群的部署过程. 注意:同一主机部署多个集群需要先部署securecmdd服务,节点之间通过securecmdd服务通讯 ...

  4. KingbaseES数据库配置Hikari数据源

    Hikari是一个高性能的数据库连接池,它是Spring Boot 2.x中的默认数据源. 一.下载驱动 打开下面网址:选择对应平台的jdbc驱动程序. 人大金仓-成为世界卓越的数据库产品与服务提供商 ...

  5. Python爬虫爬取京东某商品评论信息存入mysql数据库

    1 """ 2 https://club.jd.com/comment/productPageComments.action?callback=fetchJSON_com ...

  6. #对顶堆#nssl 1477 赛

    分析 首先按小到大排序,考虑枚举两个都喜欢的个数\(i\) 那么只喜欢一个的个数各需要\(k-i\),剩下要补充到\(m-k*2+i\)个, 考虑用对顶堆维护大根堆大小仅有\(m-k*2+i\)即可 ...

  7. #并查集,线性筛#nssl 1470 X

    分析 显然答案就是\(2^{连通块个数}-2\), 将每个数的质数所在的集合合并, 最后判断连通块个数即可(线性筛少了个等号改了半天QWQ) 代码 #include <cstdio> #i ...

  8. AtCoder Beginner Contest 181

    ABC181 A - Heavy Rotation 题目传送门 代码(签到题) #include <cstdio> #define rr register using namespace ...

  9. 解析 Go 编程语言数据类型:bool、整数、浮点数和字符串详细介绍

    数据类型 数据类型是编程中的重要概念.数据类型指定了变量值的大小和类型.Go是静态类型的,这意味着一旦变量类型被定义,它只能存储该类型的数据. 基本数据类型 Go 有三种基本数据类型: bool:表示 ...

  10. 【C#上位机】西门子1200PLC实用定位控制程序案例

    1. 引言 新阁教育这篇文章是一篇综合性非常强的文章,从PLC输入输出及步进电机接线开始,到PLC运动控制程序编写,再到后续的ModbusTCP通信协议及上位机编程实现最终控制,涉及知识面比较广,能够 ...