olcd12864的u8g2库_【原创】OLED屏-U8glib库 增强版 U8G2库。

本文档介绍了如何使用U8G2库,一个增强版的U8GLIB,来驱动olcd12864 OLED显示屏。内容包括连接 Arduino 和 OLED 屏的步骤,U8G2库的两种模式,以及如何设置显示屏模式、初始化和使用各种绘图函数,如drawBitmap、drawBox、drawCircle等。此外,还提供了代码示例和注意事项。
摘要由CSDN通过智能技术生成

本帖最后由 alientg 于 2017-1-10 17:01 编辑

https://github.com/olikraus/u8g2/wiki/u8g2reference#begin

自己再通过测试后才发布,采用一个更新方式(精力有限,学习为主),客官觉得不错,就打赏一下呗~

U8G2是U8GLIB的增强版,相对旧版更加好用,强大,兼容板子多。U8G2有两种模式:U8g2是增强版模式,U8X8是简便模式省内存,在setup()里必须设定模式.

函数开始前,先讲一个东西。arduino 和OLED连接的方法(示例NANO和128X64 API OLED)

a-o.jpg (152.29 KB, 下载次数: 83)

2017-1-9 15:34 上传

颜色对颜色线连接。

nano的板子上的D4567脚可以修改。不修改也行。

SCL=S&COLCK  //时钟     SDA=S&DATA //数据        RES/RST = Reset //复位       D/C = DC

API连接这4条交互线就行了,和另外供电。 那么在代码中一开始必须定义好脚: (D3号脚可以不接)

U8G2_SSD1306_128X64_NONAME_1_4W_SW_SPI u8g2(U8G2_R0,/* clock=*/4, /* data=*/ 5, /* cs=*/ 3, /* dc=*/ 6, /* reset=*/ 7);    //这个定义脚代码细心看就懂了。

//U8G2支持的OLED控制芯片:https://github.com/olikraus/u8g2/wiki/gallery

//不同芯片的不同脚定义代码:https://github.com/olikraus/u8g2/wiki/u8g2setupcpp

例子:

#include

#include

#include

U8G2_SSD1306_128X64_NONAME_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 4, /* data=*/ 5, /* cs=*/ 3, /* dc=*/ 6, /* reset=*/ 7);

void setup(void) {

u8g2.begin();   //选择U8G2模式,或者U8X8模式

}

void loop(void) {

u8g2.firstPage();

do {

u8g2.setFont(u8g2_font_ncenB14_tr);

u8g2.drawStr(0,15,"Hello World!");

} while ( u8g2.nextPage() );

delay(1000);

}复制代码U8G2_R0是一个参数:指定大局显示的基本布局:

布局描述

U8G2_R0正常显示

U8G2_R190度顺时针旋转

U8G2_R2180度顺时针旋转

U8G2_R3270度顺时针旋转

U8G2_MIRROR正常显示镜像内容(v2.6.x版本以上使用)         注意:U8G2_MIRROR需要与setFlipMode()配搭使用.

1.png (220.82 KB, 下载次数: 58)

2017-1-9 16:00 上传-------------------------------------------------屏幕基本函数-------------------------------------------

u8g2.begin( )   //开始构造U8G2, 在setup()内使用。     特别说明:初始化在Arduino的环境。 配置OLED的显示模式initDiplay或者省电模式setPowerSave,或者重置(清屏)clearDisplay。同时检测六个按钮程序(比如前进、后退、确认、上一级...)。如果没有,可以在里定义按钮事件的引脚,用GetMenuEvent函数来定义,来进入到用户想要的界面,详情就看userInterfaceMessage和GetMenuEvent函数。无返回值。

关联使用函数:initDispaly 、setPowersave、clearDisplay、

u8g2.clear()// 清除缓冲区"Buffer"内的所有像素点

关联使用函数:print、home、clearBuffer

u8g2.clearBuffer()//清除内存中的所有缓冲区内的像素,而后可以用sendBuffer函数来把缓冲区“Buffer”在屏幕上显示出来,以便清屏。因这个过程是在微处理器中RAM里的副本"Buffer"中进行,标志“F”,所以sendBuffer也就是直接操作副本“Buffer”。

关联使用函数:sendBuffer例子:

void loop(void) {

u8g2.clearBuffer();   //清除当前Buffer内的像素

// 在Buffer内一些操作

u8g2.sendBuffer();    //发送Buffer内容到屏上

delay(1000);复制代码

u8g2.clearDisplay()    //清除显示中所有像素。此过程在begin()中调用。在程序中一般用不上,也是通过sendBuffer和clearBuffer函数显示出来,一样的处理方式。关联使用函数:beginu8g2.disableUTF8Print()//禁用 UTF8字集 (万国语字库),默认是开启的。关联使用函数:print 、enableUTF8Print

u8g2.enableUTF8Print ()//启用 UTF8字集,许可UniCode向print发送字符串。这个函数通常在begin()后调用。

关联使用函数:print、disableUTF8Print

例子:

void setup(void) {

u8g2.begin();

u8g2.enableUTF8Print();       // 使print支持UTF8字集

}复制代码u8g2.Print()//在入当前光标位置用当前设置的字体,来打印出(内容)。光标位置可以用setCursor函数。字体可以用setFont函数。

关联使用函数:print(U8x8)、enableUTF8Print、setFont、setCursor、

例子:

u8g2.setFont(u8g2_font_ncenB14_tr); //设置字体

u8g2.setCursor(0, 15);    //设置光标处

u8g2.print("Hello World!");  //输出内容复制代码U8x8:一个自带字库,详情见setFont函数

-------------------------------------------------绘图显示函数-------------------------------------------

u8g2.drawBitMap()  //在指定的x / y位置(位图左上角)绘制位图.。位图的部分可能位于显示边界之外。位图由数组位图指定。清除位意味着:不绘制像素。数组内的一个置位意味着:用当前颜色索引写像素。对于单色显示器,颜色索引0通常会清除一个像素,并且颜色索引1将设置一个像素。因为复杂耗内存,此函数在U8G2中被停用!格式:u8g2.drawBitMap (x,y,cnt,h)

参数:x是水平线位置

y是垂直线位置

cnt是点阵图字节数,宽是1字节*8(这个字节数必须控制好,否则点阵图会出现扭曲)

h是点阵图高度

u8g2.drawBox()//画个实心方形格式:u8g2.drawBitMap (x,y,w,h)

参数:x是水平线起始位置

y是垂直线起始位置

w是方形的宽

h是方形的高

例子:

#include

#include

#include

U8G2_SSD1306_128X64_NONAME_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 4, /* data=*/ 5, /* cs=*/ 3, /* dc=*/ 6, /* reset=*/ 7);

void setup(void) {

u8g2.begin();

}

void loop(void) {

u8g2.firstPage();

do {

u8g2.drawBox(48,20,25,15);  //(起始X,起始Y,方形的宽W,方形的高H)

} while ( u8g2.nextPage() );

delay(1000);

}复制代码

3_副本.jpg (89.95 KB, 下载次数: 59)

2017-1-9 18:27 上传

u8g2.drawCircle()//画个空心圆,可选四个方向的半圆

类似与关联函数:drawDisc 、setDrawColor格式:u8g2.drawCircle(x, y ,rad,opt);  // X,YS是绘图起始位置(圆的中心点),rad是圆的四分之一弧度。opt是选项:

U8G2_DRAW_UPPER_RIGHT     //左上角弧度

U8G2_DRAW_UPPER_LEFT     //右上角弧度

U8G2_DRAW_LOWER_LEFT    //左下角幅度

U8G2_DRAW_LOWER_RIGHT//右下角幅度

U8G2_DRAW_ALL      //全圆例子:

void loop(void) {

u8g2.firstPage();

do {

u8g2.drawCircle(48, 30, 10, U8G2_DRAW_LOWER_LEFT);

} while ( u8g2.nextPage() );

delay(1000);

}复制代码

4_副本.jpg (94.38 KB, 下载次数: 49)

2017-1-9 18:42 上传

41.png (28.08 KB, 下载次数: 57)

2017-1-9 18:42 上传

u8g2.drawDisc()//画个实心圆,使用法跟drawCircle 一个饼样。多普达手机不好使,图片将就看。

4.png (23.5 KB, 下载次数: 56)

2017-1-9 18:48 上传

U8G2.drawEllipse()//画一个空心椭圆形,实际上,和画圆是非常相似的用法。格式:u8g2.drawEllipse(X,Y, RX, RY, OPT);

参数:X,Y是椭圆形中心坐标

RX是椭圆形水平线的RAD,RY是垂直线的RAD

opt是选项:

U8G2_DRAW_UPPER_RIGHT     //左上角弧度

U8G2_DRAW_UPPER_LEFT     //右上角弧度

U8G2_DRAW_LOWER_LEFT    //左下角幅度

U8G2_DRAW_LOWER_RIGHT//右下角幅度

U8G2_DRAW_ALL      //全圆

例子:

void loop(void) {

u8g2.firstPage();

do {

u8g2.drawEllipse(48, 30, 15, 10, U8G2_DRAW_ALL);

} while ( u8g2.nextPage() );

delay(1000);

}

55.png (86.15 KB, 下载次数: 47)

2017-1-9 21:57 上传

5.png (2.06 KB, 下载次数: 53)

2017-1-9 21:55 上传

u8g2.drawFilledEllipse()//画一个实心椭圆形,与u8g2.drawEllipse用法也是一个饼样

6.png (121.3 KB, 下载次数: 54)

2017-1-9 22:07 上传

u8g2.DrawFrame//画一个空心方框格式:

u8g2.drawFrame(X,Y,W,H);   // X,Y是方框的左上角坐标,W,H是宽和高,注意,如果方框比屏大,则多出部分不绘画,也就是说不耗内存和出现错图。

例子:

void loop(void) {

u8g2.firstPage();

do {

u8g2.drawFrame(48,30,25,15);

} while ( u8g2.nextPage() );

delay(1000);

}

77.png (110.65 KB, 下载次数: 49)

2017-1-9 22:15 上传

7.png (26.61 KB, 下载次数: 56)

2017-1-9 22:15 上传

u8g2.drawGlyph()//绘制字集里的符号,这个功能很帅。

格式:u8g2.drawGlyph(X,  Y,  字集代码);    // XY依然是坐标,字集需要先设置字体,然后参考示图选择符号输出,如下图

例子:

void loop(void) {

u8g2.firstPage();

do {

u8g2.setFont(u8g2_font_unifont_t_symbols);   //先设置字体字集

u8g2.drawGlyph(48, 40, 0x2603);                       //输出代码

} while ( u8g2.nextPage() );

delay(1000);

}

88.png (26.43 KB, 下载次数: 59)

2017-1-9 22:22 上传

8.png (47.17 KB, 下载次数: 62)

2017-1-9 22:22 上传

888.png (76.08 KB, 下载次数: 51)

2017-1-9 22:25 上传

u8g.drawLine()    //画一条平面直线

格式:u8g.drawLine(x0, y0, x1, y1);    //x0,y0是直线起始位置, x1,y1是直线终止位置。例子:

u8g.drawLine(20, 5, 5, 32);

9.png (27.05 KB, 下载次数: 60)

2017-1-10 15:55 上传

drawPixel()//画一个点,一个点的像素。

格式:drawPixel(x,y)      //x,y是画点的位置。(宽,高)

u8g2.drawRFrame()//画一个圆角空心方形

u8g2.drawRBox()//画一个圆角实心方形

特别说明:关于这两个代码,综合一下U8G2里面关于画四边形的函数:drawBox(实心),drawFrame(空心)这两个是直角四边形。然而drawRBox(实心),drawRFrame(空心)这两个带R的是圆角四边形的。Box是实心,Frame是空心,带R的都是圆角。

参数:两个函数的参数排放一样: (X起始位,Y起始位,W宽度,H高度,R圆角的半径(至少R

void loop() {

u8g2.firstPage();

do {

u8g2.drawRFrame(20,17,30,22,7);

u8g2.drawRBox(80,25,20,25,5);

} while( u8g2.nextPage());

}复制代码

a1.png (142.06 KB, 下载次数: 61)

2017-1-10 16:19 上传ps:任何一个形状如果XY初始位置放不好(至少没有位置能全部绘制出W*H),就会出现一下图。多出的图形不会绘制,也就是说不会浪费内存。

a11.png (145.02 KB, 下载次数: 54)

2017-1-10 16:25 上传

u8g2.drawStr()//绘制字符串,可以想象字符串是一串符号,它能输出什么“字符串”在屏上。取决于它的setFont被设置的字体集。

说明:一般都配搭着setFont函数使用,当然,如果不需要其它的字体集,在一开始begin()后设置,全局。字体集详情看setFont函数。一下是三个实例图。

格式:u8g2.drawStr(X, Y,  S );    //S记得加“”。

b1.png (204.69 KB, 下载次数: 63)

2017-1-10 16:48 上传特别注意,它的初始点XY是在左下角:

cc.png (26.82 KB, 下载次数: 62)

2017-1-10 16:53 上传

u8g.drawTriangle() //绘制实体三角形

格式:u8g.drawTriangle(X0,Y0, X1,Y1, X2,Y2);

X0,Y0 :第一个角位置

X1,Y1 :第二个角位置

X2,Y2  :第三个脚位置

例子:

u8g.drawTriangle(20,5, 27,50, 5,32);  //至于如何控制显示要预想的位置,看多几次图片就明白了,很简单。

aa1.png (27.82 KB, 下载次数: 55)

2017-1-10 16:59 上传

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值