历史上的今天
返回首页

历史上的今天

今天是: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);


效果图:

推荐阅读

史海拾趣

ABOV(现代单片机)公司的发展小趣事

ABOV(现代单片机)是一家韩国的半导体公司,以下是该公司发展的五个相关故事:

  1. 公司成立和初期发展: ABOV公司成立于1997年,总部位于韩国首尔。公司专注于设计、制造和销售嵌入式系统解决方案,主要产品包括微控制器(MCU)和嵌入式闪存等。成立初期,ABOV致力于技术创新和产品研发,建立起一支技术精湛的研发团队。

  2. 技术创新和产品推出: ABOV在技术创新方面投入了大量资源,不断推出新产品和解决方案。公司的现代单片机产品以其高性能、低功耗和丰富的功能而闻名。ABOV还在嵌入式闪存技术方面取得了重大突破,推动了嵌入式系统的发展和普及。

  3. 市场拓展和国际合作: 随着产品技术的不断成熟和市场需求的增长,ABOV积极拓展国际市场,并与全球各地的客户建立了合作关系。公司的现代单片机产品被广泛应用于消费电子、汽车电子、工业控制等领域,赢得了客户的信赖和认可。

  4. 持续投入研发和创新: ABOV持续投入研发,并不断提升产品性能和功能。公司注重与客户的密切合作,根据客户需求进行定制化开发,为客户提供个性化的解决方案。ABOV还与学术机构和合作伙伴合作,共同推动技术创新和产业发展。

  5. 未来展望和发展方向: ABOV将继续致力于技术创新和产品升级,加强在嵌入式系统领域的研发和应用。公司将继续拓展国际市场,加强与客户和合作伙伴的合作,推动现代单片机技术的发展和普及,为全球的电子行业做出更大的贡献。

Compound Photonics公司的发展小趣事

Compound Photonics公司成立于2007年,其初期发展并不顺利。然而,一个关键的转折点出现在公司收购Syntax-Brillian的专利之后。Syntax-Brillian是一家在微显示领域有着深厚技术积累的公司,其核心在于早年间收购的Colorado Microdisplays/Zight专利。这次收购使得Compound Photonics获得了进入微显示领域的重要技术基础,为后续的发展奠定了坚实的基础。

Corsair Electrical Connectors Inc公司的发展小趣事

Corsair深知品质是企业生存和发展的关键。因此,公司建立了严格的质量管理体系,从原材料采购、生产加工到产品出厂,每一个环节都进行严格的质量控制。Corsair还引入了先进的质量检测设备和方法,确保每一件产品都符合客户的要求和行业标准。这种对品质的执着追求使得Corsair的产品在市场上赢得了良好的声誉。

亿晶源(ekinglux)公司的发展小趣事

凭借卓越的产品质量和创新能力,亿晶源逐渐获得了行业内的认可。2015年,公司荣获广东省高新技术企业称号,标志着公司在技术创新和市场竞争中取得了显著成绩。此外,公司还先后成为中国LED光电协会副会长单位、深圳半导体保进会员会长单位等,进一步提升了行业地位。

上海双岭电子(Double-peak)公司的发展小趣事

随着科技的不断发展,电子行业面临着日新月异的技术变革。为了保持竞争优势,双岭电子始终坚持创新驱动的发展理念。公司投入大量资金用于研发新技术、新产品,并鼓励员工提出创新性的想法和建议。通过不断的创新实践,双岭电子成功推出了MOS型场效应晶体管和CMOS集成电路等高端产品,进一步巩固了公司在行业中的领先地位。

Andigilog公司的发展小趣事

在保持核心技术优势的同时,双岭电子也积极探索跨界合作的可能性。通过与国内外知名企业和研发机构的合作,公司成功将场效应半导体器件应用于传感器、仪器仪表和自动化控制等领域。这种跨界合作不仅拓宽了公司的市场渠道,也提升了产品的附加值。同时,双岭电子还积极参与各类行业展会和交流活动,与业界同行建立了良好的合作关系。

问答坊 | AI 解惑

新建楼宇防雷电设计

根据5月16日颁布实施的《厦门市建设项目防雷工程设计审核规定(试行)》(以下简称《规定》(试行)),今后所有新建、改建、扩建建设项目在设计审核和竣工验收时,建设方都必须向审核、验收部门提供单独列出的防雷设计专篇。昨日上午,市气象局召 ...…

查看全部问答>

可以查 各种芯片资料 的小工具

本帖最后由 paulhyde 于 2014-9-15 09:19 编辑 喜欢的下 下完回个贴呀!  …

查看全部问答>

SMbus 总线与 I2C总线有什么区别?

同一个设备EEPROM,接在I2C总线上,和连在SM bus上,写驱动时有什么差别吗? 以前写过I2C主控制器的驱动, 现在要写一个SM bus控制器的驱动,二者有什么差别啊? …

查看全部问答>

MMU地址映射问题

各位大侠好! 小弟最近在调试wince5.0的bootloader时遇到了问题,是这样的:cpu是ATMEL9261(926ej-s),在startup.s中没有启用MMU之前程序运行很好!但是当执行完mcr      p15, 0, r1, c1, c0, 0 后,灯也没亮,程序就飞了,请大家赐教 ...…

查看全部问答>

F-ES56C-V2嵌入式同步MDOEM模块

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 ...…

查看全部问答>

请问EVC中怎么禁止一个不全屏的对话框被点住标题栏拖动?

如题,现需要做一个在屏幕右上角的小对话框,必须有标题栏,要求不能被拖动标题栏改变位置,但也不能改变大小,所以不能用全屏的方法来限制拖动。 尝试用操作NCLBUTTONDOWN的消息在EVC中好像行不通。 请高手指点,谢谢!!…

查看全部问答>

关于CCS的限制问题

我的仿真器附带光盘上有一个CCSv4,上面说是32K限制版,这个32K指的是存储器的大小吗?假如我想使用TMS320F28035中的128K的Flash,能用吗?…

查看全部问答>

单电源边双电源?

单电源变双电源的原理是什么?能给个电路吗 6v电池到正负5v的? 谢谢…

查看全部问答>

用51单片机进行控制射进简易计算器

通过Proteus与keil C的方针联调设计一个简易计算器,计算器可实现6位整数的四则运算,由LED数码显示运算数据以及结果,其中出发运算无需实现小数部分。   QQ 261246707欢迎交流 现在编程方面有一些问题 希望大家给点帮助…

查看全部问答>

MSP430单片机中 P1 和 P1.0有什么区别?

我的理解是   P1.0 既可以输入,又可以输出。而 P1 只能输出。。。。。。学习单片机还不到15天。。。理解的可能比较肤浅。。。…

查看全部问答>