20525浏览
查看: 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());
       }

  • 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);
Arduino最常用显示屏驱动u8glib常用函数图1

  • 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);
Arduino最常用显示屏驱动u8glib常用函数图2

  • 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);
Arduino最常用显示屏驱动u8glib常用函数图3

  • 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);
Arduino最常用显示屏驱动u8glib常用函数图4

  • 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); // 方框的长宽包括了边框所在的像素点
Arduino最常用显示屏驱动u8glib常用函数图5

  • 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);
Arduino最常用显示屏驱动u8glib常用函数图6

  • 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);
       Arduino最常用显示屏驱动u8glib常用函数图7

  • 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圆
Arduino最常用显示屏驱动u8glib常用函数图8
Arduino最常用显示屏驱动u8glib常用函数图9

  • 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);
Arduino最常用显示屏驱动u8glib常用函数图10

  • 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度
Arduino最常用显示屏驱动u8glib常用函数图11

  • 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);
Arduino最常用显示屏驱动u8glib常用函数图12

  • 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);
Arduino最常用显示屏驱动u8glib常用函数图13

获取数据:
  • 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();
Arduino最常用显示屏驱动u8glib常用函数图14
  • 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);  //画一个以获得的字符串宽度为宽度的方框。
Arduino最常用显示屏驱动u8glib常用函数图15

设置参数:
  • 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)
Arduino最常用显示屏驱动u8glib常用函数图16

  • 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°  ↓
Arduino最常用显示屏驱动u8glib常用函数图17

丄帝De咗臂  高级技匠

发表于 2015-12-16 17:33:31

多谢总结
回复

使用道具 举报

吹口琴的钢铁侠  初级技匠

发表于 2015-12-17 18:48:15

这个库很好用,上次我用51单片机的时候没有库,自己写的要死要活
回复

使用道具 举报

何处不江南  初级技匠
 楼主|

发表于 2015-12-18 10:50:52

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

这个库确实不错
回复

使用道具 举报

20060606  高级技匠

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

求助:u8gilb能显示中文吗?谢谢
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4 备案 沪公网安备31011502402448

© 2013-2025 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail