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

发布者:温雅如风最新更新时间:2020-10-14 来源: eefocus关键字:OLED屏  GUI支持  进度条控件 手机看文章 扫描二维码
随时随地手机看文章

环境:


主机: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支持  进度条控件 引用地址:为OLED屏增加GUI支持6:进度条控件

上一篇:为OLED屏增加GUI支持7:综合实例
下一篇:为OLED屏增加GUI支持1:OLED驱动

推荐阅读最新更新时间:2024-11-12 23:54

三星明年为iPhone供应2亿块OLED 价值220亿美元
  2月20日报道,据外媒报道,来自行业人士的最新消息称, 三星 显示器公司明年将为苹果iPhone供应1.8亿至2亿块柔性 OLED 面板,约是今年供应量的四倍。下面就随手机便携小编一起来了解一下相关内容吧。     这些面板有望为 三星 带来198亿美元至220亿美元的营收,因为据研究公司IHS Market估计,每块 OLED 面板(还包括保护玻璃和触控传感器)的供应价格约为110美元。 三星 的A3面板产线良品率提升,是该公司决定增加对苹果供应量的主要原因。   今年早些时候,A3产线的良品率约为60%,但在今年下半年该数字提升至了逾80%。凭借90%的良品率,三星显示器将每年能够产出约2.24亿块6英寸 OLED 面
[手机便携]
Qt与英飞凌合作,支持开箱即用的GUI开发
Qt Group 正在将其轻量级高性能图形框架引入英飞凌的车用MCU中。 英飞凌支持图形功能的 TRAVEO T2G Cluster MCU 现在可与 Qt 图形解决方案及其易于使用的开发人员工具包一起使用,用于构建图形用户界面 (GUI)。 现代 MCU 本质上是微型独立计算机,具有丰富的图形功能,可实现紧凑的设计、节省成本并降低功耗。 它们越来越多地用于需要即时启动、低物理占用空间和经济高效的实时处理的应用,这使得它们非常适合汽车、两轮车、建筑设备以及汽车仪表盘,工业和医疗应用等。 英飞凌的 TRAVEO T2G MCU 可满足所有这些用例,TRAVEO T2G Cluster 系列支持具有高帧速率和全高清分辨率的
[单片机]
为什么LG为苹果生产OLED而自己仍在用液晶
专注于亚洲消费者技术尤其是各种消费电子设备和游戏行业的香港独立撰稿人Ben Sin今日在网络版福布斯发表了一篇评论文章,分析了LG之所以为苹果iPhone生产OLED屏幕但却不会它自己的手机生产OLED屏幕的原因。     两周前我到首尔度假,顺便参观了LG电子的数码园区。这个数码园区位于首尔以南大约一小时车程的平泽市,占地大约64万平方英尺。由于个人兴趣和职业相关的缘故,我主要在园区里参观了他们的移动产品生产线,还采访了负责智能手机生产业务的主管,然而我还有幸参观了LG的展示厅,里面展示的都是LG的电子产品,包括电视机、洗衣机和电冰箱等等。   坦白说,我本人是一名年轻的亚洲裔美国人,不会做什么家务事,我在香港的公寓平
[手机便携]
三星关停在韩LCD产线,转升级OLED
随着近些年OLED屏技术的成熟,已经被广泛使用在各大终端设备之中。而以往那些生产LCD屏的巨头们,纷纷开始关停LCD产线,转而将其升级为OLED屏。现在,继LG Display开始减少LCD屏产线的数量后,近日路透社发表报道称,三星也准备削减旗下LCD屏产线。 三星在一份声明中表示,由于现阶段LCD屏供应过剩以及利润持续下跌的缘故,三星正在调整旗下产线的运营情况。目前正考虑关停一条位于韩国的LCD屏产线,三星的LCD产线经过多年来的缩减之后,只剩下中国和韩国各一条LCD面板生产线,此次要关闭的韩国的LCD工厂。 曾经,国内的液晶面板就像现在的半导体芯片一样,极度依赖进口。以2010年为例,当年中国液晶面板进口额超过4
[嵌入式]
三星关停在韩LCD<font color='red'>屏</font>产线,转升级<font color='red'>OLED</font><font color='red'>屏</font>?
LG现身说事:并没有为苹果iPhone提供OLED显示
最近业界传的沸沸扬扬的LG将会在2018年给iPhone X供应OLED屏的消息,但是LG表示压根没给iPhoneX供应OLED屏,这是传言。 根据国外科技媒体的最新报道,显示面板厂商韩国LG显示器公司刚刚表示,今年截至目前从未给苹果的iPhoneX供应过有机发光二极体面板(俗称OLED显示屏)。 LG:别闹!压根没给iPhoneX供应OLED屏 而至于LG会不会在明年或未来为苹果iPhone提供OLED显示屏,LG官方近日在一份监管文件中表示:目前尚未做出任何决定。 根据国外科技媒体于本月早些时候的报道,苹果于近期向三星旗下显示屏制造商三星Display下单了近两亿块OLED显示屏,为明年的新iPhone做储备,
[电源管理]
量子点LCD是主流?OLED表示这不能接受
三星已经开发量子点LCD显示屏,并将它作为下一代显示屏,LG的选择不同,它选择了OLED技术。两种显示屏都能提供顶尖的图像质量,三星与LG在显示屏领域针锋相对,它们都宣称自己的技术更胜一筹。作为世界最大的电视制造商,三星与LG围绕哪种技术更好的问题争论不休,OLED协会主管的言论无疑是火上浇油。 巴里·扬告诉媒体:“有人说量子点LCD的色域比OLED更广,这种言论是错误的。”他引用了显示屏专业机构DisplayMate的数据来证明自己的观点,DisplayMate曾经对三星量子点LCD和LG OLED进行过评估。巴里·扬称:“结果显示,两种显示屏的色域基本上是一样的,OLED甚至还要更广一些。” 量子点技术之所以成为一种选
[家用电子]
OLED和激光谁能占据彩电市场巨主导权?
从小屏、中小屏,到大屏,再到超大屏,如今一轮属于中国消费升级驱动下的彩电巨头新竞争已经悄然打响。站在2019年中国彩电产业发展变革的新起点上,谁又能在这场“狭路相逢勇者胜”的竞争中,占据主导权? 毋庸置疑,大尺寸电视已成市场主流。IHS Markit最新数据显示,预计到2020年,全球大尺寸电视市场规模将超过8000万台。技术竞争的突围将围绕大屏市场的引爆进入下半场。当前市场应用最广泛的OLED和激光,也将上演狭路相逢勇者胜的新战役。 2017年以来,中国彩电市场连续负增长,只有以65吋、75吋、80吋为代表的大屏电视市场还保持增长态势。相关数据显示,截止2018年第三季度,65吋电视在市场全尺寸段的销量占比达到9.8%,
[嵌入式]
三星小米签约 明年旗舰用6英寸OLED
   三星显示器和LG显示器都在为客户提供OLED屏幕,不过最近三星却获得一项重大胜利,因为小米刚刚与其签订了采购6英寸刚性AMOLED屏幕的订单,100万块预计今年12月交付,随后明年1月份再交付220万块。 小米明年旗舰用三星6英寸OLED屏   据称,起初小米是想从LG购买5.5英寸柔性OLED面板,但是该计划失败了,因为LG显示器新工厂运营延期,开启生产要比预期晚3个月。   目前小米Note 2上采用了1080p屏幕,预期在下一代小米Note 3上采用新一代的2K屏幕。另外,三星还将为iPhone 8提供数千万的AMOLED面板,明年苹果新iPhone将全部采用OLED屏。
[手机便携]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved