UI设计工具文档UI设计工具文档
反馈
  • AC791
  • AC792
  • AC63
  • GPMCU
  • AD14/15/17/18/AD104
  • AD16
  • AD24
  • AC82
  • AW30
  • AW31
反馈
  • AC791
  • AC792
  • AC63
  • GPMCU
  • AD14/15/17/18/AD104
  • AD16
  • AD24
  • AC82
  • AW30
  • AW31
  • 1.工具前言

    • 1.1.工具首页
    • 1.2.前言说明
  • 2.快速使用

    • 2.1.快速使用
    • 2.2.快速上手
    • 2.3.板子配置
    • 2.4.视频教程
    • 2.5.硬件资料
  • 3.控件说明

    • 3.1.控件说明
    • 3.2.基础控件

      • 页面
      • 按钮
      • 图片按钮
      • 标签
      • 图片
      • 文本框
      • 开关
      • 数字微调器
      • 复选框
      • 下拉框
      • 进度条
      • Lottie动画
      • 帧动画
      • 图表
      • 滑动条
      • 弧线
      • 仪表盘
    • 3.3.菜单控件

      • 圆弧菜单
      • 齿轮菜单
      • 列表菜单
      • 曲线菜单
      • 网格菜单
      • 万花筒菜单
      • 多边形菜单
    • 3.4.容器控件

      • 通用容器
      • Flex布局
  • 4.高级功能

    • 4.1.时间轴动画
    • 4.2.模型绑定
    • 4.3.资源管理
    • 4.4.国际化
    • 4.5.硬件仿真
    • 4.6.自动化测试
    • 4.7.控件组
    • 4.8.菜单管理
    • 4.9.页面管理
    • 4.10.动态页面
  • 5.插件系统

    • 5.1.插件说明
    • 5.2.开发指南
    • 5.3.字体合并
    • 5.4.图片编辑
    • 5.5.截图
    • 5.6.项目合并
    • 5.7.项目属性编辑
    • 5.8.视频转图片
  • 6.使用案例

    • 6.1.倒计时案例
  • 7.常见问题

    • 7.1.问题说明
    • 7.2.编译问题
    • 7.3.LVGL问题
    • 7.4.仿真问题
    • 7.5.UI工具问题
    • 7.6.其他问题
  • 8.工具杂项

    • 8.1.杂项1
    • 8.2.杂项2

倒计时案例

使用定时器以及数字时钟实现倒计时功能,点击按钮开始倒计时,倒计时结束后自动停止。

本章目录
  • 1. 创建控件
  • 2. 设置按钮触发事件并编写事件代码
  • 3. 设置时钟属性以及编写事件回调代码
  • 4. 编译仿真
  • 5. 计时暂停与恢复
  • 6. 编译仿真
本章正文

创建控件

  • 分别创建定时器、数字时钟以及按钮这三种控件
  • 点击工具栏中的模型添加消息模型,并且设置想要的倒计时初始事件,示例此处为10秒
  • 修改数字时钟控件属性中的时间以及日期格式,并绑定消息模型

设置按钮触发事件并编写事件代码

//上半部分
struct
{
  int btn1;
} btn_clicked_cnt = {
  .btn1 = 1,
};

struct tm btn_1_time_var = {
  .tm_min = 0,
  .tm_sec = 10,
};

//下半部分
btn_clicked_cnt.btn1++;
btn_1_time_var.tm_sec = 10;  //对应倒计时的秒
btn_1_time_var.tm_min = 0;   //对应倒计时的分

gui_msg_send(GUI_COUNT_MSG_ID_TIME, (uint16_t *)&btn_1_time_var, 4);
if (btn_clicked_cnt.btn1 == 2) {
    if (ui_scr->home_timer_1 == NULL) {
        ui_scr->home_timer_1 = lv_timer_create(home_timer_1_timer_cb, 1000, "");
    }
    lv_timer_set_period(ui_scr->home_timer_1, 1000);
    lv_timer_set_repeat_count(ui_scr->home_timer_1, 10);
    lv_timer_resume(ui_scr->home_timer_1);
    btn_clicked_cnt.btn1 = 0;
    lv_obj_clear_flag(ui_scr->home_btn_1, LV_OBJ_FLAG_CLICKABLE);
}

设置时钟属性以及编写事件回调代码

//上半部分
extern struct tm btn_1_time_var;

//下半部分
btn_1_time_var.tm_sec--;
gui_msg_send(GUI_COUNT_MSG_ID_TIME, (uint16_t *)&btn_1_time_var, 4);

if (btn_1_time_var.tm_sec <= 0 && btn_1_time_var.tm_min != 0) {
    btn_1_time_var.tm_sec = 60;
    btn_1_time_var.tm_min--;
}
else if (btn_1_time_var.tm_sec == 0) {
    lv_obj_add_flag(ui_scr->home_btn_1, LV_OBJ_FLAG_CLICKABLE);
}

编译仿真

  • 编译仿真后,点击开始倒计时,即可观察到数字时钟控件倒数

计时暂停与恢复

  • 添加新的模型消息并绑定至按钮控件
  • 修改按钮触发事件代码
//上半部分
struct
{
  int btn1;
} btn_clicked_cnt = {
  .btn1 = 0,
};

struct tm btn_1_time_var = {
  .tm_min = 0,
  .tm_sec = 10,
};

//下半部分
btn_clicked_cnt.btn1++;

if (btn_clicked_cnt.btn1 < 2) {
    gui_msg_send(GUI_COUNT_MSG_ID_PROP, "暂停倒计时", 1);
    gui_msg_send(GUI_COUNT_MSG_ID_TIME, (uint16_t *)&btn_1_time_var, 4);
    lv_timer_set_period(ui_scr->home_timer_1, 1000);
    lv_timer_resume(ui_scr->home_timer_1);
}
else if (btn_clicked_cnt.btn1 == 2) {
    if (ui_scr->home_timer_1 == NULL) {
        ui_scr->home_timer_1 = lv_timer_create(home_timer_1_timer_cb, 1000, "");
    }

    lv_timer_pause(ui_scr->home_timer_1);
    if (btn_1_time_var.tm_sec <= 0) {
        btn_1_time_var.tm_sec = 10;
        btn_1_time_var.tm_min = 0;
        lv_timer_set_repeat_count(ui_scr->home_timer_1, btn_1_time_var.tm_min * 60 + btn_1_time_var.tm_sec);
    }

    gui_msg_send(GUI_COUNT_MSG_ID_PROP, "开始倒计时", 1);
    btn_clicked_cnt.btn1 = 0;
}
  • 修改定时器回调事件代码
//上半部分
extern struct tm btn_1_time_var;

//下半部分
btn_1_time_var.tm_sec--;
gui_msg_send(GUI_COUNT_MSG_ID_TIME, (uint16_t *)&btn_1_time_var, 4);

if (btn_1_time_var.tm_sec < 0 && btn_1_time_var.tm_min != 0) {
    btn_1_time_var.tm_sec = 59;
    btn_1_time_var.tm_min--;
}
else if (btn_1_time_var.tm_sec == 0 && btn_1_time_var.tm_min == 0) {
    gui_msg_send(GUI_COUNT_MSG_ID_PROP, "计时完毕", 1);
    lv_obj_add_flag(ui_scr->home_btn_1, LV_OBJ_FLAG_CLICKABLE);
}

编译仿真

  • 打包完之后再进行仿真