历史上的今天
今天是:2024年10月14日(星期一)
2020年10月14日 | 为OLED屏增加GUI支持6:进度条控件
2020-10-14 来源:eefocus
环境:
主机: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);
效果图:
史海拾趣
|
同一个设备EEPROM,接在I2C总线上,和连在SM bus上,写驱动时有什么差别吗? 以前写过I2C主控制器的驱动, 现在要写一个SM bus控制器的驱动,二者有什么差别啊? … 查看全部问答> |
|
F-ES56C-V2嵌入式同步MDOEM模块 型号: F-ES56C-V2 Conexant芯片税控机专用、POS机专用同步MODEM 简介: F-ES56C-V2系列MODEM是嵌入式TTL电平接口5V供电同步Modem模块,为用户提供支持V.92、V.90、V.34、V.32bis及以下协议的调制解调器OEM、ODM ...… 查看全部问答> |
|
如题,现需要做一个在屏幕右上角的小对话框,必须有标题栏,要求不能被拖动标题栏改变位置,但也不能改变大小,所以不能用全屏的方法来限制拖动。 尝试用操作NCLBUTTONDOWN的消息在EVC中好像行不通。 请高手指点,谢谢!!… 查看全部问答> |
|
我的仿真器附带光盘上有一个CCSv4,上面说是32K限制版,这个32K指的是存储器的大小吗?假如我想使用TMS320F28035中的128K的Flash,能用吗?… 查看全部问答> |
|
通过Proteus与keil C的方针联调设计一个简易计算器,计算器可实现6位整数的四则运算,由LED数码显示运算数据以及结果,其中出发运算无需实现小数部分。 QQ 261246707欢迎交流 现在编程方面有一些问题 希望大家给点帮助… 查看全部问答> |
|
我的理解是 P1.0 既可以输入,又可以输出。而 P1 只能输出。。。。。。学习单片机还不到15天。。。理解的可能比较肤浅。。。… 查看全部问答> |




