首页 > 其他分享 >LVGL 定时器

LVGL 定时器

时间:2022-10-27 09:13:34浏览次数:55  
标签:定时器 void timer label lv lvgl LVGL

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);
    }
    
    

标签:定时器,void,timer,label,lv,lvgl,LVGL
From: https://www.cnblogs.com/jzcn/p/16829390.html

相关文章

  • C51单片机定时器中断(理论与程序源码)
    一、C51中断系统定时器一直是单片机比较难且重要的一部分,刚学51单片机时对定时器中断等部分学的一知半解,过了很长一段时间再回去理解了一遍方才恍然大悟,在此写下自己的拙......
  • LVGL 字体
    一、LVGL内置字体LVGL有几种不同大小的内置字体,可以通过LV_FONT_MONTSERRAT_X定义在lv_conf.h中启用。普通字体包含所有ASCII字符,度数符号(U+00B0),项目符号(U+2......
  • LVGL SCROLL循环滚动
    一、案例测试这里我使用LVGL的版本是8.3.3运行案例lvgl_examples\scroll\lv_example_scroll_6效果如下所示二、现象这里先描述一下现象,当我们使用SCROLL控件实现滚......
  • 定时器
    一、Timer1.1简介java.lang.Objectjava.util.Timer一种工具,线程用其安排以后在后台线程中执行的任务。1.生活中的定时器闹钟定时家电定时炸弹2.开发中定时器使......
  • 定时器和时钟(第五章)
    目录定时器和时钟(第五章)一、知识点总结二、知识点总结1、硬件定时器2、Linux下的时钟函数1)常用结构体2)time()函数获取当前时间3)asctime()asctime_r()将时间和日期以字......
  • LINUX第五章 定时器及时钟服务
    第五章定时器及时钟服务硬件定时器定时器是由时钟源和可编程计数器组成的硬件设备。时钟源通常是一个晶体振荡器,会产生周期性电信号,以精确的频率驱动计数器。使用一个......
  • 内核定时器以及应用
    1.内核定时器的作用当中断触发时,修改定时器时间间隔,进入定时器回调函数,待完成回调则恢复。 2.定时器嵌入其他数据结构   structtimer_listtimer,这个结构......
  • 定时器、外部中断0,以及查询和中断的模板
    这里拿一个0-60秒表做案例://sbit定义四个数码管unsignedcharcount,miao;voidmain(){  TMOD=0X01;  //设置T0为工作方式1  TH0=0XEE;    TL0=0X00......
  • 关于sleep和定时器
    平时使用sleep多一些,如缓冲满了,等一会再送。while(缓冲满了){sleep(MS)};某个任务,20毫秒执行一次, while(TRUE){ 做任务(用了1毫秒),sleep(18,19毫秒)};几乎很少使用定时器;也感觉不出......
  • 《MiniPRO H750开发指南》第六十三章 UCOSII实验3-消息队列、信号量集和软件定时器
    第六十三章UCOSII实验3-消息队列、信号量集和软件定时器​上一章,我们学习了如何使用UCOSII的信号量和邮箱的使用,本章,我们将学习消息队列、信号量集和软件定时器的使用。​......