玩转u8g2 OLED库,一篇就够 |
您所在的位置:网站首页 › oled有条竖线 › 玩转u8g2 OLED库,一篇就够 |
STM32中U8g2图形库的使用
1 前言1.1 U8g2库百度脑图
2 U8g2库函数详解2.1 基本函数(干货从这里开始)2.1.1 u8g2_t u8g2;2.1.2 u8g2Init(u8g2_t *u8g2)2.1.3 u8g2_InitDisplay(u8g2)2.1.4 u8g2_SetPowerSave(u8g2, is_enable);2.1.5 u8g2_ClearDisplay(u8g2_t *u8g2)2.1.6 u8g2_ClearBuffer(u8g2_t *u8g2) —— 清除缓冲区
2.2 绘制相关函数(进阶)2.2.1 u8g2_DrawBox() —— 画实心矩形2.2.2 u8g2_DrawCircle() —— 画空心圆2.2.3 u8g2_DrawDisc() —— 画实心圆2.2.4 u8g2_DrawEllipse() —— 画空心椭圆2.2.5 u8g2_DrawFilledEllipse() —— 画实心椭圆2.2.6 u8g2_DrawFrame() —— 画空心矩形2.2.7 u8g2_DrawGlyph() —— 绘制字体字集的符号2.2.8 u8g2_DrawHLine() —— 绘制水平线2.2.9 u8g2_DrawLine() —— 两点之间绘制线2.2.10 u8g2_DrawPixel() —— 绘制像素点2.2.11 u8g2_DrawRBox() —— 绘制圆角实心方形2.2.12 u8g2_DrawRFrame() —— 绘制圆角空心方形2.2.13 u8g2_DrawStr() —— 绘制字符串2.2.14 u8g2_DrawTriangle() —— 绘制实心三角形2.2.15 u8g2_DrawUTF8() —— 绘制UTF8编码的字符2.2.16 u8g2_DrawVLine() —— 绘制竖直线2.2.17 u8g2_DrawXBM()/u8g2_DrawXBMP() —— 绘制图像2.2.18 u8g2_FirstPage()/u8g2_NextPage() —— 绘制命令2.2.19 u8g2_SendBuffer() —— 绘制缓冲区的内容
2.3 显示配置相关函数(并不是很有用,再进阶)2.3.1 u8g2_GetAscent() —— 获取基准线以上的高度2.3.2 u8g2_GetDescent() —— 获取基准线以下的高度2.3.3 u8g2_GetDisplayHeight() —— 获取显示器的高度2.3.4 u8g2_GetDisplayWidth() —— 获取显示器的宽度2.3.5 u8g2_GetMaxCharHeight() —— 获取当前字体里的最大字符的高度2.3.6 u8g2_GetMaxCharWidth() —— 获取当前字体里的最大字符的宽度2.3.7 u8g2_GetStrWidth() —— 获取字符串的像素宽度2.3.8 u8g2_GetUTF8Width() —— 获取UTF-8字符串的像素宽度2.3.9 u8g2_SetAutoPageClear() —— 设置自动清除缓冲区2.3.10 u8g2_SetBitmapMode() —— 设置位图模式2.3.11 u8g2_SetClipWindow() —— 设置采集窗口大小2.3.14 u8g2_SetDisplayRotation() —— 设置显示器的旋转角度2.3.15 u8g2_SetDrawColor() —— 设置绘制颜色(反色)2.3.16 u8g2_SetFont() —— 设置字体集2.3.17 u8g2_SetFontDirection() —— 设置字体方向
2.4 缓存相关函数(了解了解)2.4.1 u8g2_GetBufferPtr() —— 获取缓存空间的地址2.4.2 u8g2_GetBufferTileHeight() —— 获取缓冲区的Tile高度2.4.3 u8g2_GetBufferTileWidth() —— 获取缓冲区的Tile宽度2.4.4 u8g2_GetBufferCurrTileRow() —— 获取缓冲区的当前Tile row2.4.5 u8g2_SetBufferCurrTileRow() —— 设置缓冲区的当前Tile row
3.如何运用U8G2库
1 前言
OLED图形库众多,如Adafruit_GFX 和 Adafruit_SSD1306库。但是,今天要使用的是 U8g2图形库。 参考文章:深入学习Arduino u8g2 OLED库,一篇就够 参考文章:GitHub–>u8g2reference 1.1 U8g2库百度脑图
函数说明: /** * 画实心矩形,左上角坐标为(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_SetDrawColor(u8g2_t *u8g2, uint8_t color)**设置;示例: u8g2_DrawBox(&u8g2,3,7,25,15);函数说明: /** * 画空心圆,圆心坐标为(x0,y0),半径为rad * @param x0 圆点的x坐标 * @param y0 圆点的y坐标 * @param rad 圆形的半径 * @param opt 圆形选项 * U8G2_DRAW_ALL 整个圆 * U8G2_DRAW_UPPER_RIGHT 右上部分的圆弧 * U8G2_DRAW_UPPER_LEFT 左上部分的圆弧 * U8G2_DRAW_LOWER_LEFT 左下部分的圆弧 * U8G2_DRAW_LOWER_RIGHT 右下部分的圆弧 * 选项可以通过 | 操作符来组合 */ void u8g2_DrawCircle(u8g2_t *u8g2, u8g2_uint_t x0, u8g2_uint_t y0, u8g2_uint_t rad, uint8_t option) 示例: u8g2_DrawCircle(&u8g2,20,25,10,U8G2_DRAW_ALL);
函数说明: /** * 画空心椭圆,圆心坐标为(x0,y0),半径为rad * @param x0 圆点的x坐标 * @param y0 圆点的y坐标 * @param rx 椭圆形水平x方向的半径 * @param ry 椭圆形竖直y方向的半径 * @param opt 圆形选项 * U8G2_DRAW_ALL 整个椭圆 * U8G2_DRAW_UPPER_RIGHT 右上部分的圆弧 * U8G2_DRAW_UPPER_LEFT 左上部分的圆弧 * U8G2_DRAW_LOWER_LEFT 左下部分的圆弧 * U8G2_DRAW_LOWER_RIGHT 右下部分的圆弧 * 选项可以通过 | 操作符来组合 */ void u8g2_DrawEllipse(u8g2_t *u8g2, u8g2_uint_t x0, u8g2_uint_t y0, u8g2_uint_t rx, u8g2_uint_t ry, uint8_t option) rx*ry 在8位模式的u8g2必须小于512(博主也没有理解);示例: u8g2_DrawEllipse(&u8g2,20,25,15,10,U8G2_DRAW_ALL);视频 2.2.5 u8g2_DrawFilledEllipse() —— 画实心椭圆 2.2.6 u8g2_DrawFrame() —— 画空心矩形函数说明: /** * 画空心方形,左上角坐标为(x,y),宽度为w,高度为h * @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_SetDrawColor(u8g2_t *u8g2, uint8_t color)**设置;示例 u8g2_DrawFrame(&u8g2,3,7,25,15);函数说明: /** * 绘制实心三角形,定点坐标分别为(x0,y0),(x1,y1),(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_DrawTriangle(&u8g2,20,5, 27,50, 5,32);函数说明: /** * 绘制缓冲区的内容 * @Note 关联方法 clearBuffer */ void u8g2_SendBuffer(u8g2_t *u8g2) u8g2_SendBuffer的RAM占用空间大,需要结合构造器的buffer选项使用;不管是u8g2_FirstPage、u8g2_NextPage还是u8g2_SendBuffer,都涉及到一个叫做 current page position的概念;库源码解析: void u8g2_SendBuffer(u8g2_t *u8g2) { u8g2_send_buffer(u8g2); u8x8_RefreshDisplay( u8g2_GetU8x8(u8g2) ); } static void u8g2_send_tile_row(u8g2_t *u8g2, uint8_t src_tile_row, uint8_t dest_tile_row) { uint8_t *ptr; uint16_t offset; uint8_t w; w = u8g2_GetU8x8(u8g2)->display_info->tile_width; offset = src_tile_row; ptr = u8g2->tile_buf_ptr; offset *= w; offset *= 8; ptr += offset; u8x8_DrawTile(u8g2_GetU8x8(u8g2), 0, dest_tile_row, w, ptr); } /* write the buffer to the display RAM. For most displays, this will make the content visible to the user. Some displays (like the SSD1606) require a u8x8_RefreshDisplay() */ static void u8g2_send_buffer(u8g2_t *u8g2) U8X8_NOINLINE; static void u8g2_send_buffer(u8g2_t *u8g2) { uint8_t src_row; uint8_t src_max; uint8_t dest_row; uint8_t dest_max; src_row = 0; src_max = u8g2->tile_buf_height; dest_row = u8g2->tile_curr_row; dest_max = u8g2_GetU8x8(u8g2)->display_info->tile_height; do { u8g2_send_tile_row(u8g2, src_row, dest_row); src_row++; dest_row++; } while( src_row |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |