为OLED屏添加GUI支持6:进度条控件
2024-09-30 05:40:17
为OLED屏添加GUI支持6:进度条控件
本文博客链接:http://blog.csdn.net/jdh99,作者:jdh,转载请注明.
环境:
主机: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);
效果图:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />
最新文章
- linux下安装postgresql
- C#_取随机字符
- Java用户线程和守护线程
- android之dialog
- Swift实战-豆瓣电台(四)歌曲列表的展现
- Linux获取用户主目录
- 深入浅出Spring(五) SpringMVC
- 【Mood-18】github 使用指南
- JavaWeb项目开发案例精粹-第3章在线考试系统-003Dao层
- g++ error: extra qualification on member [-fpermissive]
- Delphi 设置文件属性
- virtio-netdev 发送数据包
- 十一章:用CSS进行布局
- koa-router中路由/后面不填参数就会报404的解决办法
- bzoj:1685 [Usaco2005 Oct]Allowance 津贴
- css3学习系列之移动
- 【XSY2733】Disembrangle DP
- 二叉树实现,C++语言描述
- PHP简单操作SqlServer数据库。
- 企业类Web原型制作分享-Kraftwerk