时钟实现代码

时钟实现代码代码 时钟实现代码

大家好,欢迎来到IT知识分享网。

 /* * Project: vdtools * Module: module_name * File: Untitled-1 * Created Date: 2023-08-09 14:44:31 * Author: vdtools * Description: description * ----- * todo: modified * ----- * Copyright (c) 2021 - vDiscovery, Inc */ /* ====================================================================================== * log */ #define LOG_ENABLE_DEBUG (1) /* ====================================================================================== * includes */ #include "app_time.h" #include "base.h" #include "lvgl.h" #include "lvgl_json.h" #include "src/resource/app_resource.h" /* ====================================================================================== * macros */ LV_FONT_DECLARE(my_font_104) /* ====================================================================================== * types */ /* ====================================================================================== * declaration */ vd_void_t app_time_on_create(lv_obj_t* scr, app_scr_info_t data); vd_void_t app_time_on_update(lv_obj_t* scr, app_scr_info_t data); vd_void_t app_time_on_destroy(lv_obj_t* scr); /* ====================================================================================== * globals */ static lv_obj_t* img_bac = vd_null; static lv_obj_t* label_time = vd_null; static lv_obj_t* label_am_pm = vd_null; static lv_obj_t* time_bg_img = vd_null; static lv_obj_t* time_h_img = vd_null; static lv_obj_t* time_m_img = vd_null; static lv_obj_t* time_s_img = vd_null; /* ====================================================================================== * helper */ vd_uint8_t timetheme = 0; /* ====================================================================================== * private implementation */ static void my_anim_s(lv_obj_t* obj, lv_coord_t y) { lv_img_set_angle(obj, y); if (lv_img_get_angle(obj) == 0) { struct timeval tv; time_t time; gettimeofday(&tv, NULL); //获取系统时间,并保存到tv中,注意这里可以精确到微秒 time = tv.tv_sec; struct tm* p_time = localtime(&time); lv_img_set_angle(time_m_img, p_time->tm_min * 60); lv_img_set_angle(time_h_img, p_time->tm_hour * 300 + (p_time->tm_min * 5)); } } void lv_time_ready_cb(lv_anim_t* a) { lv_anim_t anim1; lv_anim_init(&anim1); lv_anim_set_var(&anim1, time_s_img); lv_anim_set_exec_cb(&anim1, (lv_anim_exec_xcb_t)my_anim_s); lv_anim_set_ready_cb(&anim1, lv_time_ready_cb); lv_anim_set_time(&anim1, 60000); lv_anim_set_values(&anim1, 0, 3600); lv_anim_set_repeat_count(&anim1, LV_ANIM_REPEAT_INFINITE); lv_anim_start(&anim1); } static void my_timer_cb(lv_timer_t* timer) { struct timeval tv; time_t time; gettimeofday(&tv, NULL); //获取系统时间,并保存到tv中,注意这里可以精确到微秒 time = tv.tv_sec; struct tm* p_time = localtime(&time); if (timetheme == TIME_MODE_2) { lv_label_set_text_fmt(label_time, "#ffffff %02d:%02d", p_time->tm_hour % 12, p_time->tm_min); if (p_time->tm_hour > 12) { lv_label_set_text(label_am_pm, "#ffffff PM"); } else { lv_label_set_text(label_am_pm, "#ffffff AM"); } } else { lv_label_set_text_fmt(label_time, "#ffffff %02d:%02d", p_time->tm_hour, p_time->tm_min); } } /* ====================================================================================== * implementation */ vd_void_t app_time_on_create(lv_obj_t* scr, app_scr_info_t data) { lv_json_bind(scr, APP_LAYOUT_TIME_JSON_STR); timetheme = TIME_MODE_3; img_bac = lv_json_find_widget(scr, APP_ID_TIME_IMG_BAC); lv_img_set_src(img_bac, APP_IMG(APP_IMG_ID_IMG_BAC_2_PNG)); label_time = lv_label_create(img_bac); lv_obj_set_style_text_font(label_time, &my_font_104, LV_PART_MAIN); lv_label_set_recolor(label_time, true); lv_label_set_text(label_time, "#ffffff 11:12"); lv_obj_align(label_time, LV_ALIGN_CENTER, 0, -20); lv_obj_add_flag(label_time, LV_OBJ_FLAG_HIDDEN); label_am_pm = lv_label_create(img_bac); lv_obj_set_style_text_font(label_am_pm, &my_font_104, LV_PART_MAIN); lv_label_set_recolor(label_am_pm, true); lv_label_set_text(label_am_pm, "#ffffff PM"); lv_obj_set_style_text_opa(label_am_pm, 128, 0); lv_obj_align(label_am_pm, LV_ALIGN_CENTER, 0, 80); lv_obj_add_flag(label_am_pm, LV_OBJ_FLAG_HIDDEN); time_bg_img = lv_img_create(img_bac); lv_img_set_src(time_bg_img, APP_IMG(APP_IMG_ID_IC_TIME_1_PNG)); lv_obj_align(time_bg_img, LV_ALIGN_CENTER, 0, 0); time_h_img = lv_img_create(time_bg_img); lv_img_set_src(time_h_img, APP_IMG(APP_IMG_ID_IC_H_TIME_3_PNG)); time_m_img = lv_img_create(time_bg_img); lv_img_set_src(time_m_img, APP_IMG(APP_IMG_ID_IC_M_TIME_2_PNG)); time_s_img = lv_img_create(time_bg_img); lv_img_set_src(time_s_img, APP_IMG(APP_IMG_ID_IC_S_TIME_4_PNG)); lv_obj_add_flag(time_bg_img, LV_OBJ_FLAG_HIDDEN); struct timeval tv; time_t time; gettimeofday(&tv, NULL); //获取系统时间,并保存到tv中,注意这里可以精确到微秒 time = tv.tv_sec; struct tm* p_time = localtime(&time); lv_img_set_angle(time_m_img, p_time->tm_min * 60); lv_img_set_angle(time_h_img, p_time->tm_hour * 300 + (p_time->tm_min * 5)); if (timetheme == TIME_MODE_2) { lv_label_set_text_fmt(label_time, "#ffffff %02d:%02d", p_time->tm_hour % 12, p_time->tm_min); } else { lv_label_set_text_fmt(label_time, "#ffffff %02d:%02d", p_time->tm_hour, p_time->tm_min); } if (p_time->tm_hour > 12) { lv_label_set_text(label_am_pm, "#ffffff PM"); } else { lv_label_set_text(label_am_pm, "#ffffff AM"); } lv_anim_t anim; lv_anim_init(&anim); lv_anim_set_var(&anim, time_s_img); lv_anim_set_exec_cb(&anim, (lv_anim_exec_xcb_t)my_anim_s); lv_anim_set_ready_cb(&anim, lv_time_ready_cb); lv_anim_set_time(&anim, ((60 - p_time->tm_sec) * 1000)); lv_anim_set_values(&anim, p_time->tm_sec * 60, 3600); if (timetheme == TIME_MODE_3) { lv_anim_start(&anim); lv_obj_clear_flag(time_bg_img, LV_OBJ_FLAG_HIDDEN); } else if (timetheme == TIME_MODE_2) { lv_timer_t* timer_data = lv_timer_create(my_timer_cb, 900, NULL); lv_obj_clear_flag(label_time, LV_OBJ_FLAG_HIDDEN); lv_obj_clear_flag(label_am_pm, LV_OBJ_FLAG_HIDDEN); lv_obj_align(label_am_pm, LV_ALIGN_CENTER, 0, 80); lv_obj_align(label_time, LV_ALIGN_CENTER, 0, -20); } else { lv_timer_t* timer_data = lv_timer_create(my_timer_cb, 900, NULL); lv_obj_clear_flag(label_time, LV_OBJ_FLAG_HIDDEN); lv_obj_align(label_time, LV_ALIGN_CENTER, 0, 0); } } vd_void_t app_time_on_update(lv_obj_t* scr, app_scr_info_t data) { } vd_void_t app_time_on_destroy(lv_obj_t* scr) { lv_anim_del_all(); } 
 /* * Project: linux-kit * Module: * File: app_time.h * Created Date: 2023-08-09 14:44:31 * Author: vdtools * Description: description * ----- * todo: modified * ----- * Copyright (c) 2021 - vDiscovery, Inc */ #ifndef APP_TIME_H #define APP_TIME_H /* ====================================================================================== * includes */ #include "base.h" #include "lvgl.h" #include "src/resource/app_resource.h" /* ====================================================================================== * extern */ __vd_extern_c_enter__; /* ====================================================================================== * macros */ /* ====================================================================================== * types */ typedef enum { TIME_MODE_1, TIME_MODE_2, TIME_MODE_3, } time_theme_e; /* ====================================================================================== * globals */ /* ====================================================================================== * declaration */ /* ====================================================================================== * extern */ __vd_extern_c_leave__ #endif // APP_TIME_H

时钟实现代码时钟实现代码

时钟实现代码

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/112987.html

(0)
上一篇 2026-01-14 21:00
下一篇 2026-01-14 21:15

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信