这次采用U8X8的方式,不再采用u8g2,因为后者一直报内存问题。所以采用了不占内存的u8x8模式

同时u8g2库文件的示例代码也是很牛逼的,

里面还有message box 非常的可爱运行效果也非常棒!

代码如下

 #include <Arduino.h>
#include <U8x8lib.h> #ifdef U8X8_HAVE_HW_SPI
#include <SPI.h>
#endif
U8X8_SSD1306_128X64_NONAME_SW_I2C u8x8(/* clock=*/ SCL, /* data=*/ SDA, /* reset=*/ U8X8_PIN_NONE); // OLEDs without Reset of the Display
void setup(void)
{
//u8x8.begin();//可以定义按键如下
u8x8.begin(/*Select=*/ , /*Right/Next=*/ A1, /*Left/Prev=*/ A2, /*Up=*/ A0, /*Down=*/ A3, /*Home/Cancel=*/ ); u8x8.setPowerSave();
}
void loop(void)
{
/*u8x8.setFont(u8x8_font_chroma48medium8_r);
u8x8.drawString(0,0,"Hello World!");
u8x8.refreshDisplay();
delay(2000);*/ uint8_t r;
u8x8.setFont(u8x8_font_chroma48medium8_r);
r = u8x8_UserInterfaceMessage(u8x8.getU8x8(), "Message", "Box", NULL, " Ok \n Cancel ");
if ( r == )
{
u8x8.userInterfaceMessage("You pressed the", "Home/Quit", "Button", " Ok ");
}
else if ( r == )
{
u8x8.userInterfaceMessage("You selected the", "Ok", "Button", " Ok ");
}
else if ( r == )
{
u8x8.userInterfaceMessage("You selected the", "Cancel", "Button", " Ok ");
}
}

再也没有出现之前的动不动就报内存不足的问题。

同时还可以自己生成位图进行显示,比如二维码,不过,识别起来很吃力

代码如下

 #include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h> #define OLED_RESET 4
Adafruit_SSD1306 display(OLED_RESET); static const unsigned char PROGMEM logo[] =
{
0x9F,0xFE,0x6C,0x38,0xFF,0x6F,0xFF,0xFE,0xBF,0xFE,0x6C,0x38,0xFF,0x6F,0xFF,0xFE,
0xFF,0xFF,0xEF,0xB8,0xFF,0x7F,0xFF,0xFE,0xBF,0xFF,0xFF,0x9F,0xFF,0x7F,0x1F,0xFE,
0xFF,0xDF,0x39,0x9F,0xBE,0x7F,0x1F,0xFE,0xFF,0xFF,0x3D,0xFF,0xBF,0x7F,0xFF,0xFE,
0xFF,0xFF,0xFD,0xFE,0xFF,0xCF,0xFF,0xFE,0xFE,0xF7,0xCD,0x9E,0xF7,0xCF,0x9F,0xF2,
0xFF,0x7D,0x8D,0xBE,0xF7,0xFF,0xFF,0xFE,0xFF,0xFF,0xFF,0xFF,0xB7,0xFF,0xFF,0xFE,
0xFF,0xFF,0xFF,0xDB,0xB7,0xFF,0xFF,0xFE,0xFF,0xEF,0xF7,0xFB,0xBF,0xFF,0xFF,0xFE,
0x36,0xFF,0xFF,0xF3,0xFF,0xFF,0xFF,0xFE,0x36,0xF3,0xFC,0xC3,0xF7,0x3F,0xFF,0xFE,
0xF7,0xE5,0xFF,0xFF,0xF7,0x3F,0xFF,0xFE,0xF7,0x81,0xFF,0x3E,0xF6,0x00,0x36,0x0E,
0xF8,0x73,0xF9,0xBF,0xD8,0x6C,0xE7,0xFE,0xFF,0xFF,0xFF,0xFF,0xD8,0x6F,0xF7,0xFE,
0xF7,0x8F,0xE5,0xDF,0x80,0x07,0xF6,0x00,0x3F,0xF8,0x3F,0xD8,0xDF,0x3F,0x3E,0xD8,
0xFF,0xFE,0x3F,0xFE,0xFF,0x3F,0xFE,0xD8,0xFC,0x0E,0x0C,0x3E,0x36,0x00,0xFE,0xC0,
0x36,0xFF,0x6C,0xFB,0xBF,0x6F,0x3F,0x8E,0x37,0xFF,0xFC,0xFF,0xFF,0xFF,0x3F,0xFE,
0x37,0xDF,0xFC,0x3F,0xFF,0xFC,0x3F,0xFC,0xFE,0xF3,0xED,0xB7,0xB3,0x0D,0xFF,0xF0,
0xFE,0xEF,0xEF,0xFF,0xB7,0x0F,0xFF,0xF0,0xF4,0xCE,0x07,0xFE,0x36,0x03,0xFE,0x70,
0x1F,0xE1,0xFF,0xB6,0xF6,0xF8,0xE6,0xD8,0x1F,0xE3,0xFF,0xF6,0xF7,0xFF,0xE7,0xD8,
0x06,0x03,0x7F,0xC6,0x03,0x67,0xE3,0x80,0xFE,0xF3,0x0D,0xF3,0xB6,0x6D,0xBF,0xF0,
0xFF,0xFF,0xFD,0xF3,0xBF,0xFF,0xFF,0xF8,0x07,0x9F,0xFD,0x83,0xBF,0xFF,0xE3,0x98,
0x36,0x7E,0x6F,0xFB,0x86,0x6F,0xFF,0x8E,0xF6,0x7E,0x6F,0xFF,0x87,0x7F,0xFF,0x8E,
0xE0,0x00,0x67,0xC6,0x03,0x3F,0xF7,0x80,0x33,0xFF,0xFF,0x00,0xDE,0x3F,0xF0,0xDE,
0xFB,0xFF,0xFF,0xFE,0xFE,0x3F,0xFE,0xDE,0xFC,0x0E,0x07,0xFE,0xF6,0x0F,0xFE,0xCE,
0xF6,0x7F,0x6C,0x3B,0xBE,0x6D,0xBF,0xFE,0xF7,0xFF,0xEC,0x3F,0xFF,0xED,0xBF,0xFE,
0x33,0xDE,0x6C,0x1F,0xFF,0xCC,0x1C,0xFE,0xFE,0xF0,0x4D,0xBB,0xB7,0xED,0x87,0xF0,
0xFE,0xEF,0xED,0xFF,0xF3,0xEF,0xFF,0xFE,0xFC,0xCE,0x0C,0xFE,0xC2,0x07,0xFE,0xCE,
0xFF,0xE3,0xFF,0xF6,0xC3,0xFF,0xB6,0xF0,0xFF,0xE3,0xFF,0xF7,0xC3,0xFF,0xFE,0xF8,
0xF8,0x03,0x7F,0xF3,0x83,0x7F,0xFE,0xD8,0xFE,0xF3,0xFF,0xFF,0xB3,0xFF,0xFF,0x98,
0xF6,0xFF,0xEF,0x9F,0xB7,0xED,0xFF,0xF8,0x00,0x0E,0x6F,0x1B,0xB7,0x6D,0xE3,0xF8,
0xFF,0xFF,0xFE,0x3B,0xB7,0xFF,0xFF,0xF8,0xFF,0xFF,0xFE,0x3E,0xDB,0xFF,0xFF,0xFE,
0xE0,0x5F,0x77,0x1E,0xDB,0xFF,0xE3,0xFE,0xFF,0xF7,0x7F,0xBF,0xDB,0xFF,0xFF,0xFE,
0xFF,0xFF,0x7F,0xFB,0xDB,0xFF,0xFF,0xF8,0xFF,0xFF,0x7F,0xC3,0xD8,0x07,0xFC,0xD8,
0xFF,0xFF,0x7F,0xC3,0xFB,0xFF,0xFF,0xF8,0xFF,0xFF,0x79,0x9B,0xFF,0xFC,0x7F,0xF8,
0xE0,0x7F,0x61,0x9B,0x9F,0x6C,0xFF,0xD8,0xF7,0xFF,0xFD,0x9B,0xDF,0xFC,0x7F,0xD8,
0xFF,0xE1,0xFC,0x00,0xC7,0xFC,0x00,0x00/*"C:\Users\Administrator\Desktop\6464qrco000000000de_15134800003995111111111111111827.bmp",0*/}; #if (SSD1306_LCDHEIGHT != 64)
#error("Height incorrect, please fix Adafruit_SSD1306.h!");
#endif void setup() {
Serial.begin();
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
display.clearDisplay();
display.drawBitmap(, , logo, , , );
} void loop() {
//display.drawBitmap(0, 0, logo, 64, 64, 1); //在坐标X0,Y0的位置开始显示图片
//128是取模软件显示的宽度
//64是取模软件显示的高度
// display.display(); //把缓存的都显示
//delay(1); // display.clearDisplay(); //清除屏幕
}

U8g2库I2C总线再次突破性调试成功的更多相关文章

  1. 自制单片机之六……串行I2C总线E2PROM AT24CXXX的应用

    这一篇介绍I2C存储器的使用.主要是介绍AT24CXX系列器件,它分为两类,主要是通过被存储容量地址来分的,一类是AT24C02-AT24C16,它的存储容量从256字节到2048字节.另一类是AT2 ...

  2. I2C总线信号时序总结

    I2C总线信号时序总结 总线空闲状态  I2C总线总线的SDA和SCL两条信号线同时处于高电平时,规定为总线的空闲状态.此时各个器件的输出级场效应管均处在截止状态,即释放总线,由两条信号线各自的上拉电 ...

  3. i2c总线驱动,总线设备(适配器),从设备,从设备驱动的注册以及匹配

    常用链接 我的随笔 我的评论 我的参与 最新评论 我的标签 随笔分类 ARM裸机(13) C(8) C++(8) GNU-ARM汇编 Linux驱动(24) Linux应用编程(5) Makefile ...

  4. 【转】I2C总线协议

    I2C总线(Inter Integrated-Circuit)是由PHILIPS公司在上世纪80年代发明的一种电路板级串行总线标准,通过两根信号线——时钟线SCL和数据线SDA——即可完成主从机的单工 ...

  5. I2C总线信号时序总结【转】

    本文转载自:https://i.cnblogs.com/EditPosts.aspx?opt=1 I2C总线信号时序总结 总线空闲状态  I2C总线总线的SDA和SCL两条信号线同时处于高电平时,规定 ...

  6. 【转】I2C总线相关知识

    1. I2C access 1.1. I2C introduction I2C(Inter-Integrated Circuit)总线是由NXP恩智浦半导体公司在80年代开发的两线式串行总线,用来进行 ...

  7. I2C总线完全版——I2C总线的结构、工作时序与模拟编程

    I2C总线的结构.工作时序与模拟编程 I2C总线的结构.工作时序与模拟编程I2C总线(Inter Integrated Circuit)是飞利浦公司于上个世纪80年代开发的一种"电路板级&q ...

  8. i2c总线,设备,驱动之间的关系

    ------ 总线上先添加好所有具体驱动,i2c.c遍历i2c_boardinfo链表,依次建立i2c_client, 并对每一个i2c_client与所有这个线上的驱动匹配,匹配上,就调用这个驱动的 ...

  9. [I2C]I2C总线协议图解

    转自:http://blog.csdn.net/w89436838/article/details/38660631 1  I2C总线物理拓扑结构      I2C 总线在物理连接上非常简单,分别由S ...

随机推荐

  1. Linux中创建新用户并赋给指定文件权限

    工作中用到了,写篇日志总结一下. 创建新的用户: 第一种方式: 创建用户: adduser name 创建密码: passwd name(回车后出现修改密码的提示) 该方式创建的用户目录默认在home ...

  2. Maven代理设置

    公司需要设置代理才能上网,而运行Maven时需要下载依赖的库. 怎么办呢? 原来Maven也像IE一样,可以设置HTTP代理的. 步骤如下: ·编辑 ~/.m2/setting.xml 文件.如果该目 ...

  3. JPG .vs. PNG

    A summary of comparison between JPEG and PNG JPEG Pros Smaller file size than PNG Widely suppported ...

  4. JavaScript(四)操作符

      6种表达式 原始表达是  初始化表达式 函数定义表达式 函数调用表达式 属性访问表达式 对象创建表达式 操作符 操作符的优先级 属性访问[] .  >  一元操作符 >  */ > ...

  5. C++返回值优化RVO

    返回值优化,是一种属于编译器的技术,它通过转换源代码和对象的创建来加快源代码的执行速度.RVO = return value optimization. 测试平台:STM32F103VG + Keil ...

  6. js中的数组去重

    var str=["1","4","5","5","6","1","7 ...

  7. DAY3-“忙里偷闲”找你玩耍2018-1-11

    接触Java第三天,嘿嘿,今天近代史期末考试,提前一小时交卷,回宿舍继续学习,中午去见女神姐姐了,每次见完女神姐姐都是满满地动力.这次女神姐姐告诉我们要好好规划自己的时间,早上花20分钟规划好一天的时 ...

  8. Oracle02——oracle分页、子查询、集合运算、处理数据、创建和管理表和其他数据库对象

    作者: kent鹏 转载请注明出处: http://www.cnblogs.com/xieyupeng/p/7289451.html --oracle分页(Pageing Query) select ...

  9. MIPI协议-DSI

    对于现代的智能手机来说,其内部要塞入太多各种不同接口的设备,给手机的设计 和元器件选择带来很大的难度.下图是一个智能手机的例子,我们可以看到其内部存储.显示.摄像.声音等内部接口都是各不相同的.即使以 ...

  10. Zabbix实战-简易教程--动作(Actions)--自动注册

    一.概述 之前已经讲述了自动发现功能,自动注册和自动发现非常类似,但是比自动发现更精确.因为自动注册,是在Agent上自定义元数据,然后Agent将元数据发送给server进行匹配,如果匹配一致,则进 ...