1. 程式人生 > >I2C 12864OLED的工作機制

I2C 12864OLED的工作機制

gin ima 發送 datasheet mission 範圍 ddr vertica inf

有許多不同規格的OLED顯示屏與Arduino兼容, 128x64是最常見的型號, 也很便宜, 淘寶上大概是12~14元一片.

OLED與Arduino的通信

首先, 使用I2C總線的設備, 都可以使用Wire這個library與其通信, 其設備地址可以從0x00至0xFF, 可以通過指定地址操作對應的設備.
其次, 在OLED顯示屏中有許多註冊地址, 每個註冊地址對應某個功能, 例如反轉顏色, 或關閉顯示, 註冊地址的範圍也是0x00到0xFF.
所以, 基本上你只需要3個參數就能讓OLED顯示屏執行某項命令, 方式如下:

Wire.beginTransmission(devAddr);
Wire.write(regAddr);
Wire.write(data);
Wire.endTransmission(); 
// stop transmitting

例如, 要關閉0x3C這個地址的設備的顯示, 我們修改註冊地址0x40的值為0xAE

Wire.beginTransmission(0x3C); // might be different for your display
Wire.write(0x80);
Wire.write(0xAE);
Wire.endTransmission(); // stop transmitting

我們需要了解的註冊地址主要有兩個: 一個是命令地址, 另一個是數據地址, 可以自行查閱datasheet


如何控制每個像素的顯示

這個屏幕的像素矩陣的劃分是比較特殊的, 整個屏幕水平方向劃分為8個page, 垂直方向則是按像素劃分為128 column. 每個page-column包含8個像素, 通過一個十六進制數(其實就是一個字節, 8個bit)來控制, 每個bit控制一個像素
技術分享圖片

技術分享圖片

如果我們要在左上角顯示一個亮點, 需要發送0x01到數據地址, 例如

Wire.beginTransmission(0x3C); // might be different for your display
Wire.write(0x40);
Wire.write(0x01);
Wire.endTransmission(); // stop transmitting


技術分享圖片

如果需要改變下一column的顯示, 你只需要繼續給數據地址發送數據, 指針會自動走到下一個column. 如果已經到了最後一個column, 取決於當前的尋址模式, 如果是Page Addressing, 會返回到本page的第一個column, 如果是Horizontal Addressing, 會跳到下一個page的第一個column. 還有第三種尋址模式, Vertical addressing mode, 這裏不介紹.

以上就是需要了解的OLED顯示機制

翻譯自: https://oscarliang.com/arduino-oled-display-library/

I2C 12864OLED的工作機制