20525| 4
|
[进阶] Arduino最常用显示屏驱动u8glib常用函数 |
u8glib是现在Arduino上各类显示屏使用的最多的库之一。 其针对Arduino内存小的特点,使用分时显示的方式,在占用内存较小的情况下就可驱动比较大的屏幕。其函数设置合理,普通使用完全够用,用来开发GUI也未尝不可。 但由于其介绍放在谷歌网站上,由于众所周知的原因谷歌在国内访问很不方便,所以在此为大家分享下该库中各个常用函数的名称以及功能。拿走不谢。 官方介绍为Universal Graphics Library for 8 Bit Embedded Systems。 详见https://code.google.com/p/u8glib/wiki/userreference。 其支持多种平台,Arduino,AVR,ARM。在Arduino中使用是非常方便与强大的。支持多种屏幕,比较常用的有OLED,LCD12864,LCD5110等。 其他: 若要使图像正常显示,u8glib库提供了如下的picture loop。 #include "U8glib.h" U8GLIB_SSD1306_128X64 u8g( ... ); void setup() { ... } void loop() { u8g.firstPage(); do { //display }while(u8g.nextPage()); }
1)方法定义 ARDUINO 代码 void U8GLIB::firstPage(void) 2)功能 调用此过程,标志着图像循环的开始
1)方法定义 ARDUINO 代码 uint8_t U8GLIB::nextPage(void) 2)功能 调用此过程,标志着图像循环的结束 画图:
1)方法定义 ARDUINO 代码 void U8GLIB::drawPixel(uint8_t x, uint8_t y) 2)功能 画一个点 3)参数 x:点的横坐标 y:点的纵坐标 4)例子 ARDUINO 代码 U8GLIB u8g( ... ) ... u8g.drawPixel(14, 23);
1)方法定义 ARDUINO 代码 void U8GLIB::drawLine(u8g_uint_t x1, u8g_uint_t y1, u8g_uint_t x2, u8g_uint_t y2) 2)功能 画一条线段 3)参数 x1: 线段起点 横坐标 y1: 线段起点 纵坐标 x2: 线段终点 横坐标 y2: 线段终点 纵坐标 4)例子 ARDUINO 代码 u8g.drawLine(7, 10, 40, 55);
1)方法定义 ARDUINO 代码 void U8GLIB::drawHLine(u8g_uint_t x, u8g_uint_t y, u8g_uint_t w) 2)功能 画一条向右的水平线段 3)参数 x:线段起点 横坐标 y:线段起点 纵坐标 w:水平宽度(w个像素点) 4)例子 见下边的drawVLine。
1)方法定义 ARDUINO 代码 void U8GLIB::drawVLine(u8g_uint_t x, u8g_uint_t y, u8g_uint_t h) 2)功能 画一条向下的垂直线段 3)参数 x:线段起点 横坐标 y:线段起点 纵坐标 h:垂直高度(h个像素点) 4)例子 ARDUINO 代码 u8g.drawHLine(60,12, 30); u8g.drawVLine(10,20, 20);
1)方法定义 ARDUINO 代码 void U8GLIB::drawTriangle(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2) 2)功能 画一个实心的三角形。至于空心三角形用drawLine即可画出。 3)参数 x0:其中一角的 横坐标 y0:其中一角的 纵坐标 x1:另一角的 横坐标 y1:另一角的 纵坐标 x2:最后一角的 横坐标 y2:最后一角的 纵坐标 4)例子 ARDUINO 代码 u8g.drawTriangle(14,9, 45,32, 9,42); u8g.drawTriangle(14,55, 45,33, 9,43);
1)方法定义 ARDUINO 代码 void U8GLIB::drawFrame(u8g_uint_t x, u8g_uint_t y, u8g_uint_t w, u8g_uint_t h) 2)功能 画一个空心矩形 3)参数 x:方框左上角点的横坐标 y:方框左上角点的纵坐标 w:方框的宽 h:方框的高 4)例子 ARDUINO 代码 u8g.drawFrame(10, 12, 30, 20); // 方框的长宽包括了边框所在的像素点
1)方法定义 ARDUINO 代码 void U8GLIB::drawRFrame(u8g_uint_t x, u8g_uint_t y, u8g_uint_t w, u8g_uint_t h, u8g_uint_t r) 2)功能 ]画一个[color=Red圆角空心矩形 其中 最好满足:w>=2x(r+1), h>=2x(r+1)。 3)参数 x:圆角矩形左上角 横坐标 y:圆角矩形左上角 纵坐标 w:圆角矩形 宽度 h:圆角矩形 高度 r:圆角弧度的半径 4)例子 ARDUINO 代码 u8g.drawRFrame(10,12, 30,20, 5);
1)方法定义 ARDUINO 代码 void U8GLIB::drawBox(u8g_uint_t x, u8g_uint_t y, u8g_uint_t w, u8g_uint_t h) 2)功能 画一个实心矩形 3)参数 x:矩形左上角的 横坐标 y:矩形左上角的 纵坐标 w:矩形的 宽 h:矩形的 高 4)例子 ARDUINO 代码 U8GLIB u8g(...) ... u8g.drawBox(10,12,20,30);
1)方法定义 ARDUINO 代码 void U8GLIB::drawRBox(u8g_uint_t x, u8g_uint_t y, u8g_uint_t w, u8g_uint_t h, u8g_uint_t r) 2)功能 画一个圆角实心矩形,与drawTFrame类似。 3)参数 x:圆角矩形左上角 横坐标 y:圆角矩形左上角 纵坐标 w:矩形的 宽 h:矩形的 高 r:圆角弧度半径
1)方法定义 ARDUINO 代码 void U8GLIB::drawCircle(u8g_uint_t x0, u8g_uint_t y0, u8g_uint_t rad, uint8_t opt = U8G_DRAW_ALL) 2)功能 画一个空心圆 3)参数 x0:圆心 横坐标 y0:圆心 纵坐标 rad:半径 opt: U8G_DRAW_UPPER_RIGHT 上部右侧 1/4 圆弧 U8G_DRAW_UPPER_LEFT 上部左侧 1/4 圆弧 U8G_DRAW_LOWER_LEFT 下部左侧 1/4 圆弧 U8G_DRAW_LOWER_RIGHT 下部右侧 1/4 圆弧 U8G_DRAW_ALL 整圆(默认) 4)例子 ARDUINO 代码 u8g.drawCircle(20,20, 14); //整圆 u8g.drawCircle(20,20, 14, U8G_DRAW_UPPER_RIGHT); //1/4圆
1)方法定义 ARDUINO 代码 void U8GLIB::drawDisc(u8g_uint_t x0, u8g_uint_t y0, u8g_uint_t rad, uint8_t opt = U8G_DRAW_ALL) 2)功能 画一个实心圆,直径=2*rad+1 3)参数 x0:圆心 横坐标 y0:圆心 纵坐标 rad:半径 opt: U8G_DRAW_UPPER_RIGHT 上部右侧 1/4 扇形 U8G_DRAW_UPPER_LEFT 上部左侧 1/4 扇形 U8G_DRAW_LOWER_LEFT 下部左侧 1/4 扇形 U8G_DRAW_LOWER_RIGHT 下部右侧 1/4 扇形 U8G_DRAW_ALL 整圆(默认)
1)方法定义 ARDUINO 代码 void drawEllipse(u8g_uint_t x0, u8g_uint_t y0, u8g_uint_t rx, u8g_uint_t ry, uint8_t opt) 2)功能 圆一个椭圆(空心) 3)参数 x0,y0:椭圆圆心 横、纵坐标 rx:水平方向半径 ry:垂直方向半径 opt: U8G_DRAW_UPPER_RIGHT 上部右侧 1/4 椭圆弧 U8G_DRAW_UPPER_LEFT 上部左侧 1/4 椭圆弧 U8G_DRAW_LOWER_LEFT 下部左侧 1/4 椭圆弧 U8G_DRAW_LOWER_RIGHT 下部右侧 1/4 椭圆弧 U8G_DRAW_ALL 整圆(默认) 4)例子 ARDUINO 代码 //相同圆心的椭圆与圆 u8g.drawEllipse(20,20, 14,17); u8g.drawCircle(20,20, 14);
1)方法定义 ARDUINO 代码 void drawFilledEllipse(u8g_uint_t x0, u8g_uint_t y0, u8g_uint_t rx, u8g_uint_t ry, uint8_t opt) 2)功能 画一个椭圆(实心) 3)参数 x0,y0:椭圆圆心 横、纵坐标 rx:水平方向半径 ry:垂直方向半径 opt: U8G_DRAW_UPPER_RIGHT 上部右侧 1/4 椭圆 U8G_DRAW_UPPER_LEFT 上部左侧 1/4 椭圆 U8G_DRAW_LOWER_LEFT 下部左侧 1/4 椭圆 U8G_DRAW_LOWER_RIGHT 下部右侧 1/4 椭圆 U8G_DRAW_ALL 整圆(默认) 字符显示:
1)方法定义 ARDUINO 代码 u8g_uint_t U8GLIB::drawStr(u8g_uint_t x, u8g_uint_t y, const char *s) 2)功能 显示字符,使用前要使用setFont函数设置要显示字符的字体(详见七楼 设置) 另外还有 drawStr90(); drawStr180(); drawStr270(); 使字符顺时针旋转响应的角度。 3)参数 x:字符左下角的横坐标 y:字符左下角的纵坐标 *s:要显示的字符 4)例子 ARDUINO 代码 U8GLIB u8g(...) ... u8g.setFont(u8g_font_osb18); u8g.drawStr(0, 20, "ABC"); u8g.drawStr90(0,20, "ABC"); //字符旋转90度
1)方法定义 ARDUINO 代码 U8GLIB::print(...) 2)功能 打印要显示的字符,包括变量值、字符串等。 使用前需用setPrintPos()函数设置位置 图片显示:
1)方法定义 ARDUINO 代码 void U8GLIB::drawXBMP(u8g_uint_t x, u8g_uint_t y, u8g_uint_t w, u8g_uint_t h, const u8g_pgm_uint8_t *bitmap) 2)功能 此函数是一个显示一个位图的方法。 3)参数 x:位图左上角的横坐标 y:位图左上角的纵坐标 w:位图的宽 h:位图的高 *bitmap:位图对象 4)例子 ARDUINO 代码 ... static unsigned char u8g_logo_bits[] U8G_PROGMEM = { 0xff,0xff,0xff,0xff,0x3f,0xff,0xff,0xff,0xff,0x3f,0xe0,0xe0,0xff,0xff,0x3f,0xe3,0xe1,0xff,0xff,0x3f,0xf3,0xf1,0xff,0xff, 0x3f,0xf3,0xf1,0xfe,0xbf,0x37,0xf3,0x11,0x1c,0x1f, 0x30,0xf3,0x01,0x08,0x8c,0x20,0xf3,0x01,0x00,0xc0,0x39,0xf3,0x81,0xc7,0xc1, 0x39,0xf3,0xc1,0xc7,0xc9,0x38,0xf3,0xc1,0xc3,0x19,0x3c,0xe3,0x89,0x01, 0x98,0x3f,0xc7,0x18,0x00,0x08,0x3e,0x0f,0x3c,0x70,0x1c,0x30,0x3f,0xff,0xfc, 0x87,0x31,0xff,0xff,0xbf,0xc7,0x23,0x01,0x00,0x00,0xc6,0x23,0x03,0x00,0x00, 0x0e,0x30,0xff,0xff,0x3f,0x1f,0x3c,0xff,0xff,0x3f,0xff,0x3f,0xff,0xff,0x3f,0xff, 0x3f,0xff,0xff,0xff,0xff,0x3f,0xff, 0xff,0xff,0xff,0x3f }; ... u8g.drawXBMP( 0, 0, 38, 24, u8g_logo_bits);
1)方法定义 ARDUINO 代码 void U8GLIB::drawBitmapP(u8g_uint_t x, u8g_uint_t y, u8g_uint_t cnt, u8g_uint_t h, const u8g_pgm_uint8_t *bitmap) 2)功能 此函数是一个显示一个位图的方法。 3)参数 x:位图左上角的横坐标 y:位图左上角的纵坐标 cnt:在水平方向上的位图的字节数。该位图的宽度是cnt* 8(1字节=8位) h:位图的高 *bitmap:位图对象 4)例子 ARDUINO 代码 const uint8_t rook_bitmap[] U8G_PROGMEM = { 0x00, // 00000000 0x55, // 01010101 0x7f, // 01111111 0x3e, // 00111110 0x3e, // 00111110 0x3e, // 00111110 0x3e, // 00111110 0x7f // 01111111 }; ... u8g.drawBitmapP(0,0, 1, 8, rook_bitmap); 获取数据:
1)方法定义 ARDUINO 代码 u8g_uint_t U8GLIB::getHeight(void) 2)功能 获得屏幕的高度,本函数放置在picture loop里面或外部皆可 3)返回值 屏幕高度
1)方法定义 ARDUINO 代码 u8g_uint_t U8GLIB::getWidth(void) 2)功能 获得屏幕宽度,本函数放置在picture loop里面或外部皆可 3)返回值 屏幕宽度 4)例子 ARDUINO 代码 w = u8g.getWidth(); h = u8g.getHeight();
1)方法定义 ARDUINO 代码 u8g_uint_t U8GLIB::getStrWidth(const char *s) 2)功能 获得所显示字符串的宽度,即按照不同字体显示的字符串共占了多少像素。 3)返回值 字符串的宽度 4)例子 ARDUINO 代码 ... int w; ... u8g.setFont(u8g_font_osb18); //设置字体 u8g.drawStr(0,20, "ABC"); w = u8g.getStrWidth("ABC"); //获得显示的字符串宽度 u8g.drawFrame(0,10, w,11); //画一个以获得的字符串宽度为宽度的方框。 设置参数:
1)方法定义 ARDUINO 代码 U8GLIB::setFont(const u8g_fntpgm_uint8_t *font)
1)方法定义 ARDUINO 代码 void U8GLIB::setPrintPos(u8g_uint_t x, u8g_uint_t y) 2)功能 设置下文中print()的显示位置 3)参数 x:横坐标 y:纵坐标
1)方法定义 ARDUINO 代码 void U8GLIB::setColorIndex(uint8_t color_index) 2)功能 对于本文使用的单色OLED来说,此函数功能为是否显示对象。可以理解为透明还是不透明。对于有灰度值的屏幕则是一个灰度值。 3)参数 color_index:①1:表示显示,不透明②0:表示不显示,透明。 4)例子 ARDUINO 代码 U8GLIB u8g(...) ... u8g.setColorIndex(1); u8g.drawBox(10, 12, 20, 30); u8g.setColorIndex(0); u8g.drawPixel(28, 14); // clear pixel at (28, 14)
1)方法定义 ARDUINO 代码 void U8GLIB::setRot90() void U8GLIB::setRot180() void U8GLIB::setRot270() 2)功能 将显示的结果旋转90°或180°或270° 3)参数 4)例子 ARDUINO 代码 //正常 u8g.setFont(u8g_font_osb18); u8g.drawStr(0,20, "ABC"); //旋转90° u8g.setRot90(); //or setRot180(); setRot270(); u8g.setFont(u8g_font_osb18); u8g.drawStr(0,20, "ABC"); // 0° ↓ 90° ↓ |
© 2013-2025 Comsenz Inc. Powered by Discuz! X3.4 Licensed