何处不江南 发表于 2015-12-16 11:47:11

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等。       一些图片https://code.google.com/p/u8glib/wiki/gallery
其他:       若要使图像正常显示,u8glib库提供了如下的picture loop。       #include "U8glib.h"       U8GLIB_SSD1306_128X64 u8g( ... );       void setup() { ... }       void loop() {         u8g.firstPage();         do {         //display         }while(u8g.nextPage());       }       详见https://code.google.com/p/u8glib/wiki/tpictureloop

[*]firstPage
   1)方法定义       ARDUINO 代码
       void U8GLIB::firstPage(void)   2)功能
       调用此过程,标志着图像循环的开始

[*]nextPage
1)方法定义       ARDUINO 代码       uint8_t U8GLIB::nextPage(void)   2)功能
       调用此过程,标志着图像循环的结束
画图:
[*]drawPixel
1)方法定义       ARDUINO 代码       void U8GLIB::drawPixel(uint8_t x, uint8_t y)   2)功能
      画一个点
   3)参数
      x:点的横坐标
      y:点的纵坐标
   4)例子       ARDUINO 代码U8GLIB u8g( ... )
...u8g.drawPixel(14, 23);


[*]drawLine
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);

[*]drawHLine
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。

[*]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);

[*]drawTriangle
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);

[*]drawFrame
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); // 方框的长宽包括了边框所在的像素点

[*]drawRFrame

   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);

[*]drawBox
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);      

[*]drawRBox
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:圆角弧度半径

[*]drawCircle

   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圆

[*]drawDisc

   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                        整圆(默认)

[*]drawEllipse

   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);


[*]drawFilledEllipse
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                        整圆(默认)
字符显示:
[*]drawStr
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度

[*]print
1)方法定义       ARDUINO 代码       U8GLIB::print(...)   2)功能
      打印要显示的字符,包括变量值、字符串等。
      使用前需用setPrintPos()函数设置位置
图片显示:
[*]drawXBMP
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);

[*]drawBitmapP
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);
获取数据:
[*]getHeight
1)方法定义       ARDUINO 代码       u8g_uint_t U8GLIB::getHeight(void)   2)功能
      获得屏幕的高度,本函数放置在picture loop里面或外部皆可
   3)返回值
      屏幕高度


[*]getWidth
1)方法定义       ARDUINO 代码       u8g_uint_t U8GLIB::getWidth(void)   2)功能
      获得屏幕宽度,本函数放置在picture loop里面或外部皆可
   3)返回值
      屏幕宽度
   4)例子       ARDUINO 代码       w = u8g.getWidth();
       h = u8g.getHeight();
[*]getStrWidth
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);//画一个以获得的字符串宽度为宽度的方框。
设置参数:
[*]setFont
1)方法定义       ARDUINO 代码       U8GLIB::setFont(const u8g_fntpgm_uint8_t *font)   2)功能
      设置要显示字符的字体。
   3)参数
      *font:字体样式。u8glib提供的字体样式https://code.google.com/p/u8glib/wiki/fontsize


[*]setPrintPos
1)方法定义       ARDUINO 代码       void U8GLIB::setPrintPos(u8g_uint_t x, u8g_uint_t y)   2)功能
      设置下文中print()的显示位置
   3)参数
      x:横坐标
      y:纵坐标


[*]setColorIndex
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)

[*]setRot90 or 180 or 270
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°↓

丄帝De咗臂 发表于 2015-12-16 17:33:31

多谢总结

吹口琴的钢铁侠 发表于 2015-12-17 18:48:15

这个库很好用,上次我用51单片机的时候没有库,自己写的要死要活{:5_149:}

何处不江南 发表于 2015-12-18 10:50:52

吹口琴的钢铁侠 发表于 2015-12-17 18:48
这个库很好用,上次我用51单片机的时候没有库,自己写的要死要活

这个库确实不错

20060606 发表于 2020-8-21 05:57:41

求助:u8gilb能显示中文吗?谢谢
页: [1]
查看完整版本: Arduino最常用显示屏驱动u8glib常用函数