通过这两天对LVGL8的部分控件和样式的学习,自己制作了一个简易时钟,可显示时间,日期,星期,用到的主要有样式,布局等对象,还是通过codeblock来模拟代码的运行,代码如下:

typedef struct _lv_clock
{lv_obj_t *time_label; // 时间标签lv_obj_t *date_label; // 日期标签lv_obj_t *weekday_label; // 星期标签
}lv_clock_t;static void clock_date_task_callback(lv_timer_t *timer)
{static const char *week_day[7] = { "Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday" };static time_t unix_time;static struct tm *time_info;unix_time = time(NULL);time_info = localtime(&unix_time);int year = time_info->tm_year+1900;int month = time_info->tm_mon + 1;int day = time_info->tm_mday;int weekday = time_info->tm_wday;int hour = time_info->tm_hour;int minutes = time_info->tm_min;int second = time_info->tm_sec;if (timer != NULL && timer->user_data != NULL){lv_clock_t * clock = (lv_clock_t *)(timer->user_data);if (clock->time_label != NULL){lv_label_set_text_fmt(clock->time_label, "%02d:%02d:%02d", hour, minutes, second);lv_obj_align_to(clock->time_label, lv_obj_get_parent(clock->time_label), LV_ALIGN_CENTER, 0, 0);}if (clock->date_label != NULL){lv_label_set_text_fmt(clock->date_label, "%d-%02d-%02d", year, month, day);lv_obj_align_to(clock->date_label, lv_obj_get_parent(clock->date_label), LV_ALIGN_TOP_MID, 2, 0);}if (clock->weekday_label != NULL){lv_label_set_text_fmt(clock->weekday_label, "%s", week_day[weekday]);lv_obj_align_to(clock->weekday_label, lv_obj_get_parent(clock->weekday_label), LV_ALIGN_BOTTOM_MID, -2, 0);}}
}void lvgl_clock_start()
{static lv_style_t date_time_clock_style; // 最外层对象的样式lv_style_reset(&date_time_clock_style); // 重置样式lv_style_init(&date_time_clock_style); // 初始化样式  lv_style_set_radius(&date_time_clock_style, 5); // 设置样式圆角lv_style_set_bg_opa(&date_time_clock_style, LV_OPA_20); // 设置样式背景透明度lv_style_set_border_width(&date_time_clock_style, 0); // 设置样式边框宽度lv_style_set_bg_color(&date_time_clock_style, lv_color_white()); // 设置样式背景颜色,白色lv_style_set_pad_left(&date_time_clock_style, 1); // 设置样式左边padding填充宽度lv_style_set_pad_right(&date_time_clock_style, 1); // 设置样式右边padding填充宽度lv_style_set_pad_top(&date_time_clock_style, 0); // 设置样式顶部padding填充宽度lv_style_set_pad_bottom(&date_time_clock_style, 0); // 设置样式底部padding填充宽度static lv_style_t time_style; // 时间对象样式lv_style_reset(&time_style);lv_style_init(&time_style);lv_style_set_bg_opa(&time_style, LV_OPA_COVER);lv_style_set_border_width(&time_style, 0);lv_style_set_radius(&time_style, 5);lv_style_set_bg_color(&time_style, lv_palette_main(LV_PALETTE_BLUE));lv_style_set_pad_left(&time_style, 0);lv_style_set_pad_right(&time_style, 0);lv_style_set_pad_top(&time_style, 0);lv_style_set_pad_bottom(&time_style, 0);static lv_style_t date_style; // 日期对象样式lv_style_reset(&date_style);lv_style_init(&date_style);lv_style_set_bg_opa(&date_style, LV_OPA_COVER);lv_style_set_border_width(&date_style, 0);lv_style_set_radius(&date_style, 5);lv_style_set_bg_color(&date_style, lv_palette_main(LV_PALETTE_BLUE));lv_style_set_pad_left(&date_style, 0);lv_style_set_pad_right(&date_style, 0);/* Time font */static lv_style_t time_label_style; // 时间标签样式lv_style_reset(&time_label_style); // 重置样式lv_style_init(&time_label_style); // 初始化样式lv_style_set_text_color(&time_label_style , lv_color_white()); // 设置标签样式文本颜色lv_style_set_text_font(&time_label_style, &lv_font_montserrat_32); // 设置字体风格lv_style_set_text_opa(&time_label_style, LV_OPA_COVER); // 设置字体透明度lv_style_set_bg_opa(&time_label_style, LV_OPA_0); // 设置样式背景透明度/* Date font */static lv_style_t date_label_style; // 日期标签样式lv_style_reset(&date_label_style);lv_style_init(&date_label_style);lv_style_set_text_opa(&date_label_style, LV_OPA_COVER);lv_style_set_bg_opa(&date_label_style, LV_OPA_0);lv_style_set_text_color(&date_label_style , lv_color_white());lv_style_set_text_font(&date_label_style, &lv_font_montserrat_16);/* Week font */static lv_style_t week_lable_style; // 日期标签样式lv_style_reset(&week_lable_style);lv_style_init(&week_lable_style);lv_style_set_text_opa(&week_lable_style, LV_OPA_COVER);lv_style_set_bg_opa(&week_lable_style, LV_OPA_0);lv_style_set_text_color(&week_lable_style, lv_color_white());lv_style_set_text_font(&week_lable_style, &lv_font_montserrat_16);/* Time & Date */lv_obj_t *time_date_obj = lv_obj_create(lv_scr_act()); // 基于屏幕创建时间日期对象if (time_date_obj == NULL){printf("[%s:%d] time_date_obj create failed\n", __FUNCTION__, __LINE__);return;}lv_obj_set_size(time_date_obj, 320, 100); // 设置对象大小lv_obj_center(time_date_obj); // 对象居屏幕中间显示lv_obj_add_style(time_date_obj, &date_time_clock_style, LV_STATE_DEFAULT); //给time_date_obj对象添加样式/*Time display*/lv_obj_t *time_obj = lv_obj_create(time_date_obj); // 基于time_date_obj对象创建时间对象if (time_obj == NULL){printf("[%s:%d] time_obj create failed\n", __FUNCTION__, __LINE__);return;}lv_obj_set_size(time_obj, 158, 100); // 设置对象大小lv_obj_align_to(time_obj, time_date_obj, LV_ALIGN_LEFT_MID, 0, 0); // 设置time_obj对象基于time_date_obj对象左边中间对齐lv_obj_add_style(time_obj, &time_style, LV_STATE_DEFAULT);  // 给time_obj对象添加样式static lv_clock_t lv_clock = { 0 };lv_clock.time_label = lv_label_create(time_obj); // 基于time_obj对象创建时间显示标签对象 lv_clock.time_labelif (lv_clock.time_label == NULL){printf("[%s:%d] time_label create failed\n", __FUNCTION__, __LINE__);return ;}lv_obj_add_style(lv_clock.time_label, &time_label_style, LV_STATE_DEFAULT); // 给对象 lv_clock.time_label添加样式/*Date display*/lv_obj_t *date_obj = lv_obj_create(time_date_obj); // 基于time_date_obj对象创建date_obj对象if (date_obj == NULL){printf("[%s:%d] date_obj create failed\n", __FUNCTION__, __LINE__);return ;}lv_obj_set_size(date_obj, 158, 100); // 设置对象大小lv_obj_align_to(date_obj, time_date_obj, LV_ALIGN_RIGHT_MID, 0, 0); //设置date_obj对象基于time_date_obj对象右边中部对齐lv_obj_add_style(date_obj, &date_style, LV_STATE_DEFAULT); // 给date_obj对象添加样式lv_clock.date_label = lv_label_create(date_obj); // 基于date_obj对象创建lv_clock.date_label日期显示对象if (lv_clock.date_label == NULL){printf("[%s:%d] date_label create failed\n", __FUNCTION__, __LINE__);return ;}lv_obj_add_style(lv_clock.date_label, &date_label_style, LV_STATE_DEFAULT); // 给lv_clock.date_label对象添加样式/*Week display*/lv_clock.weekday_label = lv_label_create(date_obj); // 基于date_obj对象创建星期显示lv_clock.weekday_label对象if (lv_clock.weekday_label == NULL){printf("[%s:%d] weekday_label create failed\n", __FUNCTION__, __LINE__);return;}lv_obj_add_style(lv_clock.weekday_label, &week_lable_style, LV_STATE_DEFAULT); // 给对象lv_clock.weekday_label添加样式// 设置时间标签lv_clock.time_label对象基于父对象居中对齐lv_obj_align_to(lv_clock.time_label, lv_obj_get_parent(lv_clock.time_label), LV_ALIGN_CENTER, 0, 0);// 设置时间标签lv_clock.date_label对象基于父对象顶部中间对齐lv_obj_align_to(lv_clock.date_label, lv_obj_get_parent(lv_clock.date_label), LV_ALIGN_TOP_MID, 2, 0);// 设置时间标签lv_clock.weekday_label对象基于父对象底部中间对齐lv_obj_align_to(lv_clock.weekday_label, lv_obj_get_parent(lv_clock.weekday_label), LV_ALIGN_BOTTOM_MID, -2, 0);lv_timer_t* task_timer = lv_timer_create(clock_date_task_callback, 200, (void *)&lv_clock); // 创建定时任务,200ms刷新一次if (task_timer == NULL){printf("[%s:%d] lv_timer_create failed\n", __FUNCTION__, __LINE__);}
}

运行效果:

LVGL8制作简易时钟相关推荐

  1. 前端demo——CSS3制作简易时钟

    CSS3制作简易时钟 创建整个时钟的容器 在容器内分别创建时针.分针.秒针 考虑:由于旋转时,默认旋转基点在中间,所以把时针.分针.秒针分别放在一个外层容器中,并对它们的外层容器设置动画效果. htm ...

  2. html制作简易时钟

    新人学习,制作html页面时钟表盘,实现调用时间, CSS部分代码如下 html, body{background-color: #000000; } .fix-center{position: ab ...

  3. 原生css+html制作简易时钟

    先上效果图 html代码 <!-- 时钟边框 --><div class="clock"><!-- 分针 --><div class=&q ...

  4. Html 制作简易时钟

    <!DOCTYPE html> <html><!--时钟--><div><canvas id="clock" height=& ...

  5. php动态模拟时钟,使用canvas制作简易实时动态时钟

    动态时钟 这几天的工作学习对Canvas产生了很高的兴趣,拿回JS红宝书认真又学了一遍Canvas,恰巧书中例子是画一个小钟,但这个例子非常简易而且没有动画效果,由此产生了制作动态时钟的想法. 如果你 ...

  6. 纯css3制作简易钟表时钟

    使用css3制作简易钟表 效果 html代码 <div class="clock" ><!-- 指針 --><div class="hour ...

  7. 24小时切换简易时钟-51单片机

    24小时切换简易时钟 简介 1.本设计主要介绍用单片机内部的定时/计数器来实现电子时钟的方法,本设计由单片机STC89C51单片机和LED数码管为核心,辅以必要的电路,构成了一个单片机电子时钟. 2. ...

  8. 【Proteus仿真】LCD1602+DS1307按键设置简易时钟

    [Proteus仿真]LCD1602+DS1307按键设置简易时钟 Proteus仿真演示 功能说明 通过按键设置当前时间,按键调整时间只实现了对时分秒的设置,年月日以及星期是程序代码写入的,按键不能 ...

  9. 运用计算机来动画制作的视频,如何制作一个时钟转动动画视频?电脑制作动画的软件制作时钟转动的小视频的方法...

    今天小编要来介绍的是制作动画的软件,可以用于制作时钟转动的动画效果,之前小编就介绍过时钟动画制作的方法,但今天的方法更先进哦,这里的时钟的样式还有颜色都可以自定义的哦.制作动画的软件是什么?不是手机自 ...

最新文章

  1. 【java 性能优化实战】1 理论分析:性能优化,有哪些衡量指标、性能优化的技术手段
  2. jQuery 1.4单独为某个动画动作设效果
  3. java异常处理方式推荐做法_谈谈Java异常处理这件事儿
  4. mysql添加序列触发器_Oracle中使用触发器(trigger)和序列(sequence)模拟实现自增列实例...
  5. 关于多级导航如何实现 详细解释。
  6. python对于设计师有什么用-Python前程无忧深圳UI设计师岗位分析
  7. STM32单片机简介
  8. swfupload 无法加载_SwfUpload在IE10上不出现上传按钮的解决方法
  9. 不定积分求解(三大方法)
  10. PIL imagefont 添加下划线
  11. 一个手机号码可以申请二个微信号吗?如何申请?
  12. OIO和NIO的区别
  13. Android RecyclerView实现类似于老虎机抽奖,数字滚动等动画效果
  14. linux中常用的压缩命令,Linux中常用的压缩和解压缩命令汇总
  15. 关于MSP430单片机串口通信数据丢失问题
  16. 【Linux系统开发】x210开发板根目录文件系统构建
  17. CAD视口与模型的线型比例保持一致的命令
  18. 恶意软件android,安卓APP恶意软件的安全检测机制
  19. Java实现QQ登陆界面的搭建
  20. 出现“/opt/ros/melodic/lib/gazebo_ros/gzserver -e ode /home/jize/turtlebot_ws/src/turtlebot_simulator/”

热门文章

  1. (17)UVM sequencer和driver
  2. SMTP错误码/具体原因
  3. Android中运行免安装app,适用于免安装应用的 CTS
  4. 《Shopify从入门到精通》笔记(4~6章)
  5. 原创程序|基于GDAL的遥感影像批量处理工具介绍(三)
  6. python语言的实验心得体会范文_实验报告心得体会范文3篇_心得体会
  7. 利用油猴脚本显示扇贝网真实打卡日记
  8. 新版本GPU加速的tensorflow库的配置方法
  9. 什么副业可以月赚1万元?做什么副业可以月入上万?
  10. 欢迎百度成为开源社年度白金伙伴