为OLED屏增加GUI支持2:2D图形库
扫描二维码
随时随地手机看文章
环境:
主机:WIN10
开发环境:MDK5.13
MCU:STM32F103
说明:
gui库的基础是一个2D图形库,为控件提供绘图功能
此图形库还包括单色BMP图像显示函数,为图片控件提供支持
源代码:
接口函数:
gui_interface.h
/**
*Copyright(c),2015-2025
*@filegui_interface.h
*@briefgui接口头文件
*@authorjdh
*@date2015/9/6
*@update2015/9/7
*/
#ifndef_GUI_INTERFACE_H_
#define_GUI_INTERFACE_H_
/*********************************************************************
*头文件
**********************************************************************/
#include"inf_lcd.h"
/*********************************************************************
*宏定义
**********************************************************************/
/**
*@brief屏幕尺寸
*/
#defineLCD_WIDTH128
#defineLCD_HEIGHT64
/*********************************************************************
*函数
**********************************************************************/
/**
*@brief画点
*@paramx:x坐标
*@paramy:y坐标
*@paramshow:0:不显示,1:显示
*/
voidgui_interface_draw_pixel(uint8_tx,uint8_ty,uint8_tshow);
#endif
gui_interface.c
/**
*Copyright(c),2015-2025
*@filegui_interface.c
*@briefgui接口主文件
*@authorjdh
*@date2015/9/6
*/
/*********************************************************************
*头文件
**********************************************************************/
#include"gui_interface.h"
/*********************************************************************
*函数
**********************************************************************/
/**
*@brief画点
*@paramx:x坐标
*@paramy:y坐标
*@paramshow:0:不显示,1:显示
*/
voidgui_interface_draw_pixel(uint8_tx,uint8_ty,uint8_tshow)
{
if(x>=LCD_WIDTH||y>=LCD_HEIGHT)
{
return;
}
inf_lcd_draw_pixel(x,y,show);
}
2D图形库:
gui_2d_lib.h
/**
*Copyright(c),2015-2025
*@filegui_2d_lib.c
*@brief2d图形库主文件
*@authorjdh
*@date2015/9/6
*@update2015/9/7
*@update2015/11/22
*/
#ifndef_GUI_2D_LIB_H_
#define_GUI_2D_LIB_H_
/*********************************************************************
*头文件
**********************************************************************/
#include"gui_interface.h"
/*********************************************************************
*函数
**********************************************************************/
/**
*@brief绘制水平线条
*@paramy:y位置
*@paramx0:x起始位置
*@paramx1:x结束位置
*/
voidgui_draw_hline(uint16_ty,uint16_tx0,uint16_tx1);
/**
*@brief绘制垂直线条
*@paramx:x位置
*@paramy0:y起始位置
*@paramy1:y结束位置
*/
voidgui_draw_vline(uint16_tx,uint16_ty0,uint16_ty1);
/**
*@brief绘制线条
*@paramx0:x起始位置
*@paramy0:y起始位置
*@paramx1:x结束位置
*@paramy2:y结束位置
*/
voidgui_draw_line(uint16_tx0,uint16_ty0,uint16_tx1,uint16_ty1);
/**
*@brief绘制矩形
*@paramx0:左上角x坐标
*@paramy0:左上角y坐标
*@paramx1:右上角x坐标
*@paramy2:右上角y坐标
*/
voidgui_draw_rect(uint16_tx0,uint16_ty0,uint16_tx1,uint16_ty1);
/**
*@brief填充矩形
*@paramx0:左上角x坐标
*@paramy0:左上角y坐标
*@paramx1:右上角x坐标
*@paramy2:右上角y坐标
*@paramshow:0:不显示,1:显示
*/
voidgui_fill_rect(uint16_tx0,uint16_ty0,uint16_tx1,uint16_ty1,uint8_tshow);
/**
*@brief在指定位置显示图片
*@paramx:x坐标
*@paramy:y坐标
*@parambmp:图片
*/
voidgui_draw_bitmap(uint16_tx,uint16_ty,constuint8_t*bmp);
#endif
gui_2d_lib.c
[cpp]view plaincopy
/**
*Copyright(c),2015-2025
*@filegui_2d_lib.c
*@brief2d图形库主文件
*@authorjdh
*@date2015/9/6
*@update2015/9/7
*@update2015/11/22
*/
/*********************************************************************
*头文件
**********************************************************************/
#include"gui_2d_lib.h"
#include"string.h"
/*********************************************************************
*数据结构
**********************************************************************/
#pragmapack(1)
/**
*@brief文件头
*/
struct_Bmp_File_Header
{
//文件标志
uint16_ttype;
//文件大小
uint32_tsize;
//保留
uint16_treserved1;
//保留
uint16_treserved2;
//位图偏移量
uint32_toffbits;
};
/**
*@bri信息头
*/
struct_Bmp_Info_Header
{
//信息头大小
uint32_tsize;
//位图宽度
uint32_twidth;
//位图高度
uint32_theight;
//位图的位面数
uint16_tplanes;
//每个像素点所需的数据位数(24)
uint16_toffbits;
//压缩算法
uint32_tcompression;
//位图数据字节数
u