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度
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°↓
多谢总结 这个库很好用,上次我用51单片机的时候没有库,自己写的要死要活{:5_149:} 吹口琴的钢铁侠 发表于 2015-12-17 18:48
这个库很好用,上次我用51单片机的时候没有库,自己写的要死要活
这个库确实不错 求助:u8gilb能显示中文吗?谢谢
页:
[1]