转载请注明:  冬菇不败   及出处 :http://www.arduino.cn/thread-41193-1-1.html
以下的函数描述是源自原文: https://github.com/olikraus/u8g2/wiki/u8g2reference#begin
自己再通过测试后才发布,采用一个更新方式(精力有限,学习为主),客官觉得不错,就打赏一下呗~
U8G2是U8GLIB的增强版,相对旧版更加好用,强大,兼容板子多。U8G2有两种模式:U8g2是增强版模式,U8X8是简便模式省内存,在setup()里必须设定模式.
函数开始前,先讲一个东西。arduino 和OLED连接的方法(示例NANO和128X64 API OLED)
 
颜色对颜色线连接。
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
例子:

  1. #include <Arduino.h>
  2. #include <SPI.h>
  3. #include <U8g2lib.h>
  4. U8G2_SSD1306_128X64_NONAME_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 4, /* data=*/ 5, /* cs=*/ 3, /* dc=*/ 6, /* reset=*/ 7);
  5. void setup(void) {
  6. u8g2.begin();   //选择U8G2模式,或者U8X8模式
  7. }
  8. void loop(void) {
  9. u8g2.firstPage();
  10. do {
  11. u8g2.setFont(u8g2_font_ncenB14_tr);
  12. u8g2.drawStr(0,15,"Hello World!");
  13. } while ( u8g2.nextPage() );
  14. delay(1000);
  15. }

复制代码

U8G2_R0 是一个参数: 指定大局显示的基本布局:

布局 描述
U8G2_R0 正常显示
U8G2_R1 90度顺时针旋转
U8G2_R2 180度顺时针旋转
U8G2_R3 270度顺时针旋转
U8G2_MIRROR 正常显示镜像内容(v2.6.x版本以上使用)         注意:U8G2_MIRROR需要与setFlipMode()配搭使用.

------------------------------------------------- 屏幕基本函数 -------------------------------------------
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 例子:

  1. void loop(void) {
  2. u8g2.clearBuffer();   //清除当前Buffer内的像素
  3. // 在Buffer内一些操作
  4. u8g2.sendBuffer();    //发送Buffer内容到屏上
  5. delay(1000);

复制代码

u8g2.clearDisplay()    //清除显示中所有像素。此过程在begin()中调用。在程序中一般用不上,也是通过sendBuffer和clearBuffer函数显示出来,一样的处理方式。
关联使用函数:begin

u8g2.disableUTF8Print()  //禁用 UTF8字集 (万国语字库),默认是开启的。 关联使用函数:print 、enableUTF8Print

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

  1. void setup(void) {
  2. u8g2.begin();
  3. u8g2.enableUTF8Print();       // 使print支持UTF8字集
  4. }

复制代码

u8g2.Print()     //在入当前光标位置用当前设置的字体,来打印出(内容)。光标位置可以用setCursor函数 。字体可以用setFont函数。
关联使用函数:print(U8x8)、enableUTF8Print、setFont、setCursor、
例子:

  1. u8g2.setFont(u8g2_font_ncenB14_tr); //设置字体
  2. u8g2.setCursor(0, 15);    //设置光标处
  3. 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是 方形的 高
例子:

  1. #include <Arduino.h>
  2. #include <SPI.h>
  3. #include <U8g2lib.h>
  4. U8G2_SSD1306_128X64_NONAME_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 4, /* data=*/ 5, /* cs=*/ 3, /* dc=*/ 6, /* reset=*/ 7);
  5. void setup(void) {
  6. u8g2.begin();
  7. }
  8. void loop(void) {
  9. u8g2.firstPage();
  10. do {
  11. u8g2.drawBox(48,20,25,15);  //(起始X,起始Y,方形的宽W,方形的高H)
  12. } while ( u8g2.nextPage() );
  13. delay(1000);
  14. }

复制代码

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      //全圆

例子:

  1. void loop(void) {
  2. u8g2.firstPage();
  3. do {
  4. u8g2.drawCircle(48, 30, 10, U8G2_DRAW_LOWER_LEFT);
  5. } while ( u8g2.nextPage() );
  6. delay(1000);
  7. }

复制代码

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

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

、 

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

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

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

u8g.drawLine()     //画一条平面直线
格式:u8g.drawLine(x0, y0, x1, y1);    //x0,y0是直线起始位置, x1,y1是直线终止位置。例子:
u8g.drawLine(20, 5, 5, 32);
 
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<XY))  
例子:

  1. void loop() {
  2. u8g2.firstPage();
  3. do {
  4. u8g2.drawRFrame(20,17,30,22,7);
  5. u8g2.drawRBox(80,25,20,25,5);
  6. } while( u8g2.nextPage());
  7. }

复制代码

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

u8g2.drawStr()   //绘制字符串,可以想象字符串是一串符号,它能输出什么“字符串”在屏上。取决于它的setFont被设置的字体集。
说明:一般都配搭着setFont函数使用,当然,如果不需要其它的字体集,在一开始begin()后设置,全局。字体集详情看setFont函数。一下是三个实例图。
格式:u8g2.drawStr(X, Y,  S );    //S记得加“”。
 
特别注意,它的初始点XY是在左下角:

u8g.drawTriangle()  //绘制实体三角形
格式:u8g.drawTriangle(X0,Y0, X1,Y1, X2,Y2);

X0,Y0 :第一个角位置
X1,Y1 :第二个角位置
X2,Y2  :第三个脚位置
例子:
u8g.drawTriangle(20,5, 27,50, 5,32);  //至于如何控制显示要预想的位置,看多几次图片就明白了,很简单。

【arduino】【u8g2库】OLED屏-U8glib库 增强版 U8G2库相关推荐

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

    本帖最后由 alientg 于 2017-1-10 17:01 编辑 https://github.com/olikraus/u8g2/wiki/u8g2reference#begin 自己再通过测试 ...

  2. Facebook 开源增强版 LASER 库:可实现 93 种语言的零样本迁移...

    雷锋网 AI 科技评论按:去年 12 月份,Facebook 在论文中提出了一种可学习 93 种语言的联合多语言句子表示的架构,该架构仅使用一个编码器,就可以在不做任何修改的情况下实现跨语言迁移,为自 ...

  3. Facebook 开源增强版 LASER 库:可实现 93 种语言的零样本迁移

    雷锋网 AI 科技评论按:去年 12 月份,Facebook 在论文中提出了一种可学习 93 种语言的联合多语言句子表示的架构,该架构仅使用一个编码器,就可以在不做任何修改的情况下实现跨语言迁移,为自 ...

  4. [arduino][u8g2][12864] oled—u8g2库使用说明(例子是12864液晶屏)

    [arduino][u8g2][12864] oled-u8g2库使用说明(例子是12864液晶屏) 首先说一下写这个文档的目的,一是给自己做个笔记来以备后边使,二是写个文档给大家看,我从网上找了很多 ...

  5. esp32使用MicroPython驱动oled屏显示中文和英文

    文章目录 esp32使用MicroPython驱动oled屏显示中文和英文 介绍 安装 特点 开源 硬件连接 API 示例 显示英文字符 显示汉字 参考链接 esp32使用MicroPython驱动o ...

  6. Facebook 开源增强版 LASER,可使用90多种语言

    为了加速将自然语言处理(NLP)应用到更多的语言,Facebook 开源了增强版 LASER 库,成为第一个成功地与 NLP 社区分享的大型多语种句子表示工具.该工具目前可以使用90多种语言,涉及28 ...

  7. arduino使用oled代码_Arduino提高篇04—U8g2库驱动OLED

    OLED显示屏的驱动库非常多,本篇介绍强大的U8g2库,通过使用U8g2库来驱动OLED屏. 1. U8g2库介绍 U8g2库是嵌入式设备单色图形库,支持非常多的嵌入式设备平台,如单片机,STM32, ...

  8. arduino上ESP8266用Adafruit_SSD1306库驱动OLED屏

    关注.星标公众号,不错过精彩内容 编辑:Tony 来源:公众号TonyCode 在进行后续的ESP8266学习前,我们先来对OLED屏进行驱动,为后续学习提供直观的信息显示. 1. 安装驱动库 在之前 ...

  9. Arduino教程四——u8g2库OLED屏幕显示

    1)    功能 u8g2库OLED屏幕显示英文 OLED 0.96寸 128X64 对于这几个参数进行说明, 0.96指的是屏幕的显示尺寸0.96inch, 128×64指的是屏幕的分辨率为128× ...

最新文章

  1. nohup 和后台运行符号
  2. 浅析Java.lang.ProcessBuilder类
  3. cfb为什么不需要填充_为什么很多高中生数学成绩不理想,需要补课?因为不熟练啊!...
  4. LeetCode Valid Sudoku
  5. vue伸缩效果_Vue.js - 元素展开、收起动画效果组件(附:二级菜单的展开、收缩动画效果)...
  6. 小米四曲面瀑布屏概念手机亮相:按键、开孔、边框全部消失
  7. AB实验的高端玩法系列4- 实验渗透低?用户未被触达?CACE/LATE
  8. gitlab CI/CD 持续集成 部署 一文到底
  9. 估值择时对ETF基金定投的影响
  10. ​​​​​​​​​​​勾股数的规律
  11. 2086689-01-0,N-(Azido-PEG2)-N-Boc-PEG3-acid末端羧酸可在活化剂(例如EDC或HATU)存在下与伯氨基反应
  12. 使用NuSMV解决过河问题
  13. UNETR 医学图像分割架构 2D版 (Tensorflow2 Keras 实现UNETR)
  14. 2022危险化学品生产单位安全生产管理人员考试题库及模拟考试
  15. 2012意大利之行3:罗马的路和车
  16. win7通过远程桌面连接win10失败解决方法
  17. [CSP-S模拟测试]:壕游戏(费用流)
  18. git Please tell me who you are怎么处理解决
  19. mysql intersect用法格式_MySQL中使用INNER JOIN来实现Intersect并集操作
  20. Python获取阿里云产品云监控数据指标

热门文章

  1. 金融day04 —— 银行总的会计核算
  2. 【飞思卡尔 MC9S12】BootLoader 上位机
  3. java设置新生代大小,jvm java虚拟机 新生代的配置
  4. sql函数-创建计算工作日函数,除去了周末以及法定节假日,需要新建表做维护(内置本人有道云链接)
  5. 2021-2027全球与中国无纸温度记录仪市场现状及未来发展趋势
  6. 计算机专业导论的作用,计算机专业导论第00讲-计算机绪论.pdf
  7. 插值字符串格式化定制程序结果输出(f‘{object}‘)
  8. Oracle中的DDL,DML,DCL总结
  9. A里P7推荐68道Redis面试题,全是干货,20年面试必备
  10. 使用mysql官网下载linux版本