环境:
主机:WIN10
开发环境:MDK5.13
MCU:STM32F103
说明:
本文定义了图片控件。OLED屏是单色屏,所以本图片控件支持的是单色BMP图像。
将普通图像转换为单色图片可以用工具BmpCvt.exe。将转换后的BMP图像转换为hex文件,可以用Bin2C.exe。这两个工具都是emwin自带工具。
源代码:
转换后的hex文件再整理成如下的示例格式:
battery0.c
/**
* Copyright (c), 2015-2025
* @file battery0.c
* @brief 电池0格图标
* @author jdh
* @date 2015/11/9
* @verbatim
* 说明:
* 1.图片格式为bmp
* 2.图片大小为17*13
* @endverbatim
*/
/*********************************************************************
* 头文件
**********************************************************************/
#include "res.h"
/*********************************************************************
* 全局变量
**********************************************************************/
const unsigned char Res_Battery0_Bmp[114UL + 1] = {
0x42, 0x4D, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xFF, 0x80, 0xFF, 0x20, 0x00, 0x80, 0x04, 0xE0, 0x00, 0x80, 0x00, 0xE0, 0x00,
0x80, 0x00, 0xE0, 0x00, 0x80, 0x00, 0xE0, 0x00, 0x80, 0x00, 0xE0, 0x00, 0x80, 0x00, 0xE0, 0x00, 0x80, 0x00, 0x20, 0x00, 0x80, 0x00, 0x3F, 0xFF, 0x80, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
/*************************** End of file ****************************/
gui_widget_image.h
/**
* Copyright (c), 2015-2025
* @file gui_widget_image.h
* @brief 图片控件头文件
* @author jdh
* @date 2015/9/8
*/
#ifndef _GUI_WIDGET_IMAGE_H_
#define _GUI_WIDGET_IMAGE_H_
/*********************************************************************
* 头文件
**********************************************************************/
#include "gui_interface.h"
/*********************************************************************
* 数据结构
**********************************************************************/
/**
* @brief 图片控件数据结构
*/
typedef struct _Widget_Image
{
//x轴位置
uint16_t x;
//y轴位置
uint16_t y;
//水平尺寸
uint16_t xsize;
//垂直尺寸
uint16_t ysize;
//图片地址
const uint8_t *addr;
}*Widget_Image_Handle;
/*********************************************************************
* 函数
**********************************************************************/
/**
* @brief 创建控件text
* @param x:左上角x坐标
* @param y:左上角y坐标
* @param xsize:水平尺寸
* @param ysize:垂直尺寸
*/
Widget_Image_Handle gui_widget_image_create(uint16_t x,uint16_t y,uint16_t xsize,uint16_t ysize);
/**
* @brief 设置图片
* @param addr:图片地址
*/
void gui_widget_image_set_bmp(Widget_Image_Handle handle,const uint8_t *addr);
#endif
gui_widget_image.c
/**
* Copyright (c), 2015-2025
* @file gui_widget_image.c
* @brief 图片控件主文件
* @author jdh
* @date 2015/9/8
*/
/*********************************************************************
* 头文件
**********************************************************************/
#include "gui_widget_image.h"
#include "gui_2d_lib.h"
#include "stdlib.h"
#include "string.h"
/*********************************************************************
* 静态函数
**********************************************************************/
/**
* @brief 控件显示
* @param handle:控件句柄
*/
static void show(Widget_Image_Handle handle);
/*********************************************************************
* 函数
**********************************************************************/
/**
* @brief 创建控件text
* @param x:左上角x坐标
* @param y:左上角y坐标
* @param xsize:水平尺寸
* @param ysize:垂直尺寸
*/
Widget_Image_Handle gui_widget_image_create(uint16_t x,uint16_t y,uint16_t xsize,uint16_t ysize)
{
Widget_Image_Handle handle;
//控件初始化
handle = malloc(sizeof(*handle));
handle->x = x;
handle->y = y;
handle->xsize = xsize;
handle->ysize = ysize;
return handle;
}
/**
* @brief 设置图片
* @param addr:图片地址
*/
void gui_widget_image_set_bmp(Widget_Image_Handle handle,const uint8_t *addr)
{
handle->addr = addr;
//显示
show(handle);
}
/**
* @brief 控件显示
* @param handle:控件句柄
*/
static void show(Widget_Image_Handle handle)
{
//清除区域
gui_fill_rect(handle->x,handle->y,handle->x + handle->xsize,handle->y + handle->ysize,0);
//显示
gui_draw_bitmap(handle->x,handle->y,handle->addr);
}
测试代码:
//电池图标
static Widget_Image_Handle Widget_Image_Battery;
Widget_Image_Battery = gui_widget_image_create(106,0,17,13);
gui_widget_image_set_bmp(Widget_Image_Battery,Res_Battery0_Bmp);
上一篇:为OLED屏增加GUI支持1:OLED驱动
下一篇:为OLED屏增加GUI支持4:文本框控件
推荐阅读
史海拾趣
Allegro Microsystems, Inc.是一家专注于开发、制造和销售磁性、混合和传感器集成电路的公司。以下是关于Allegro公司发展的五个相关故事:
创立与早期发展: Allegro公司成立于1967年,最初名为RMS Electronics。该公司最初专注于生产磁性元件和感应器,以满足汽车和工业市场的需求。随着时间的推移,Allegro迅速发展,并在磁性传感器技术领域取得了重要进展。
成为行业领导者: 在20世纪90年代,Allegro开始将重点转向混合集成电路的开发,这进一步加强了公司在汽车电子和工业自动化市场的地位。Allegro通过不断创新和技术投资,逐渐成为全球领先的磁性传感器和混合集成电路制造商之一。
技术创新与专利保护: Allegro公司在磁性传感器和混合集成电路领域积累了丰富的专利技术。该公司不断进行研发和技术创新,推出了许多行业领先的产品,如电流传感器、霍尔效应传感器等。Allegro不仅积极保护自己的知识产权,还与其他公司合作,共同推动技术的进步。
全球化发展: 随着全球汽车和工业市场的不断发展,Allegro公司积极拓展国际业务,并在全球范围内建立了广泛的销售网络和生产基地。公司在美国、欧洲和亚洲设有多个研发中心和制造工厂,以满足不同地区客户的需求。
可持续发展与未来展望: Allegro公司致力于可持续发展和社会责任,采取了多项措施来减少对环境的影响,如提高能源效率、减少废物排放等。未来,Allegro将继续投入研发和创新,推出更多高性能、低功耗的产品,以满足不断增长的市场需求,并在全球范围内维持其领先地位。
随着电子市场的日益竞争,Cantherm公司面临着市场拓展的难题。为了打开新的销售渠道,公司决定加大在国际市场的宣传力度,同时积极参加各种电子行业的展会和论坛。通过与国际同行的交流与合作,Cantherm不仅提升了品牌知名度,还成功拓展了海外市场,实现了业务的多元化发展。
随着市场需求的不断变化,如韵意识到技术创新是企业持续发展的关键。因此,公司投入大量资源进行产品研发和技术升级。其中,一次重要的技术突破让如韵在行业内声名鹊起。
当时,市场上的某种电子元器件存在性能不稳定的问题,给许多电子设备制造商带来了困扰。如韵的研发团队经过深入研究,成功开发出了一种新型电子元器件,不仅性能稳定可靠,而且成本更低。这一创新产品迅速占领了市场份额,成为公司的明星产品,也为如韵带来了丰厚的经济回报。
在产品质量方面,启臣微始终坚持严格的标准和精细的工艺流程。公司建立了一套完善的质量管理体系,从原材料采购到产品出厂,每一个环节都经过严格把关。这种对品质的执着追求,让启臣微的产品在市场上赢得了良好的口碑,也为公司赢得了众多客户的信赖。
企业文化是企业的灵魂和核心竞争力之一。DDD公司一直注重企业文化的建设和发展。公司倡导“创新、协作、务实、进取”的企业精神,鼓励员工勇于创新、敢于担当、追求卓越。同时,DDD公司还注重员工培训和福利待遇的改善,为员工提供了广阔的发展空间和良好的工作环境。这种积极向上的企业文化氛围使得DDD公司成为了一个充满活力和凝聚力的团队。
APTA Group Inc深知,单打独斗在竞争激烈的电子行业中难以长久立足。因此,公司积极寻求与其他企业的战略合作。通过与知名电子产品制造商的合作,APTA得以将其技术应用于更广泛的领域,同时也借助合作伙伴的市场渠道,提高了品牌知名度和市场占有率。这种互利共赢的合作模式,为APTA的快速发展提供了有力支撑。
资料说明: 本资料从“汇编语言、单片机的基本特点”,“单片机的学习方法”,“常见的开发问题”等几个方面列出了对应的100个有针对性的问题,从各个问题的详细解答读者可以初步的了解到单片机的一些相关知识,对于想要了解与学习 ...… 查看全部问答∨ |
|
本帖最后由 paulhyde 于 2014-9-15 09:02 编辑 filter solution!很实用的!! 输入需要的截止频率,然后就会自动生成实用的滤波器的电路图~~ … 查看全部问答∨ |
|
经常设计中,我们需要对异步信号同步化设计,最简单的例子,比如,异步串口设计。 对于异步信号怎样同步化处理,推荐如下图: 简单分析: &nbs ...… 查看全部问答∨ |
#include #define uchar unsigned char #define uint unsigned int unsigned char flag,a,i; uchar b[4]; uchar code table[]=\"I get \"; void init() { TMOD=0x20; //确定T1的工作方式 &n ...… 查看全部问答∨ |
有人在虚拟机里配置好了WINCE4.2开发环境吗?说说具体怎么做 虚拟机的选择 基础OS的选择 虚拟机里面的OS PlatForm Buider 最好是4.2,不是的话说说也行。这个很重要,没有它不行啊 编程工具EVC,版本应该是4.2。选别的编程工具也行。编程工具不重要。不说也罢。… 查看全部问答∨ |
如题.在Wince6.0 RILMDD的基础上进行二次拨号功能的开发,Modem的指令为DTMF,我按照参数进行配置后,可以收到Modem的Response.<CR><LF>1.<CR><LF><CR><LF>OK<CR><LF> 拨入命令为AT%%DTMF=<CallID><CharNUM> ...… 查看全部问答∨ |