本文来源电子发烧友社区,作者:HonestQiao, 帖子地址:https://bbs.elecfans.com/jishu_2289238_1_1.html
OLED演示(开发板体验视频详见作者原帖子内容)
ADP-Corvette-T1开发板兼容Arduino开发环境,完成基础的测试后,就想着点个屏幕玩玩。
通过官方的资料了解到,官方有一个扩展板:
这个上面,使用的是LCD1602A显示屏。
去网上查看了一下资料,发现这是一款老掉牙的使用牛屎封装的LCD显示屏:
另外,详细了解了一下官方的资料,看到硬件上也提供了I2C接口,查看官方资料,可以了解接口的详情:
我手头也有SSD1306 OLED,支持I2C和SPI的都有,这次刚好拿I2C版本的进行实测。
按照官方的资料和SSD1306 OLED的资料,按照如下方式连线:
实物连线如下:
然后,打开Arduino,找OLED的库,进行编程。
测试了好几个之前用过的OLED库,都无法支持这块开发板。
最终,找到了:GyverOLED,顺利使用。
在Arduino,搜索安装即可:
我把演示的代码,做了中文版本的注释,详细如下:
#include h>
// 显示屏类型:
// SSD1306_128x32
// SSD1306_128x64
// 缓冲区:
// OLED_NO_BUFFER (无缓冲区)
// OLED_BUFFER (有缓冲区) - 默认
// 接口类型:
// OLED_I2C - 默认
// OLED_SPI (需指定 CS, DC, RST/RES)
// 初始化:
//GyverOLED oled;,>
//GyverOLED oled;,>
GyverOLED oled;
//GyverOLED oled;,>
//GyverOLED oled;,>
// 对于 I2C 地址,可以发送: GyverOLED oled(0x3C);
// bitmap数据使用 https://github.com/AlexGyver/imageProcessor 创建
const uint8_t bitmap_32x32[] PROGMEM = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xC0, 0xC0, 0xE0, 0xF0, 0x70, 0x70, 0x30, 0x30, 0x30, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xE0, 0xF0, 0xF0, 0x70, 0x30, 0x30, 0x20, 0x00, 0x00,
0x00, 0x30, 0x78, 0xFC, 0x7F, 0x3F, 0x0F, 0x0F, 0x1F, 0x3C, 0x78, 0xF0, 0xE0, 0xC0, 0x80, 0x80, 0x80, 0x40, 0xE0, 0xF0, 0xF8, 0xFC, 0xFF, 0x7F, 0x33, 0x13, 0x1E, 0x1C, 0x1C, 0x0E, 0x07, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xC0, 0xE0, 0xF0, 0xF9, 0xF7, 0xEF, 0x5F, 0x3F, 0x7F, 0xFE, 0xFD, 0xFB, 0xF1, 0xE0, 0xC0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x1E, 0x33, 0x33, 0x1F, 0x0F, 0x07, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x07, 0x0F, 0x1F, 0x3F, 0x1F, 0x0E, 0x04, 0x00, 0x00, 0x00, 0x00,
};
void setup() {
// 串口初始化
Serial.begin(9600);
randomSeed(analogRead(A0));
// 显示屏初始化
oled.init();
// --------------------------
// I2C速度设置
//Wire.setClock(800000L);
// 清除缓冲区
oled.clear();
// 更新显示:适用于OLED_BUFFER
oled.update();
// 圆点显示
oled.home(); // 原点坐标:0,0
oled.print("Hello!"); // 累充串口输出那样,可以输出任何内容:数字,字符串,浮点数等
oled.update();
delay(2000);
// 指定位置显示
oled.setCursor(5, 1); // 指定坐标:x,y
oled.setScale(2);
oled.print("Hello!");
oled.update();
delay(2000);
// 指定位置显示
oled.setCursorXY(15, 30); // 指定坐标:x,y
oled.setScale(3);
oled.invertText(true); // 翻转文本
oled.print("Hello!");
oled.update();
delay(2000);
// --------------------------
oled.clear();
oled.home();
oled.setScale(1);
oled.invertText(false);
oled.autoPrintln(true); // 自动换行
oled.print(F("Happy Rain on a Spring Night. (Du Fu) Good rain knows its time right; It will fall when comes spring. With wind it steals in night; Mute, it moistens each thing."));
oled.update();
delay(2000);
// --------------------------
oled.home();
oled.textMode(BUF_ADD);
// BUF_ADD - 覆盖文本
// BUF_SUBTRACT - 删除文本
// BUF_REPLACE - 替换文本
oled.home();
oled.setScale(3);
oled.print("OK!");
oled.update();
delay(2000);
// --------------------------
// СЕРВИС
//oled.setContrast(10); // 设置对比度 0..255
//oled.setPower(true); // true/false - 开/关 显示
//oled.flipH(true); // true/false - 水平翻转
//oled.flipV(true); // true/false - 垂直翻转
//oled.isEnd(); // 如果显示结束,则返回 true - 用于逐字母输出
// --------------------------
oled.clear();
oled.dot(0, 0); // 画点 x,y
oled.dot(0, 1, 1); // 第3个参数表示是否显示:0-不显示,1-显示(默认)
oled.line(5, 5, 10, 10); // 划线 x0,y0 - x1,y1
//oled.line(5, 5, 10, 10, 0); // 第5个参数:0-擦除,1-绘制(默认)
oled.fastLineH(0, 5, 10); // 画水平线 (y, x1, x2)
//oled.fastLineH(0, 5, 10, 0); // 第4个参数:0-擦除,1-绘制(默认)
oled.fastLineV(0, 5, 10); // 画垂直线 (x, y1, y2)
oled.rect(20, 20, 30, 25); // 画矩形 (x0,y0,x1,y1)
oled.rect(5, 35, 35, 60, OLED_STROKE); // 画矩形操作 (x0,y0,x1,y1)
// 形状参数:
// OLED_CLEAR - 清除
// OLED_FILL - 填充
// OLED_STROKE - 画框
oled.roundRect(50, 5, 80, 25, OLED_STROKE); // 画圆角矩形
oled.circle(60, 45, 15, OLED_STROKE); // 以 (x,y) 为圆心,以с为半径画圆
oled.circle(60, 45, 5, OLED_FILL); // 第4个参数:填充
// 位图
oled.drawBitmap(90, 16, bitmap_32x32, 32, 32, BITMAP_NORMAL, BUF_ADD);
//oled.drawBitmap(90, 16, bitmap_32x32, 32, 32); // 默认. BITMAP_NORMAL 和 BUF_ADD
// x, y, name, width, height, BITMAP_NORMAL(0)/BITMAP_INVERT(1), BUF_ADD/BUF_SUBTRACT/BUF_REPLACE
oled.update();
delay(3000);
}
void loop() {
// 随机位置显示位图
int x = random(0,128-32);
int y = random(0,64-32);
oled.clear();
// 位图
oled.drawBitmap(x, y, bitmap_32x32, 32, 32, BITMAP_NORMAL, BUF_ADD);
//oled.drawBitmap(90, 16, bitmap_32x32, 32, 32); // 默认. BITMAP_NORMAL 和 BUF_ADD
// x, y, name, width, height, BITMAP_NORMAL(0)/BITMAP_INVERT(1), BUF_ADD/BUF_SUBTRACT/BUF_REPLACE
oled.update();
delay(1000);
}
,>
上述代码中的注释,非常详细,所以我也就不用再单独解释了。
实际跑起来,效果非常的不错,而且使用硬件I2C,刷新速度也有保障。
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
晶心科技
+关注
关注
0文章
91浏览量
18063 -
开发板试用
+关注
关注
3文章
299浏览量
1913
发布评论请先 登录
相关推荐
【核桃派1B 开发板试用体验】+OLED屏显示功能测试
OLED屏是一种常见的显示屏,在此类显示屏中按接口来划分,又分为I2C接口型和SPI接口型。
这里测试的OLED屏属
发表于 01-22 22:57
【先楫HPM5361EVK开发板试用体验】RT-Thread I2C使用
开发环境:
IDE:RT-Thread Studio 2.2.7
开发板:HPM5300EVK
HPM5300EVK有4路硬件I2C,当然也可使用软件I2C,对于应用而言,软件和硬件都
发表于 12-25 23:57
【Milk-V Duo 开发板免费体验】Linux下i2c驱动OLED ssd1306
Linux下i2c驱动OLED ssd1306
参数
ssd1306
128*32
0x3c
i2c
发表于 07-29 13:44
【FireBeetle 2 ESP32-S3开发板体验】时间显示 基于ssd1306 I2C 调用开源库 事半功倍
时间显示 基于ssd1306 I2C 调用开源库 事半功倍
简介
FireBeetle 2 ESP32-S3可以使用Arduino IDE、
发表于 07-29 10:04
【Milk-V Duo 开发板免费体验】Linux下i2c驱动OLED ssd1306
* @LastEditTime: 2023-07-18 18:19:47
-->
# Linux下i2c驱动OLED ssd1306
## 参数
- ssd1306
-
发表于 07-18 18:50
Arduino在SSD1306 OLED显示屏上随机移动文本
电子发烧友网站提供《Arduino在SSD1306 OLED显示屏上随机移动文本.zip》资料免费下载
发表于 06-09 10:09
•0次下载
如何共享Heltec WIFI_Kit_8 (OLED-NodeMcu) 的I2C引脚?
5 (Pin24)
OLED_RST = GPIO 16(引脚 8)
我正在使用 Adafruit 的库 SSD1306 和 GFX 来控制 OLED。
现在我想连接到第二个 I2C 设备,一个
发表于 05-31 07:00
【沁恒-CH32V208-开发板免费试用】RTT 基于SSD1306显示的一些例子
沁恒-CH32V208是一款基于risc-v内核的微控制器,支持RT-thread实时操作系统。本文将介绍如何使用SSD1306显示屏和U8G2库在RT-thread上进行开发,并提供一些示例代码
使用Arduino IDE 1.8.15为NodeMCU/Amica上D1和D2上的SSD1306和3.3V电源编译无显示的示例代码怎么处理?
我正在使用 Arduino IDE 1.8.15 为 NodeMCU/Amica 上 D1 和 D2 上的 SSD1306 和 3.3V 电源编译无显示的示例代码。
发表于 05-25 07:31
【沁恒-CH32V208-开发板免费试用】RTT 基于SSD1306显示的一些例子
、高对比度、低功耗等特点。在沁恒-CH32V208上使用SSD1306显示屏需要通过I2C总线进行通信,并使用U8G2库进行
发表于 05-24 20:13
【正点原子STM32战舰V4开发板免费试用】驱动手里的OLED屏幕
经过近一天的折腾,终于可以点亮我手里这块oled屏幕了,也算是为我的开发板试用增加了一份成果。
SSD1306是一款带控制器的用于OLED点阵图形显示系统的单片CMOS OLED/PL
发表于 05-21 13:33
中文编程鸿蒙Hi3861开发进阶案例之-34显示屏OLED
jo4y1875A/?vd_source=7777436562e5db4bde1f86df0df59f24
控制OLED显示屏用的是内双总线(I2C)协议,用到了端口0做为数据线,端口1
发表于 05-15 20:56
《显示器件应用方向精粹:从芯片架构到驱动程序设计》+深入学习与不断实践 (二)
SSD1306为核心的显示屏,其驱动方式以I2C方式为主。
OLED显示屏有多种类型和尺寸规格,如0.91寸、0.96寸等。此外,它还分为单
发表于 05-13 20:18
评论