01 U8G2 API介绍

U8G2 API介绍

目录


1.u8g2 API爆炸图

在这里插入图片描述

2.u8g2 API

2.1 基本函数

2.1.1 u8g2_t u8g2;

u8g2_t u8g2;		// 显示结构体,重要

2.1.2 void u8g2_Setup_xx_xx_x

u8g2_Setup_st7567_jlx12864_f(u8g2, U8G2_R0, u8x8_byte_4wire_sw_spi, u8g2_gpio_and_delay); // 初始化 u8g2 结构体
初始化u8g2:
 -1个参数是u8g2指针
 -2个参数是解决,有3个选项
 	U8G2_R0	无旋转,横向
	U8G2_R1	顺时针旋转90度
	U8G2_R2	顺时针旋转180度
	U8G2_R3	顺时针旋转270度
	U8G2_MIRROR	无旋转,横向,显示镜像(v2.6.x)
 -3个参数是SPI读写回调函数
 -4个参数是gpio操作和延时函数,修改为实际使用的GPIO模拟SPI时序

2.1.3 u8g2_InitDisplay

u8g2_InitDisplay(u8g2);// 根据所选的芯片进行初始化工作,初始化完成后,显示器处于关闭状态

2.1.4 u8g2_SetPowerSave

u8g2_SetPowerSave(u8g2, 0); // 唤醒显示器,打开或关闭显示

2.1.4 u8g2_SetContrast

u8g2_SetContrast(u8g2, 100);//设置对比度

2.1.5 u8g2_ClearBuffer

u8g2_ClearBuffer(u8g2);//清除显示缓存

2.1.6 u8g2_init

上面的5个函数被封闭为了一个函数,这个是通用的。

void u8g2_init(u8g2_t *u8g2)
{
	u8g2_Setup_st7567_jlx12864_f(u8g2, U8G2_R0, u8x8_byte_4wire_sw_spi, u8g2_gpio_and_delay); // 初始化 u8g2 结构体
	u8g2_InitDisplay(u8g2);// 根据所选的芯片进行初始化工作,初始化完成后,显示器处于关闭状态
	u8g2_SetPowerSave(u8g2, 0); // 唤醒显示器
	u8g2_SetContrast(u8g2, 100);//设置对比度
	u8g2_ClearBuffer(u8g2);//清除显示缓存
}

2.1.7 u8g2_FirstPage

u8g2_FirstPage(&u8g2);	//此命令是(图片)循环的一部分,用于渲染显示内容。此命令必须与nextPage一起使用。

2.1.8 u8g2_NextPage

u8g2_NextPage(&u8g2);	//此命令是(图片)循环的一部分,用于渲染显示内容。此命令必须与firstPage一起使用。

2.2 常用绘制函数

2.2.1 u8g2_DrawPixel

/* 画一个点,坐标(x0,y0)
 * @param x x轴起始位置
 * @param y y轴起始位置
 */
void u8g2_DrawPixel(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y);	//画一个点
测试代码:
u8g2_FirstPage(&u8g2);
do
{
	for(x=0; x<128; )
	{
		u8g2_DrawPixel(&u8g2, x, 31);
		x+=2;
	}
} while (u8g2_NextPage(&u8g2)); 

显示效果:
在这里插入图片描述

2.2.2 u8g2_DrawLine

/* 画一个条线,开始坐标(x0,y0),终点坐标(x1,y1)
 * @param x0 x轴起始位置
 * @param y0 y轴起始位置
 * @param x1 x轴终点位置
 * @param y1 y轴终点位置
 */
void u8g2_DrawLine(u8g2_t *u8g2, u8g2_uint_t x0, u8g2_uint_t y0, u8g2_uint_t x1, u8g2_uint_t y1);
测试代码:
u8g2_FirstPage(&u8g2);
do
{
	u8g2_DrawLine(&u8g2, 0, 31, 127, 31);
	u8g2_DrawLine(&u8g2, 0, 0, 127, 63);
} while (u8g2_NextPage(&u8g2)); 

显示效果(可以看到画斜线的效果并不好):
在这里插入图片描述

2.2.3 u8g2_DrawHLine和u8g2_DrawVLine

/* 画一个条横线,开始坐标(x,y),宽度w
 * @param x x轴起始位置
 * @param y y轴起始位置
 * @param w 线的宽度
 */
void u8g2_DrawHLine(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t w);

/* u8g2_DrawVLine,画一条垂直线,高度是h
 * @param x x轴起始位置
 * @param y y轴起始位置
 * @param h 线的高度
 */
void u8g2_DrawVLine(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t h);

2.2.4 u8g2_DrawBox

/* 绘制一个方框,开始坐标(x,y),宽度w,调试h
 * @param x x轴起始位置
 * @param y y轴起始位置
 * @param w 宽度
 * @param h 高度
 */
void u8g2_DrawBox(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t w, u8g2_uint_t h);
测试代码:
u8g2_FirstPage(&u8g2);
do
{
	u8g2_DrawBox(&u8g2, 0, 47, 29, 16);
	u8g2_DrawBox(&u8g2, 29+4, 47, 29, 16);
	u8g2_DrawBox(&u8g2, 29*2+4*2, 47, 29, 16);
	u8g2_DrawBox(&u8g2, 29*3+4*3, 47, 29, 16);
} while (u8g2_NextPage(&u8g2)); 

显示效果(代码画了4个矩形,间隔是4个像素,宽度29,调试16):
在这里插入图片描述

2.2.5 u8g2_DrawButtonUTF8

/* 绘制一个文本框
 * @param x x轴起始位置
 * @param y y轴起始位置
 * @param flags 选项,可以设置文本框的样式
 * 	- U8G2_BTN_BW0:文本周围没有边框
 * 	- U8G2_BTN_BW1:文本周围有1px边框
 *	- U8G2_BTN_BW2:文本周围有2px边框
 *	- U8G2_BTN_BW3:文本周围有3px边框
 *	- U8G2_BTN_SHADOW0
 *	- U8G2_BTN_SHADOW1
 *	- U8G2_BTN_SHADOW2
 *	- U8G2_BTN_INV:文字反转显示
 *	- U8G2_BTN_HCENTER
 *	- U8G2_BTN_XFRAME:在文字外框周围再加一层外框
 * @param width 文本的最小宽度。一般设置为0,表示文本宽度适用于框架
 * @param padding_h 文字与框之间前后的间隔
 * @param padding_v 文字与框之间上下的间隔
 * @param text:要显示的文字
 */
void u8g2_DrawButtonUTF8(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t flags, u8g2_uint_t width, u8g2_uint_t padding_h, u8g2_uint_t padding_v, const char *text);
测试代码:
u8g2_FirstPage(&u8g2);
do
{
	u8g2_SetFont(&u8g2, u8g2_font_amstrad_cpc_extended_8r);
	u8g2_DrawButtonUTF8(&u8g2, 5, 20, U8G2_BTN_BW1, 0, 1, 1, "Btn1");
	u8g2_DrawButtonUTF8(&u8g2, 5, 40, U8G2_BTN_BW1|U8G2_BTN_XFRAME, 0, 1, 1, "Btn2");
	u8g2_DrawButtonUTF8(&u8g2, 5, 60, U8G2_BTN_BW1|U8G2_BTN_XFRAME|U8G2_BTN_INV, 0, 1, 1, "Btn3");
} while (u8g2_NextPage(&u8g2)); 

显示效果:
在这里插入图片描述

2.2.6 u8g2_DrawCircle和u8g2_DrawDisc

/* 绘制一个圆
 * @param x0 圆心的x坐标
 * @param y0 圆心的y坐标
 * @param rad 圆的半径,圆的直径是2*rad+1
 * @param h 样式选项
 * 	- U8G2_DRAW_UPPER_RIGHT:只画圆的右上部分
 *  - U8G2_DRAW_UPPER_LEFT:只画圆的左上部分
 * 	- U8G2_DRAW_LOWER_LEFT:只画圆的左下部分
 *  - U8G2_DRAW_LOWER_RIGHT:只画圆的右下部分
 * 	- U8G2_DRAW_ALL:画一个完整的圆
 */
void u8g2_DrawCircle(u8g2_t *u8g2, u8g2_uint_t x0, u8g2_uint_t y0, u8g2_uint_t rad, uint8_t opt);

/* 绘制一个实心圆,参数和u8g2_DrawCircle一样
 */
void u8g2_DrawDisc(u8g2_t *u8g2, u8g2_uint_t x0, u8g2_uint_t y0, u8g2_uint_t rad, uint8_t opt);
测试代码:
u8g2_FirstPage(&u8g2);
do
{
	u8g2_DrawCircle(&u8g2, 20, 20, 20, U8G2_DRAW_ALL);
	u8g2_DrawCircle(&u8g2, 60, 20, 20, U8G2_DRAW_UPPER_RIGHT|U8G2_DRAW_LOWER_LEFT);
} while (u8g2_NextPage(&u8g2)); 

显示效果:
在这里插入图片描述

2.2.7 u8g2_DrawEllipse和u8g2_DrawFilledEllipse

/* 绘制一个椭圆
 * @param x0 圆心的x坐标
 * @param y0 圆心的y坐标
 * @param rx 椭圆x轴方向的大小
 * @param ry 椭圆y轴方向的大小
 * @param h 样式选项
 * 	- U8G2_DRAW_UPPER_RIGHT:只画圆的右上部分
 *  - U8G2_DRAW_UPPER_LEFT:只画圆的左上部分
 * 	- U8G2_DRAW_LOWER_LEFT:只画圆的左下部分
 *  - U8G2_DRAW_LOWER_RIGHT:只画圆的右下部分
 * 	- U8G2_DRAW_ALL:画一个完整的圆
 */
void u8g2_DrawEllipse(u8g2_t *u8g2, u8g2_uint_t x0, u8g2_uint_t y0, u8g2_uint_t rx, u8g2_uint_t ry, uint8_t opt);

/* 绘制一个填充的椭圆,参数和u8g2_DrawEllipse一样
 */
void u8g2_DrawFilledEllipse(u8g2_t *u8g2, u8g2_uint_t x0, u8g2_uint_t y0, u8g2_uint_t rx, u8g2_uint_t ry, uint8_t opt);
测试代码
u8g2_FirstPage(&u8g2);
do
{
	u8g2_DrawEllipse(&u8g2, 20, 20, 5, 10, U8G2_DRAW_ALL);
	u8g2_DrawEllipse(&u8g2, 60, 20, 5, 10, U8G2_DRAW_UPPER_RIGHT|U8G2_DRAW_LOWER_LEFT);
} while (u8g2_NextPage(&u8g2));

显示效果:
在这里插入图片描述

2.2.8 u8g2_DrawFrame

/* 绘制一个矩形框
 * @param x 开始坐标x
 * @param y 开始坐标y
 * @param w 矩形的宽度
 * @param h 矩形的高度
 */
void u8g2_DrawFrame(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t w, u8g2_uint_t h);
测试代码:
u8g2_FirstPage(&u8g2);
do
{
	u8g2_DrawFrame(&u8g2, 0, 47, 29, 16);
	u8g2_DrawFrame(&u8g2, 29+4, 47, 29, 16);
	u8g2_DrawFrame(&u8g2, 29*2+4*2, 47, 29, 16);
	u8g2_DrawFrame(&u8g2, 29*3+4*3, 47, 29, 16);
} while (u8g2_NextPage(&u8g2)); 

显示效果:
在这里插入图片描述

2.2.9 u8g2_DrawGlyph和u8g2_DrawGlyphX2

/* 绘制单个字符
 * @param x 字符坐标x
 * @param y 字符坐标y
 * @param encoding 字符编号,这个与制作的字符有关
 */
u8g2_uint_t u8g2_DrawGlyph(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, uint16_t encoding);
/* 显示的字符放大一倍
 */
u8g2_uint_t u8g2_DrawGlyphX2(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, uint16_t encoding);
u8g2_FirstPage(&u8g2);
do
{
	u8g2_SetFont(&u8g2, u8g2_font_open_iconic_embedded_6x_t);
	u8g2_DrawGlyph(&u8g2, 5, 60, 65);
	u8g2_DrawGlyph(&u8g2, 55, 60, 67);
} while (u8g2_NextPage(&u8g2)); 

显示效果:
在这里插入图片描述

2.2.10 u8g2_DrawRBox和u8g2_DrawRFrame

/* 绘制圆角实心框
 * @param x 起始坐标x
 * @param y 起始坐标y
 * @param w 宽度
 * @param h 高度
 * @param r 圆角半径
 */
void u8g2_DrawRBox(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t w, u8g2_uint_t h, u8g2_uint_t r);

/* 绘制圆角框(空心),参数和u8g2_DrawRBox一样
 */
void u8g2_DrawRFrame(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t w, u8g2_uint_t h, u8g2_uint_t r);
测试代码:
u8g2_FirstPage(&u8g2);
do
{
	u8g2_DrawRBox(&u8g2, 10, 15, 30, 22, 7);
	u8g2_DrawRFrame(&u8g2, 50, 15, 30, 22, 7);
} while (u8g2_NextPage(&u8g2));

显示效果:
在这里插入图片描述

2.2.11 u8g2_DrawStr和u8g2_DrawStrX2

/* 写一个字符串,不支持中文
 * @param x 起始坐标x
 * @param y 起始坐标y
 * @param s 要显示的字符串
 */
u8g2_uint_t u8g2_DrawStr(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, const char *s);

/* 放大一倍显示,参数和u8g2_DrawStr一样
 */
u8g2_uint_t u8g2_DrawStrX2(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, const char *s);
测试代码:
u8g2_FirstPage(&u8g2);
do
{
	u8g2_SetFont(&u8g2, u8g2_font_amstrad_cpc_extended_8r);
	u8g2_DrawStr(&u8g2, 0,15,"Hello World!");
	u8g2_DrawStrX2(&u8g2, 0,45,"Hello World!");
} while (u8g2_NextPage(&u8g2)); 

显示效果:
在这里插入图片描述

2.2.12 u8g2_DrawUTF8和u8g2_DrawUTF8X2

/* 写一个字符串,支持中文
 * @param x 起始坐标x
 * @param y 起始坐标y
 * @param s 要显示的字符串
 */
u8g2_uint_t u8g2_DrawUTF8(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, const char *s);

/* 放大一倍显示,参数和u8g2_DrawUTF8一样
 */
u8g2_uint_t u8g2_DrawUTF8X2(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, const char *s);

2.2.13 u8g2_DrawTriangle

/* 绘制一个三角形,带填充
 * @param x0,y0 三角形一个顶点的坐
 * @param x1,y1 三角形第二个顶点的坐
 * @param x2,y2 三角形第三个顶点的坐
 */
void u8g2_DrawTriangle(u8g2_t *u8g2, int16_t x0, int16_t y0, int16_t x1, int16_t y1, int16_t x2, int16_t y2);
测试代码:
u8g2_FirstPage(&u8g2);
do
{
	u8g2_DrawTriangle(&u8g2, 20,5, 27,50, 5,32);
} while (u8g2_NextPage(&u8g2)); 

显示效果:
在这里插入图片描述

2.2.14 u8g2_DrawXBM和u8g2_DrawXBMP

/* 加载一个位图
 * @param x0,y0 起始坐标
 * @param x1,y1 位图的宽度
 * @param x2,y2 位图的高度
 */
void u8g2_DrawXBM(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t w, u8g2_uint_t h, const uint8_t *bitmap);

/* 实际使用和u8g2_DrawXBM一样,官网说是bitmap参数不一样,但是没有发现差别
 */
void u8g2_DrawXBMP(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t w, u8g2_uint_t h, const uint8_t *bitmap);
测试代码:
const uint8_t save[]=
{
0xFF,0xFF,0xFF,0xFF,0x01,0x00,0x00,0x80,0xF1,0xFF,0xFF,0x8F,0xF9,0xFF,0xFF,0x9F,0xFD,0xFF,0xFF,0xBF,0x1D,0x07,0xC0,0xB8,0x1D,0x07,0xC4,0xB8,0x1D,0x07,0xCE,0xB8,
0x1D,0x07,0xCE,0xB8,0x1D,0x07,0xCE,0xB8,0x1D,0x07,0xCE,0xB8,0x1D,0x07,0xCE,0xB8,0x1D,0x07,0xCE,0xB8,0x1D,0x07,0xC4,0xB8,0x1D,0x07,0xC0,0xB8,0x1D,0xFF,0xFF,0xB8,
0x1D,0xFE,0x7F,0xB8,0x1D,0xFC,0x3F,0xB8,0x1D,0x00,0x00,0xB8,0x1D,0x00,0x00,0xB8,0x1D,0x00,0x00,0xB8,0x1D,0x00,0x00,0xB8,0x1D,0x00,0x00,0xB8,0x1D,0x00,0x00,0xB8,
0x1D,0x00,0x00,0xB8,0x1D,0x00,0x00,0xB8,0x1D,0x00,0x00,0xB8,0xFD,0xFF,0xFF,0xBF,0xF9,0xFF,0xFF,0x9F,0xF1,0xFF,0xFF,0x8F,0x01,0x00,0x00,0x80,0xFF,0xFF,0xFF,0xFF,/*C:\Users\escene\Desktop\保存.bmp*/0
/* (32 X 32 )*/
};

const uint8_t recall[]=
{
0xFF,0xFF,0xFF,0xFF,0x01,0x00,0x00,0x80,0x01,0x02,0x00,0x80,0x01,0x03,0x00,0x80,0x81,0x03,0x00,0x80,0xC1,0x03,0x00,0x80,0xE1,0x03,0x00,0x80,0xF1,0x03,0x00,0x80,
0xF9,0xFF,0xFF,0x81,0xFD,0xFF,0xFF,0x83,0xFD,0xFF,0xFF,0x87,0xF9,0xFF,0xFF,0x8F,0xF1,0x03,0x80,0x9F,0xE1,0x03,0x00,0xBE,0xC1,0x03,0x00,0xBC,0x81,0x03,0x00,0xBC,
0x01,0x03,0x00,0xB8,0x01,0x02,0x00,0xB8,0x01,0x00,0x00,0xB8,0x01,0x00,0x00,0xB8,0x01,0x00,0x00,0xB8,0x01,0x00,0x00,0xB8,0x01,0x00,0x00,0xBC,0x01,0x00,0x00,0xBC,
0x01,0x00,0x00,0xBE,0x01,0x00,0x00,0x9F,0x01,0x00,0x80,0x9F,0xF9,0xFF,0xFF,0x8F,0xF9,0xFF,0xFF,0x87,0xF9,0xFF,0xFF,0x81,0x01,0x00,0x00,0x80,0xFF,0xFF,0xFF,0xFF,/*C:\Users\escene\Desktop\撤回.bmp*/0
/* (32 X 32 )*/
};

const uint8_t share[]=
{
0xFF,0xFF,0xFF,0xFF,0x01,0x00,0x00,0x80,0x01,0x00,0x00,0x80,0xF9,0xFF,0xC3,0x80,0xFD,0xFF,0x83,0x83,0xFD,0xFF,0x01,0x8F,0x1D,0x00,0x00,0x9E,0x1D,0x00,0xF0,0xBF,
0x1D,0x00,0xFC,0xBF,0x1D,0x00,0xFE,0xBF,0x1D,0x80,0x1F,0x9E,0x1D,0xC0,0x07,0x8F,0x1D,0xC0,0x83,0x83,0x1D,0xE0,0xC1,0x80,0x1D,0xE0,0x00,0x80,0x1D,0xF0,0x00,0x98,
0x1D,0x70,0x00,0x9C,0x1D,0x70,0x00,0x9C,0x1D,0x70,0x00,0x9C,0x1D,0x70,0x00,0x9C,0x1D,0x70,0x00,0x9C,0x1D,0x30,0x00,0x9C,0x1D,0x00,0x00,0x9C,0x1D,0x00,0x00,0x9C,
0x1D,0x00,0x00,0x9C,0x1D,0x00,0x00,0x9C,0x1D,0x00,0x00,0x9C,0xFD,0xFF,0xFF,0x9F,0xFD,0xFF,0xFF,0x9F,0xF9,0xFF,0xFF,0x8F,0x01,0x00,0x00,0x80,0xFF,0xFF,0xFF,0xFF,/*C:\Users\escene\Desktop\bmap\分享\分享.bmp*/0
/* (32 X 32 )*/
};

const uint8_t txt[]=
{
0xFF,0xFF,0xFF,0xFF,0x01,0x00,0x00,0x80,0x01,0xFF,0x1F,0x80,0x81,0xFF,0x3F,0x80,0x81,0x01,0x70,0x80,0x81,0x01,0xF0,0x80,0x81,0x01,0xB0,0x81,0x81,0x01,0x30,0x83,
0x81,0x01,0x30,0x86,0xF1,0xFF,0x33,0x8C,0xF9,0xFF,0xF7,0x8F,0x19,0x00,0xF6,0x8F,0x99,0x7F,0x06,0x8C,0x99,0x7F,0x06,0x8C,0x19,0x0C,0x06,0x8C,0x19,0x0C,0x06,0x8C,
0x19,0x0C,0x06,0x8C,0x19,0x0C,0x06,0x8C,0x19,0x0C,0x06,0x8C,0x19,0x0C,0x06,0x8C,0x19,0x0C,0x06,0x8C,0x19,0x00,0x06,0x8C,0xF9,0xFF,0x07,0x8C,0xF9,0xFF,0x07,0x8C,
0x81,0x01,0x00,0x8C,0x81,0x01,0x00,0x8C,0x81,0x01,0x00,0x8C,0x81,0x01,0x00,0x8C,0x81,0xFF,0xFF,0x8F,0x81,0xFF,0xFF,0x8F,0x01,0x00,0x00,0x80,0xFF,0xFF,0xFF,0xFF,/*C:\Users\escene\Desktop\bmap\txt文件\txt文件.bmp*/0
/* (32 X 32 )*/
};

const uint8_t copy[]=
{
0xFF,0xFF,0xFF,0xFF,0x01,0x00,0x00,0x80,0x01,0xFE,0x7F,0x80,0x01,0xFF,0xFF,0x80,0x01,0x03,0xCC,0x81,0xF1,0x03,0x8C,0x83,0xF9,0x03,0x0C,0x87,0x19,0x03,0x0C,0x8E,
0x19,0x03,0x0C,0x9C,0x19,0x03,0x0C,0x9C,0x19,0x03,0xFC,0x9F,0x19,0x03,0xF8,0x9F,0x19,0x03,0x00,0x98,0x19,0x03,0x00,0x98,0x19,0x03,0x00,0x98,0x19,0x03,0x00,0x98,
0x19,0x03,0x00,0x98,0x19,0x03,0x00,0x98,0x19,0x03,0x00,0x98,0x19,0x03,0x00,0x98,0x19,0x03,0x00,0x98,0x19,0x03,0x00,0x98,0x19,0x03,0x00,0x98,0x19,0x03,0x00,0x98,
0x19,0xFF,0xFF,0x9F,0x19,0xFE,0xFF,0x8F,0x19,0x00,0x00,0x86,0x19,0x00,0x00,0x86,0xF9,0xFF,0xFF,0x87,0xF1,0xFF,0xFF,0x87,0x01,0x00,0x00,0x80,0xFF,0xFF,0xFF,0xFF,/*C:\Users\escene\Desktop\bmap\复制\复制.bmp*/0
/* (32 X 32 )*/
};

const uint8_t previous[]=
{
0xFF,0xFF,0xFF,0xFF,0x01,0x00,0x00,0x80,0x01,0x00,0x00,0x80,0x01,0x00,0x00,0x80,0x01,0x00,0x00,0x80,0xE1,0x03,0x00,0x80,0xE1,0x03,0x00,0x86,0xE1,0x03,0x00,0x87,
0xE1,0x03,0xC0,0x87,0xE1,0x03,0xE0,0x87,0xE1,0x03,0xF0,0x87,0xE1,0x03,0xFC,0x87,0xE1,0x03,0xFE,0x87,0xE1,0x83,0xFF,0x87,0xE1,0xC3,0xFF,0x87,0xE1,0xE3,0xFF,0x87,
0xE1,0xF3,0xFF,0x87,0xE1,0xF3,0xFF,0x87,0xE1,0xE3,0xFF,0x87,0xE1,0x83,0xFF,0x87,0xE1,0x03,0xFF,0x87,0xE1,0x03,0xFC,0x87,0xE1,0x03,0xF8,0x87,0xE1,0x03,0xE0,0x87,
0xE1,0x03,0xC0,0x87,0xE1,0x03,0x00,0x87,0xE1,0x03,0x00,0x86,0xE1,0x03,0x00,0x80,0x01,0x00,0x00,0x80,0x01,0x00,0x00,0x80,0x01,0x00,0x00,0x80,0xFF,0xFF,0xFF,0xFF,/*C:\Users\escene\Desktop\bmap\上一个\上一个.bmp*/0
/* (32 X 32 )*/
};

const uint8_t start[]=
{
0xFF,0xFF,0xFF,0xFF,0x01,0x00,0x00,0x80,0x01,0x00,0x00,0x80,0x01,0x00,0x00,0x80,0x01,0x00,0x00,0x80,0x01,0x00,0x00,0x80,0x01,0x00,0x00,0x80,0x01,0x00,0x00,0x80,
0x01,0x00,0x00,0x80,0x01,0x3E,0x7C,0x80,0x01,0x3E,0x7C,0x80,0x01,0x3E,0x7C,0x80,0x01,0x3E,0x7C,0x80,0x01,0x3E,0x7C,0x80,0x01,0x3E,0x7C,0x80,0x01,0x3E,0x7C,0x80,
0x01,0x3E,0x7C,0x80,0x01,0x3E,0x7C,0x80,0x01,0x3E,0x7C,0x80,0x01,0x3E,0x7C,0x80,0x01,0x3E,0x7C,0x80,0x01,0x3E,0x7C,0x80,0x01,0x3E,0x7C,0x80,0x01,0x00,0x00,0x80,
0x01,0x00,0x00,0x80,0x01,0x00,0x00,0x80,0x01,0x00,0x00,0x80,0x01,0x00,0x00,0x80,0x01,0x00,0x00,0x80,0x01,0x00,0x00,0x80,0x01,0x00,0x00,0x80,0xFF,0xFF,0xFF,0xFF,/*C:\Users\escene\Desktop\bmap\开始\开始.bmp*/0
/* (32 X 32 )*/
};

const uint8_t singleLoop[]=
{
0xFF,0xFF,0xFF,0xFF,0x01,0x00,0x00,0x80,0x01,0x00,0x40,0x80,0x01,0x00,0xC0,0x80,0x01,0x00,0xC0,0x81,0x01,0x00,0xC0,0x83,0x01,0xFF,0xFF,0x87,0xE1,0xFF,0xFF,0x8F,
0xF1,0xFF,0xFF,0x87,0xF9,0x01,0xC0,0x83,0x3D,0x00,0xC0,0x81,0x1D,0x00,0xC0,0x80,0x1D,0x00,0x40,0x80,0x1D,0xC0,0x01,0x80,0x1D,0xE0,0x01,0x80,0x1D,0xF0,0x01,0x80,
0x1D,0xF0,0x01,0x80,0x1D,0xC0,0x01,0x80,0x1D,0xC0,0x01,0x9C,0x1D,0xC0,0x01,0x9C,0x1D,0xC0,0x01,0x9C,0x1D,0xC0,0x01,0x9C,0x1D,0xC0,0x01,0x9C,0x1D,0x00,0x00,0x9C,
0x1D,0x00,0x00,0x9C,0x39,0x00,0x00,0x8E,0xF9,0xFF,0xFF,0x8F,0xF1,0xFF,0xFF,0x87,0xC1,0xFF,0xFF,0x81,0x01,0x00,0x00,0x80,0x01,0x00,0x00,0x80,0xFF,0xFF,0xFF,0xFF,/*C:\Users\escene\Desktop\bmap\单曲循环\单曲循环.bmp*/0
/* (32 X 32 )*/
};

u8g2_FirstPage(&u8g2);
do
{
	u8g2_DrawXBM(&u8g2, 0, 0, 32, 32, save);
	u8g2_DrawXBM(&u8g2, 32, 0, 32, 32, recall);
	u8g2_DrawXBM(&u8g2, 64, 0, 32, 32, share);
	u8g2_DrawXBM(&u8g2, 96, 0, 32, 32, txt);
	
	u8g2_DrawXBMP(&u8g2, 0, 32, 32, 32, copy);
	u8g2_DrawXBMP(&u8g2, 32, 32, 32, 32, previous);
	u8g2_DrawXBMP(&u8g2, 64, 32, 32, 32, start);
	u8g2_DrawXBMP(&u8g2, 96, 32, 32, 32, singleLoop);
	
} while (u8g2_NextPage(&u8g2)); 

显示效果:
在这里插入图片描述

备注:

  • 位图的资源是在 https://www.iconfont.cn/ 这个网站下的,下载下来是PNG格式。
  • 先使用FastStoneCapture将PNG格式图片修改大小为32*32,并且保存格式为BMP。
  • 使用PCtoLCD2002工具打开BMP位图,细节进行了修改,PCtoLCD2002取模选项设置如下
    在这里插入图片描述
  • 位图没有版本仅供学习,商业使用请联系作者。

2.3 特殊功能函数(输入框、下拉列表等)

2.3.1 屏幕截图、捕获

/* 屏幕截图
 * @param out 一个带char *类型指针的回调函数
 * 将u8g2缓冲区的内容写入指定的对象(Arduino/C++)或回调函数(纯C接口)。此功能可用于实现屏幕截图/屏幕捕获功能。输出格式为XBM或PBM。
 */
void u8g2_WriteBufferPBM(u8g2_t *u8g2, void (*out)(const char *s));
void u8g2_WriteBufferXBM(u8g2_t *u8g2, void (*out)(const char *s));
void u8g2_WriteBufferPBM2(u8g2_t *u8g2, void (*out)(const char *s));
void u8g2_WriteBufferXBM2(u8g2_t *u8g2, void (*out)(const char *s));
  • 这里是裸机程序测试,后面将在linux系统中测试这几个接口

2.3.2 下拉列表

/* 绘制一个下拉列表
 * @param title 下拉列表的标题
 * @param start_pos 开始选中的位置
 * @param sl 下拉列表的内容,每个选项用\n分隔
 */
uint8_t u8g2_UserInterfaceSelectionList(u8g2_t *u8g2, const char *title, uint8_t start_pos, const char *sl);
测试代码:
const char *string_list =
        "List-1\n"
        "List-2\n"
        "List-3\n"
        "List-4";

u8g2_FirstPage(&u8g2);
do
{
	u8g2_SetFont(&u8g2, u8g2_font_amstrad_cpc_extended_8r);
	u8g2_UserInterfaceSelectionList(&u8g2, "List", 2, string_list);
} while (u8g2_NextPage(&u8g2)); 

显示效果:
在这里插入图片描述

2.3.3 信息提示

/* 绘制一个带按钮的信息提示框
 * @param title 第一行提示信息
 * @param title2 第二行提示信息
 * @param title3 第三行提示信息
 * @param buttons 按键列表,可以定义多个按钮中间以\n分隔
 */
uint8_t u8g2_UserInterfaceMessage(u8g2_t *u8g2, const char *title1, const char *title2, const char *title3, const char *buttons);
测试代码:
u8g2_FirstPage(&u8g2);
do
{
	u8g2_SetFont(&u8g2, u8g2_font_amstrad_cpc_extended_8r);
	u8g2_SetFontRefHeightAll(&u8g2); 
	u8g2_UserInterfaceMessage(&u8g2, "Title1", "Title2", "Title3", "success\nfailure");
	
} while (u8g2_NextPage(&u8g2));

显示效果:
在这里插入图片描述

2.3.4 用户输入信息显示

/* 绘制一个带按钮的信息提示框
 * @param title 提示信息
 * @param pre 值之前的文本
 * @param value 显示的值
 * @param lo 最小值,可由用户选择。
 * @param hi 最大值,可由用户选择。
 * @param digits 位数(1到3)。
 * @param post 值后面的文本。
 */
uint8_t u8g2_UserInterfaceInputValue(u8g2_t *u8g2, const char *title, const char *pre, uint8_t *value, uint8_t lo, uint8_t hi, uint8_t digits, const char *post);
测试代码:
uint8_t v = 12;
u8g2_FirstPage(&u8g2);
do
{
	u8g2_SetFont(&u8g2, u8g2_font_amstrad_cpc_extended_8r);
	u8g2_SetFontRefHeightAll(&u8g2);
	u8g2_UserInterfaceInputValue(&u8g2, "Select Voltage", "DAC= ", &v, 0, 100, 2, " V");
} while (u8g2_NextPage(&u8g2)); 

显示效果:
在这里插入图片描述

2.3.5 setMaxClipWindow和u8g2_SetClipWindow

/* 删除setClipWindow的效果。图形被写入完整的显示器
 */
void u8g2_SetMaxClipWindow(u8g2_t *u8g2);

/* 图形写入限制区域的显示器
 * @param x0 可见区域的左边缘
 * @param y0 可见区域的上边缘
 * @param x1 可见区域的右边缘+1
 * @param y1 可见区域的下边缘+1
 */
void u8g2_SetClipWindow(u8g2_t *u8g2, u8g2_uint_t x0, u8g2_uint_t y0, u8g2_uint_t x1, u8g2_uint_t y1 );

2.3.6 更改字形和字符串绘制函数的参考位置

/* 设置字符串显示参考位置
 */
void u8g2_SetFontPosBaseline(u8g2_t *u8g2);
void u8g2_SetFontPosBottom(u8g2_t *u8g2);
void u8g2_SetFontPosTop(u8g2_t *u8g2);
void u8g2_SetFontPosCenter(u8g2_t *u8g2);
``

### 2.3.7 u8g2_SetFontMode和u8g2_SetDrawColor
```c
/* 设置字体模式,0纯色模式,1为透明模式
 */
void u8g2_SetFontMode(u8g2_t *u8g2, uint8_t is_transparent);
/* 设置颜色索引,0,1,2
 */
void u8g2_SetDrawColor(u8g2_t *u8g2, uint8_t color);
测试代码:
u8g2_FirstPage(&u8g2);
do
{
	u8g2_SetFont(&u8g2, u8g2_font_amstrad_cpc_extended_8r); 
	/* write background pattern, then: */
	u8g2_SetFontMode(&u8g2, 0);
	u8g2_SetDrawColor(&u8g2, 1);
	u8g2_DrawStr(&u8g2, 3, 15, "Color=1, Mode 0");

	u8g2_SetDrawColor(&u8g2, 0);
	u8g2_DrawStr(&u8g2, 3, 30, "Color=0, Mode 0");

	u8g2_SetFontMode(&u8g2, 1);
	u8g2_SetDrawColor(&u8g2, 1);
	u8g2_DrawStr(&u8g2, 3, 45, "Color=1, Mode 1");

	u8g2_SetDrawColor(&u8g2, 0);
	u8g2_DrawStr(&u8g2, 3, 60, "Color=0, Mode 1");
} while (u8g2_NextPage(&u8g2)); 

显示效果:
在这里插入图片描述
说明:u8g2_SetFontMode一般设置参数为0,不设置透明。

2.3.8 u8g2_SetFontDirection

/* 设置字体显示方向,角度
 * @param dir 方向枚举
 * 		* 0		0度		Left to right
 * 		* 1		90度	Top to down
 * 		* 2 	180度	Right to left
 * 		* 3		270度	Down to top
 */
void u8g2_SetFontDirection(u8g2_t *u8g2, uint8_t dir);

2.3.9 u8g2_SetFlipMode

/* 有些显示器支持内部帧缓冲区旋转180度,需要硬件支持
 */
void u8g2_SetFlipMode(u8g2_t *u8g2, uint8_t is_enable);

2.3.10 u8g2_SetDisplayRotation

/* 设置显示旋转,在u8g2_init里面已经有设置
 */
void u8g2_SetDisplayRotation(u8g2_t *u8g2, const u8g2_cb_t *u8g2_cb);

2.3.11 u8g2_SetBitmapMode

/* 	设置背景位图是否透明
 *	@param is_transparent,0不透明,1透明
 *	
 */
void u8g2_SetBitmapMode(u8g2_t *u8g2, uint8_t is_transparent);

说明:实际测试这个函数设置不生效。

2.3.12 u8g2_GetUTF8Width和u8g2_GetStrWidth

/* 	计算字符串所占的像素
 *	@param s 被计算的字符串
 *	@return 返回字符串所占的像素宽度
 */
u8g2_uint_t u8g2_GetUTF8Width(u8g2_t *u8g2, const char *s);
/* 和上面函数一样 */
u8g2_uint_t u8g2_GetStrWidth(u8g2_t *u8g2, const char *s);

2.3.13 getMaxCharWidth和getMaxCharHeight

/*	每个字形都存储为位图。这将返回字体中最大位图的宽度
 */
u8g2_uint_t getMaxCharWidth(void);

/*	每个字形都存储为位图。这将返回字体中最大位图的高度
 */
int8_t u8g2_GetMaxCharHeight(u8g2_t *u8g2);

2.3.14 getDisplayWidth和u8g2_GetDisplayHeight

u8g2_uint_t u8g2_GetDisplayWidth(u8g2_t *u8g2);
int8_t u8g2_GetMaxCharHeight(u8g2_t *u8g2);
说明:返回值是屏幕的最大宽度和高度,我这里返回的是12864

2.3.15 u8g2_GetU8x8

/*	将u8g2_t *转换为u8x8_t *类型的指针
 */
u8x8_t *u8g2_GetU8x8(u8g2_t *u8g2);

2.3.16 u8g2_GetDescent和u8g2_GetAscent

/*	与字体有关,暂时不知道有什么用
 */
int8_t u8g2_GetDescent(u8g2_t *u8g2);
int8_t u8g2_GetAscent(u8g2_t *u8g);

2.4 不常用或者废弃的函数

2.4.1 u8g2_InitInterface

#define u8x8_gpio_Init(u8x8) ((u8x8)->gpio_and_delay_cb((u8x8), U8X8_MSG_GPIO_AND_DELAY_INIT, 0, NULL ));
#define u8x8_cad_Init(u8x8) ((u8x8)->cad_cb((u8x8), U8X8_MSG_CAD_INIT, 0, NULL ));

void u8x8_InitInterface(u8x8_t *u8x8)
{
  u8x8_gpio_Init(u8x8);
  u8x8_cad_Init(u8x8);              /* this will also call U8X8_MSG_BYTE_INIT, byte init will NOT call GPIO_INIT */
}
  • 这个函数初始化了二个回调函数,已经被 u8g2_SetupDisplay 替代,不建议使用。

2.4.2 u8g2_SendBuffer

/* same as u8g2_send_buffer but also send the DISPLAY_REFRESH message (used by SSD1606) */
void u8g2_SendBuffer(u8g2_t *u8g2)
{
  u8g2_send_buffer(u8g2);
  u8x8_RefreshDisplay( u8g2_GetU8x8(u8g2) );  
}
  • 设置缓冲区并且发送刷新显示消息,不常用,在u8g2_NextPage中已经有相同的调用。

2.4.3 u8g2_SetI2CAddress

/* 对于使用I2C协议通信的显示设置,设置显示设备的地址
 */
void u8g2_SetI2CAddress(u8g2_t *u8g2, uint8_t adr);

2.4.4 u8g2_SetFontRefHeightAll和u8g2_SetFontRefHeightExtendedText和u8g2_SetFontRefHeightText

/* 与字体有关,暂时不知道用法
 */
void u8g2_SetFontRefHeightAll(u8g2_t *u8g2);
void u8g2_SetFontRefHeightExtendedText(u8g2_t *u8g2);
void u8g2_SetFontRefHeightText(u8g2_t *u8g2);

2.4.5 u8g2_SendF

/* 直接控制显示器的函数,不常用
 */
void u8g2_SendF(u8g2_t * u8g2, const char *fmt, ...);

2.4.6 u8g2_SetAutoPageClear

/*	像素缓冲区清除函数,不常用
 */
uint8_t u8g2_SetAutoPageClear(u8g2_t *u8g2, uint8_t mode);

3. 说明

  • u8g2 api的版本是V2.29.11
  • 21
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值