环境:
主机:WIN10
开发环境:MDK5.13
MCU:STM32F103
源代码:
gui_widget_progbar.h
/**
* Copyright (c), 2015-2025
* @file gui_widget_progbar.h
* @brief 文本控件头文件
* @author jdh
* @date 2015/11/22
*/
#ifndef _GUI_WIDGET_PROGBAR_H_
#define _GUI_WIDGET_PROGBAR_H_
/*********************************************************************
* 头文件
**********************************************************************/
#include "gui_interface.h"
/*********************************************************************
* 宏定义
**********************************************************************/
/**
* @brief 文本长度.单位:字节
*/
#define LEN_WIDGET_TEXT 32
/*********************************************************************
* 数据结构
**********************************************************************/
/**
* @brief 进度条数据结构
*/
typedef struct _Widget_Progbar
{
//x轴位置
uint16_t x;
//y轴位置
uint16_t y;
//水平尺寸
uint16_t xsize;
//垂直尺寸
uint16_t ysize;
}*Widget_Progbar_Handle;
/*********************************************************************
* 函数
**********************************************************************/
/**
* @brief 创建控件
* @param x:左上角x坐标
* @param y:左上角y坐标
* @param xsize:水平尺寸
* @param ysize:垂直尺寸
* @retval 控件句柄
*/
Widget_Progbar_Handle gui_widget_progbar_create(uint16_t x,uint16_t y,uint16_t xsize,uint16_t ysize);
/**
* @brief 设置进度
* @param value:百分比,0-100
*/
void gui_widget_progbar_set_value(Widget_Progbar_Handle handle,uint8_t value);
#endif
gui_widget_progbar.c
/**
* Copyright (c), 2015-2025
* @file gui_widget_progbar.c
* @brief 进度条控件主文件
* @author jdh
* @date 2015/11/22
*/
/*********************************************************************
* 头文件
**********************************************************************/
#include "gui_widget_progbar.h"
#include "gui_2d_lib.h"
#include "stdlib.h"
/*********************************************************************
* 静态变量
**********************************************************************/
/**
* @brief 百分比
*/
static uint8_t Percent = 0;
/*********************************************************************
* 静态函数
**********************************************************************/
/**
* @brief 控件显示
* @param handle:控件句柄
*/
static void show(Widget_Progbar_Handle handle);
/*********************************************************************
* 函数
**********************************************************************/
/**
* @brief 创建控件
* @param x:左上角x坐标
* @param y:左上角y坐标
* @param xsize:水平尺寸
* @param ysize:垂直尺寸
* @retval 控件句柄
*/
Widget_Progbar_Handle gui_widget_progbar_create(uint16_t x,uint16_t y,uint16_t xsize,uint16_t ysize)
{
Widget_Progbar_Handle handle;
//控件初始化
handle = malloc(sizeof(*handle));
handle->x = x;
handle->y = y;
handle->xsize = xsize;
handle->ysize = ysize;
//显示
show(handle);
return handle;
}
/**
* @brief 设置进度
* @param value:百分比,0-100
*/
void gui_widget_progbar_set_value(Widget_Progbar_Handle handle,uint8_t value)
{
if (Percent == value)
{
return;
}
if (value < Percent)
{
//清除区域
gui_fill_rect(handle->x,handle->y,handle->x + handle->xsize,handle->y + handle->ysize,0);
//显示
gui_draw_rect(handle->x,handle->y,handle->x + handle->xsize,handle->y + handle->ysize);
}
//显示
gui_fill_rect(handle->x + handle->xsize * Percent / 100,handle->y,
handle->x + handle->xsize * value / 100,handle->y + handle->ysize,1);
Percent = value;
}
/**
* @brief 控件显示
* @param handle:控件句柄
*/
static void show(Widget_Progbar_Handle handle)
{
//清除区域
gui_fill_rect(handle->x,handle->y,handle->x + handle->xsize,handle->y + handle->ysize,0);
//显示
gui_draw_rect(handle->x,handle->y,handle->x + handle->xsize,handle->y + handle->ysize);
Percent = 0;
}
测试代码:
//进度条
static Widget_Progbar_Handle Widget_Progbar;
Widget_Progbar = gui_widget_progbar_create(9,39,111,8);
gui_widget_progbar_set_value(Widget_Progbar,50);
效果图:
上一篇:为OLED屏增加GUI支持7:综合实例
下一篇:为OLED屏增加GUI支持1:OLED驱动
推荐阅读最新更新时间:2024-11-12 23:54
设计资源 培训 开发板 精华推荐
- 【训练营】plotclock自定义书写小贱钟
- LTC3897EUHF 高效两相 24V 升压转换器的典型应用电路(启动后输入电源降至 2.3V)
- 支持三种屏幕的 F1C200S开发板
- Recoil 电机控制器 G431 DRV8350RS
- MICRF022YM-FS48 300-440 MHz Qwik-Radio ASK 接收器的典型应用
- 使用 ROHM Semiconductor 的 BU4829 的参考设计
- LTC2945CMS-1 在 -48V 系统中使用低侧检测进行电源监控的典型应用
- LTC2992CDE-1 高侧和低侧电流检测在宽范围电源上的典型应用
- 用于微功率 A/D 转换器的 LT1634ACS8-1.25 电压基准的典型应用
- LT3437、14V 至 3.3V 降压转换器具有 100A 空载静态电流
- TI C2000精品课暑期伴你行 学习好礼送不停
- 看视频,了解泰克高性价比频谱分析仪,填卷赢好礼!
- TI携您共创未来乘驾新体验——初步学习: TI 汽车专题任务打卡
- EEWORLD下载中心热力上线!
- 有奖直播|魏德米勒 OMNIMATE® 联接技术的创新发展
- 【泰有聊】系列技术文章连载1:示波器“芯”升级,聊一聊TEK061/041 ASIC创新平台
- 参加RT-Thread软件包赛,赢取RoboMaster等丰厚奖品!
- 免费领取|射频年度大会EDI CON VIP全场通票(注册到场100%中奖!)
- 非凡富士通FRAM,仅需微小电源即可高速写入数据!看视频答题有礼!
- TTI Asia 2016慕尼黑上海电子展关注有礼活动