U8g2库I2C总线再次突破性调试成功
这次采用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总线再次突破性调试成功的更多相关文章
- 自制单片机之六……串行I2C总线E2PROM AT24CXXX的应用
这一篇介绍I2C存储器的使用.主要是介绍AT24CXX系列器件,它分为两类,主要是通过被存储容量地址来分的,一类是AT24C02-AT24C16,它的存储容量从256字节到2048字节.另一类是AT2 ...
- I2C总线信号时序总结
I2C总线信号时序总结 总线空闲状态 I2C总线总线的SDA和SCL两条信号线同时处于高电平时,规定为总线的空闲状态.此时各个器件的输出级场效应管均处在截止状态,即释放总线,由两条信号线各自的上拉电 ...
- i2c总线驱动,总线设备(适配器),从设备,从设备驱动的注册以及匹配
常用链接 我的随笔 我的评论 我的参与 最新评论 我的标签 随笔分类 ARM裸机(13) C(8) C++(8) GNU-ARM汇编 Linux驱动(24) Linux应用编程(5) Makefile ...
- 【转】I2C总线协议
I2C总线(Inter Integrated-Circuit)是由PHILIPS公司在上世纪80年代发明的一种电路板级串行总线标准,通过两根信号线——时钟线SCL和数据线SDA——即可完成主从机的单工 ...
- I2C总线信号时序总结【转】
本文转载自:https://i.cnblogs.com/EditPosts.aspx?opt=1 I2C总线信号时序总结 总线空闲状态 I2C总线总线的SDA和SCL两条信号线同时处于高电平时,规定 ...
- 【转】I2C总线相关知识
1. I2C access 1.1. I2C introduction I2C(Inter-Integrated Circuit)总线是由NXP恩智浦半导体公司在80年代开发的两线式串行总线,用来进行 ...
- I2C总线完全版——I2C总线的结构、工作时序与模拟编程
I2C总线的结构.工作时序与模拟编程 I2C总线的结构.工作时序与模拟编程I2C总线(Inter Integrated Circuit)是飞利浦公司于上个世纪80年代开发的一种"电路板级&q ...
- i2c总线,设备,驱动之间的关系
------ 总线上先添加好所有具体驱动,i2c.c遍历i2c_boardinfo链表,依次建立i2c_client, 并对每一个i2c_client与所有这个线上的驱动匹配,匹配上,就调用这个驱动的 ...
- [I2C]I2C总线协议图解
转自:http://blog.csdn.net/w89436838/article/details/38660631 1 I2C总线物理拓扑结构 I2C 总线在物理连接上非常简单,分别由S ...
随机推荐
- 【Python3之字符编码】
一.字符集和字符编码 1.定义 计算机中储存的信息都是用二进制数表示的,而我们在屏幕上看到的英文.汉字等字符是二进制数转换之后的结果.通俗的说,按照何种规则将字符存储在计算机中,如'a'用什么表示,称 ...
- SQL Server 审计操作概念
概述 对于一般的数据库系统审计可能不太会被重视,但是对于金融系统就不一样的.金融系统对审计要求会很高,除了了记录数据库各种操作记录还可能会需要开发报表来呈现这些行为数据.使用SQL Server Au ...
- 关于xml文档使用出现的错误及其解决方法
在学习xml的时候在运行下面程序时候出现了错误,很是烦恼,翻遍了许多博客都没有找到方法,终于在一个不起眼的地方找到了解决方法,很高兴记录下来 运行的程序如下: import xml.etree.Ele ...
- Hyperledger Fabric 1.0 从零开始(十二)——fabric-sdk-java应用【补充】
在 Hyperledger Fabric 1.0 从零开始(十二)--fabric-sdk-java应用 中我已经把官方sdk具体改良办法,即使用办法发出来了,所有的类及文件都是完整的,在文章的结尾也 ...
- .net4.5中HttpClient使用注意点
.net4.5中的HttpClinet是个非常强大的类,但是在最近实际项目运用中发现了些很有意思的事情. 起初我是这样用的: using (var client = new HttpClient()) ...
- python Database Poll for SQL SERVER
python连接SQL SERVER数据库: Python编程中可以使用SQL SERVER 进行数据库的连接及诸如查询/插入/更新等操作,但是每次连接SQL SERVER 数据库请求时,都是独立的去 ...
- CAD 二次开发 -- 自动加载开发的DLL
CAD二次开发可以采用写扩展DLL的方式实现.该DLL的函数可以被CAD调用. 但是调用前,必须用命令netload 将该dll加载到CAD. 其实可以修改注册表,当CAD软件启动后,自动加载扩展DL ...
- git向码云上传代码总结
1.下载git windows下载地址:https://git-for-windows.github.io/ 2.安装git 一路确定 3.配置git 如果你要使用ssh上传代码,你需要本地生成ssh ...
- 变量、交互&注释、数字&字符串&布尔、格式化输出
变量 变量定义规范: 声明变量: name = "Neo Zheng" # name为变量名(标识符),"Neo Zheng"是变量值. 变量定义规则: ...
- Django---->视图(View)
视图层之路由配置系统(views) URL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL与要为该URL调用的视图函数之间的映射表:你就是以这种方式告诉Django,对于这个 ...