硬件平台:STM32F413-DISCOVERY
操作系统:FreeRTOS
UI方案:littlevgl 5.2

模拟时钟表盘展示:

基于LittlevGL设计的手表模拟时钟表盘

Applist效果展示(屏幕破裂,效果不太好,不好意思)

基于LittlevGL设计的手表applist效果展示

表盘绘制:


// ##
typedef struct
{// #lv_obj_t *hour_body;lv_obj_t *minute_body;lv_obj_t *second_body;// ##lv_point_t hour_point[2];lv_point_t minute_point[2];lv_point_t second_point[2];// ##lv_style_t hour_line_style;lv_style_t minute_line_style;lv_style_t second_line_style;
}clock_body_t;// ##
static clock_body_t *clock_body = NULL;// ##
static lv_obj_t *clock_label = NULL;// ##
void time_get_time(RTC_TimeTypeDef *pTime);
void time_get_date(RTC_DateTypeDef *pDate);// ##
static void app_activity_event_handle(activity_event_t *event);// ##
static int16_t coordinate_x_relocate(int16_t x)
{return ((x) + LV_HOR_RES / 2);
}// ##
static int16_t coordinate_y_relocate(int16_t y)
{return (((y) - LV_HOR_RES / 2) < 0) ? (0 - ((y) - LV_HOR_RES / 2)) : ((y) - LV_HOR_RES / 2);
}// ##
static void clock_create(lv_obj_t *parent, clock_body_t *body, RTC_TimeTypeDef *time)
{// ##body->hour_body   = lv_line_create(parent, NULL);body->minute_body = lv_line_create(parent, NULL);body->second_body = lv_line_create(parent, NULL);// ##lv_style_copy(&body->hour_line_style, &lv_style_pretty);body->hour_line_style.line.color = LV_COLOR_RED;body->hour_line_style.line.width = 3;lv_line_set_style(body->hour_body, &body->hour_line_style);lv_style_copy(&body->minute_line_style, &lv_style_pretty);body->minute_line_style.line.color = LV_COLOR_RED;body->minute_line_style.line.width = 2;lv_line_set_style(body->minute_body, &body->minute_line_style);lv_style_copy(&body->second_line_style, &lv_style_pretty);body->second_line_style.line.color = LV_COLOR_WHITE;body->second_line_style.line.width = 1;lv_line_set_style(body->second_body, &body->second_line_style);// ##body->hour_point[0].x   = coordinate_x_relocate(0);body->hour_point[0].y   = coordinate_y_relocate(0);body->hour_point[1].x   = coordinate_x_relocate(HOUR_LENGTH * sin((time->Hours > 12 ? time->Hours - 12 : time->Hours) * 30 * PI / 180));body->hour_point[1].y   = coordinate_y_relocate(HOUR_LENGTH * cos((time->Hours > 12 ? time->Hours - 12 : time->Hours) * 30 * PI / 180));body->minute_point[0].x = coordinate_x_relocate(0);body->minute_point[0].y = coordinate_y_relocate(0);body->minute_point[1].x = coordinate_x_relocate(MINUTE_LENGTH * sin(time->Minutes * 6 * PI / 180));body->minute_point[1].y = coordinate_y_relocate(MINUTE_LENGTH * cos(time->Minutes * 6 * PI / 180));body->second_point[0].x = coordinate_x_relocate(20 * sin((180 + time->Seconds * 6) * PI / 180));body->second_point[0].y = coordinate_y_relocate(20 * cos((180 + time->Seconds * 6) * PI / 180));body->second_point[1].x = coordinate_x_relocate(SECOND_LENGTH * sin(time->Seconds * 6 * PI / 180));body->second_point[1].y = coordinate_y_relocate(SECOND_LENGTH * cos(time->Seconds * 6 * PI / 180));// ##lv_line_set_points(body->hour_body,   body->hour_point,   2);lv_line_set_points(body->minute_body, body->minute_point, 2);lv_line_set_points(body->second_body, body->second_point, 2);
}

表盘更新:

// ##
static void app_activity_event_handle(activity_event_t *event)
{if(event->msg_id == MSG_RTC_ALARM){char buf1[50];char buf2[50];RTC_DateTypeDef date;RTC_TimeTypeDef time;time_get_date(&date);time_get_time(&time);sprintf(buf1, "%s %02d %s %d\r\n", month_list[date.Month], date.Date,week_list[date.WeekDay - 1], 2000 + date.Year);sprintf(buf2, "%02d:%02d:%02d", time.Hours, time.Minutes, time.Seconds);lv_obj_set_pos(content_date_label, (LV_HOR_RES - strlen(buf1) * 8) / 2, 100);lv_obj_set_pos(content_time_label, (LV_HOR_RES - strlen(buf2) * 8) / 2, 130);lv_label_set_text(content_date_label, buf1);lv_label_set_text(content_time_label, buf2);}else{LOG(TAG, "unknown msg : %d\r\n", event->msg_id);}
}(更新)
基于lvgl-7.2设计的模拟时钟表盘,效果如下:
![在这里插入图片描述](https://img-blog.csdnimg.cn/2021032818343465.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1N0YXJFbWJlZGRlZA==,size_16,color_FFFFFF,t_70)

基于littlevgl设计的手表模拟时钟表盘(附代码)相关推荐

  1. LVGL库实现的简单实时时钟表盘示例代码

    LVGL库实现的简单实时时钟表盘示例代码: #include "lvgl.h" #include <time.h>static lv_obj_t * screen; s ...

  2. 基于遗传算法优化的Elman神经网络数据预测-附代码

    基于遗传算法优化的Elman神经网络数据预测 - 附代码 文章目录 基于遗传算法优化的Elman神经网络数据预测 - 附代码 1.Elman 神经网络结构 2.Elman 神经用络学习过程 3.电力负 ...

  3. 2020华为杯E题——基于灰色预测的大雾能见度预测模型(附代码)

    2020华为杯E题--基于灰色预测的大雾能见度预测模型(附代码) 一.E题赛题 二.赛题分析 三.基于灰色预测的大雾能见度预测模型 3.1灰色预测模型的定义 3.2 灰色预测模型的目的 GM(1,1) ...

  4. STM32F103C8T6通过内部Flash写入读取数据,模拟EEPROM(附代码)

    STM32F103C8T6通过内部Flash写入读取数据,模拟EEPROM(附代码) 优点: 1. 模块化编程,方便移植,集成度高: 2. 拿来直接用 Flash空间定定义 主函数初始化已经Flash ...

  5. 路径规划算法:基于灰狼优化(GWO)的路径规划算法- 附代码

    路径规划算法:基于灰狼优化(GWO)的路径规划算法- 附代码 文章目录 路径规划算法:基于灰狼优化(GWO)的路径规划算法- 附代码 1.算法原理 1.1 环境设定 1.2 约束条件 1.3 适应度函 ...

  6. 路径规划算法:基于入侵杂草优化的路径规划算法- 附代码

    路径规划算法:基于入侵杂草优化的路径规划算法- 附代码 文章目录 路径规划算法:基于入侵杂草优化的路径规划算法- 附代码 1.算法原理 1.1 环境设定 1.2 约束条件 1.3 适应度函数 2.算法 ...

  7. 基于人工蜂群算法改进的DELM预测-附代码

    人工蜂群算法改进的深度极限学习机DELM的回归预测 文章目录 人工蜂群算法改进的深度极限学习机DELM的回归预测 1.ELM原理 2.深度极限学习机(DELM)原理 3.人工蜂群算法 4.人工蜂群算法 ...

  8. 基于粒子群算法改进的DELM预测 -附代码

    粒子群算法改进的深度极限学习机DELM的回归预测 文章目录 粒子群算法改进的深度极限学习机DELM的回归预测 1.ELM原理 2.深度极限学习机(DELM)原理 3.粒子群算法 4.粒子群算法改进DE ...

  9. 基于蜣螂优化的Elman神经网络数据预测-附代码

    基于蜣螂算法优化的Elman神经网络数据预测 - 附代码 文章目录 基于蜣螂算法优化的Elman神经网络数据预测 - 附代码 1.Elman 神经网络结构 2.Elman 神经用络学习过程 3.电力负 ...

  10. [基础代码仓库]基于STM32C8T6的库函数ADC模拟+DMA多通道转运代码

    目录 导言 理论部分 STM32F103C8T6最小系统板 代码初始化步骤 代码部分 一.1个通道PA0 二.2个通道PA0.PA1 三.3个通道PA0.PA1.PA2 四.4个通道PA0~PA3 五 ...

最新文章

  1. BCH综述:数以百万计的商人,更多的代币和冲突的愿景
  2. HDU 3949 XOR 线性基
  3. python3 gb2312转utf8_字符编码和python使用encode,decode转换utf-8, gbk, gb2312
  4. 预告 | CSIG图像图形学科前沿讲习班:图神经网络
  5. 【Android】Theme.AppCompat.Light 问题
  6. D3---01基础的柱状图制作(转)
  7. 第2章 数字之魅——快速寻找满足条件的两个数
  8. C++STL之fill()函数使用方法
  9. win7系统计算机无最小化,win7纯净版系统任务栏无法显示网页最小化窗口怎么办...
  10. postgres数据库授权失败
  11. Systen类、Runtime类、Math类、Random类、包装类
  12. QTalk 基于Qt的局域网聊天软件(beta 0.1.0)
  13. 如何根据vin码查询_VIN车辆识别代码查询
  14. cmd快捷键和常用命令
  15. 插本计算机教程,广东专插本复习方法
  16. 能模仿韩寒小四写作的神奇循环神经网络
  17. 什么是SDK? SDK是什么意思?(转)
  18. 检测图片篡改困难?快来试试这款黑科技
  19. vue 过滤器做字数限制并显示省略号
  20. Mac Edge 浏览器开启几秒后自动关闭问题

热门文章

  1. stm32采集脉冲信号_STM32单片机怎么产生脉冲信号控制步进电动机?
  2. 华为发放20亿元奖金,抗击美国断供,奖励员工加班奋斗,网友:他们应得的...
  3. chemdraw怎么画拐弯的箭头_使用ChemDraw Prime 15的箭头工具绘制出弧线箭头
  4. slackware下ibus编译安装(更新:2010/10/17)
  5. 数据库全栈工程师(DevDBOps)低首付、高回报,先就业后付款
  6. lync2013持久聊天服务器如何修复,部署企业版lync2013之四:持久聊天
  7. APUE-文件和目录(六)函数ftw和nftw
  8. iOS系统自带指纹验证的使用
  9. 关于oracle的锁的级别以及介绍
  10. Informix数据库查询表的锁级别