• 为OLED屏添加GUI支持6:进度条控件


    为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);


    效果图:



  • 相关阅读:
    软件专利申请流程
    GitLab的权限管理及Merge Request
    git clone指定branch或tag
    pom.xml activatedProperties --spring.profiles.active=uat 对应
    Alpine容器中运行go的二进制文件
    在 Alpine Linux 中安装 bash shell
    mysql 大小写不敏感
    PB级数据实时查询,滴滴Elasticsearch多集群架构实践
    top命令输出解释以及load average 详解及排查思路
    你真的了解java的lambda吗?- java lambda用法与源码分析
  • 原文地址:https://www.cnblogs.com/yangykaifa/p/7398973.html
Copyright © 2020-2023  润新知