本文來(lái)源電子發(fā)燒友社區,作者:HonestQiao, 帖子地址:https://bbs.elecfans.com/jishu_2289238_1_1.html
OLED演示(開(kāi)發(fā)板體驗視頻詳見(jiàn)作者原帖子內容)
ADP-Corvette-T1開(kāi)發(fā)板兼容Arduino開(kāi)發(fā)環(huán)境,完成基礎的測試后,就想著(zhù)點(diǎn)個(gè)屏幕玩玩。
通過(guò)官方的資料了解到,官方有一個(gè)擴展板:
這個(gè)上面,使用的是LCD1602A顯示屏。
去網(wǎng)上查看了一下資料,發(fā)現這是一款老掉牙的使用牛屎封裝的LCD顯示屏:
另外,詳細了解了一下官方的資料,看到硬件上也提供了I2C接口,查看官方資料,可以了解接口的詳情:
我手頭也有SSD1306 OLED,支持I2C和SPI的都有,這次剛好拿I2C版本的進(jìn)行實(shí)測。
按照官方的資料和SSD1306 OLED的資料,按照如下方式連線(xiàn):
實(shí)物連線(xiàn)如下:
然后,打開(kāi)Arduino,找OLED的庫,進(jìn)行編程。
測試了好幾個(gè)之前用過(guò)的OLED庫,都無(wú)法支持這塊開(kāi)發(fā)板。
最終,找到了:GyverOLED,順利使用。
在A(yíng)rduino,搜索安裝即可:
我把演示的代碼,做了中文版本的注釋?zhuān)敿毴缦拢?/p>
#include h>
// 顯示屏類(lèi)型:
// SSD1306_128x32
// SSD1306_128x64
// 緩沖區:
// OLED_NO_BUFFER (無(wú)緩沖區)
// OLED_BUFFER (有緩沖區) - 默認
// 接口類(lèi)型:
// OLED_I2C - 默認
// OLED_SPI (需指定 CS, DC, RST/RES)
// 初始化:
//GyverOLED oled;,>
//GyverOLED oled;,>
GyverOLED oled;
//GyverOLED oled;,>
//GyverOLED oled;,>
// 對于 I2C 地址,可以發(fā)送: GyverOLED oled(0x3C);
// bitmap數據使用 https://github.com/AlexGyver/imageProcessor 創(chuàng )建
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();
// 圓點(diǎn)顯示
oled.home(); // 原點(diǎn)坐標:0,0
oled.print("Hello!"); // 累充串口輸出那樣,可以輸出任何內容:數字,字符串,浮點(diǎn)數等
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); // 自動(dòng)換行
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 - 開(kāi)/關(guān) 顯示
//oled.flipH(true); // true/false - 水平翻轉
//oled.flipV(true); // true/false - 垂直翻轉
//oled.isEnd(); // 如果顯示結束,則返回 true - 用于逐字母輸出
// --------------------------
oled.clear();
oled.dot(0, 0); // 畫(huà)點(diǎn) x,y
oled.dot(0, 1, 1); // 第3個(gè)參數表示是否顯示:0-不顯示,1-顯示(默認)
oled.line(5, 5, 10, 10); // 劃線(xiàn) x0,y0 - x1,y1
//oled.line(5, 5, 10, 10, 0); // 第5個(gè)參數:0-擦除,1-繪制(默認)
oled.fastLineH(0, 5, 10); // 畫(huà)水平線(xiàn) (y, x1, x2)
//oled.fastLineH(0, 5, 10, 0); // 第4個(gè)參數:0-擦除,1-繪制(默認)
oled.fastLineV(0, 5, 10); // 畫(huà)垂直線(xiàn) (x, y1, y2)
oled.rect(20, 20, 30, 25); // 畫(huà)矩形 (x0,y0,x1,y1)
oled.rect(5, 35, 35, 60, OLED_STROKE); // 畫(huà)矩形操作 (x0,y0,x1,y1)
// 形狀參數:
// OLED_CLEAR - 清除
// OLED_FILL - 填充
// OLED_STROKE - 畫(huà)框
oled.roundRect(50, 5, 80, 25, OLED_STROKE); // 畫(huà)圓角矩形
oled.circle(60, 45, 15, OLED_STROKE); // 以 (x,y) 為圓心,以с為半徑畫(huà)圓
oled.circle(60, 45, 5, OLED_FILL); // 第4個(gè)參數:填充
// 位圖
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);
}
,>
上述代碼中的注釋?zhuān)浅T敿?,所以我也就不用再單獨解釋了?/p>
實(shí)際跑起來(lái),效果非常的不錯,而且使用硬件I2C,刷新速度也有保障。
-
晶心科技
+關(guān)注
關(guān)注
0文章
94瀏覽量
18088 -
開(kāi)發(fā)板試用
+關(guān)注
關(guān)注
3文章
299瀏覽量
1957
發(fā)布評論請先 登錄
相關(guān)推薦
128 x 64點(diǎn)陣式OLED/PLED段/帶控制器的通用驅動(dòng)器SSD1306數據手冊
【核桃派1B 開(kāi)發(fā)板試用體驗】+OLED屏顯示功能測試
ADPD188BI開(kāi)發(fā)板I2C通信失敗是什么原因造成的?
【先楫HPM5361EVK開(kāi)發(fā)板試用體驗】RT-Thread I2C使用
【涂鴉T2-U開(kāi)發(fā)板試用體驗】+智能農業(yè)系統實(shí)現代碼
樹(shù)莓派Pico上使用SSD1306 OLED屏幕
![樹(shù)莓派Pico上使用<b class='flag-5'>SSD1306</b> OLED屏幕](https://file1.elecfans.com/web2/M00/B1/9C/wKgZomVcS92AO4qAAAAfLUjOGGo364.jpg)
ssd1306 OLED花屏怎么解決?
SSD1306數據表
【Start_DSC28034PNT湖人開(kāi)發(fā)板免費體驗】 DSC28034PNT-克隆ssd1306手動(dòng)模擬i2c
【Milk-V Duo 開(kāi)發(fā)板免費體驗】Linux下i2c驅動(dòng)OLED ssd1306
【FireBeetle 2 ESP32-S3開(kāi)發(fā)板體驗】實(shí)時(shí)顯示 更進(jìn)一步 又快又準
【FireBeetle 2 ESP32-S3開(kāi)發(fā)板體驗】時(shí)間顯示 基于ssd1306 I2C 調用開(kāi)源庫 事半功倍
RA4M2開(kāi)發(fā)(2)----基于IIC驅動(dòng)OLED
![RA4M2<b class='flag-5'>開(kāi)發(fā)</b>(2)----基于IIC<b class='flag-5'>驅動(dòng)</b>OLED](https://file1.elecfans.com/web2/M00/8D/EB/wKgaomTBzySAKR6cAA04RdeToMY169.png)
評論