基礎命令:
1.頁地址模式下設置列起始地址低位(Set Lower Column Start Address For Page Addressing Mode)(00h~0Fh)
此指令用於在頁地址模式下設置GDDRAM的列起始地址(8位)的低4位, 頁地址會在數據訪問后遞增
2.頁地址模式下設置列起始地址高位(Set Higher Column Start Address For Page Addressing Mode)(10h~1Fh)
此指令用於在頁地址模式下設置GDDRAM的列起始地址(8位)的高4位, 頁地址會在數據訪問后遞增
3.設置內存地址模式(Set Memory Addressing Mode)(20h)
在SSD1306中有三種地址模式: 頁地址模式, 水平地址模式和垂直地址模式, 此命令用於將地址模式設置為以上三種之一
'COL'的含義是GDDRAM列(column)
頁地址模式(A[1:0]=10b)
當處於此模式時, 在GDDRAM訪問后(讀/寫), 列地址指針將自動增加1。如果列地址指針到達列終止地址, 列地址指針將復位到列起始地址, 但頁地址指針不會改變。
為了訪問GDDRAM中下一頁的內容, 用戶必須設置新的頁地址和列地址。頁地址模式下頁以及列地址指針的行為如下圖所示
通常在頁地址模式下訪問GDDRAM, 需要如下步驟來定義起始RAM訪問指針指向:
-通過命令(B0h-B7h)設置目標顯示位置頁起始地址
-通過命令(00h-0Fh)設置列起始地址低位
-通過命令(10h-1Fh)設置列起始地址高位
例如, 如果頁地址是B2h, 列地址低位是03h, 列地址高位是10h, 起始列將為PAGE2的SEG3, GDDRAM訪問指針的指向如下圖所示
水平地址模式(A[1:0]=00b)
當處於此模式時, 在GDDRAM訪問后(讀/寫), 列地址指針將自動增加1。如果列地址指針到達列終止地址, 列地址指針將復位到列起始地址, 且頁地址指針將自動增加1。
水平地址模式下頁以及列地址指針的行為如下圖所示, 如果列地址指針和頁地址指針都到達各自的終止地址時, 他們都將復位到各自的起始地址。(圖中虛線)
垂直地址模式(A[1:0]=01b)
當處於此模式時, 在GDDRAM訪問后(讀/寫), 頁地址指針將自動增加1。如果頁地址指針到達頁終止地址, 頁地址指針將復位到頁起始地址, 且列地址指針將自動增加1。
垂直地址模式下頁以及列地址指針的行為如下圖所示, 如果列地址指針和頁地址指針都到達各自的終止地址時, 他們都將復位到各自的起始地址。(圖中虛線)
通常在(垂直/水平)地址模式下訪問GDDRAM, 需要如下步驟來定義起始RAM訪問指針指向:
-通過命令(21h)設置目標顯示位置列起始地址以及列終止地址
-通過命令(22h)設置目標顯示位置頁起始地址以及頁終止地址
4.設置列地址(Set Column Address)(21h)
此指令用於設置GDDRAM的列起始地址和列結束地址, 並使列地址指針(指向GDDRAM中當前訪問的列地址)指向列起始地址。
若內存地址模式為水平地址模式, 在訪問一列數據后, 列地址指針將增加到下一個列地址。當結束訪問終止列地址時, 列地址指針將復位至列起始地址, 且行地址指針將增加到下一行。
5.設置頁地址(Set Page Address)(22h)
此指令用於設置GDDRAM的頁起始地址和頁結束地址, 並使頁地址指針(指向GDDRAM中當前訪問的頁地址)指向頁起始地址。
若內存地址模式為垂直地址模式, 在訪問一頁數據后, 頁地址指針將增加到下一個頁地址。當結束訪問終止頁地址時, 頁地址指針將復位至頁起始地址。
下圖展示了例子中列地址指針和頁地址指針的移動方式: 列起始地址設為2, 列終止地址設為125, 頁起始地址設為1, 頁終止地址設為6, 並使用水平地址模式。
在此情況下, GDDRAM數據可范圍范圍在列2-列125, 頁1-頁6之內。同時列地址指針被設為2, 頁地址指針被設為1。在訪問數據后, 列地址自動增加1, 以訪問下一數據(圖中實線)
當結束訪問終止列地址(125)時, 列地址指針復位到列2, 頁地址指針自動增加1(圖中實線), 當訪問終止頁地址6和終止列地址125所在數據后, 頁地址指針復位到1, 列地址指針復位到2(圖中虛線)
6.設置屏幕起始行(Set Display Start Line)(40h-7Fh)
此命令用於設置屏幕起始行寄存器以設置GDDRAM起始地址, 取值范圍為[0, 63]。若值為0, 則RAM第0行映射至COM0, 若值為1, 則RAM第1行映射到COM0, 以此類推。
7.設置對比度(Set Contrast Control for BANK0)(81h)
此命令用於設置屏幕對比度。此芯片有256級對比度(從00h至FFh)。段輸出電流和對比度值同增同減。
8.設置段重映射(Set Segment Re-map)(A0h/A1h)
此指令用於改變屏幕數據列地址和段驅動器間的映射關系, 這增強和OLED模塊設計的可伸縮性。
此命令只影響其后的數據輸入, 已存儲在GDDRAM中的數據將保持不變。
9.全屏點亮(Entire Display ON)(A4h/A5h)
命令A4h啟用輸出GDDRAM中的數據
如果命令A5h已被調用, 通過A4h指令, 可以將屏幕顯示從全屏點亮狀態中恢復
命令A5h通過忽略GDDRAM中的數據以點亮全屏
10.設置正常/反轉顯示(A6h/A7h)
此命令用於設置顯示是否反轉, 正常模式下, RAM中的數據1表示點亮像素; 在反轉模式下, RAM中的數據0表示點亮像素
11.設置復用率(A8h)
此命令用於將默認的63復用率更改至任何范圍為[16, 63]的值, COM0~COM64輸出將切換到正確的輸出信號
12.設置屏幕開啟/關閉(AEh/AFh)
此指令用於開啟或關閉OLED屏幕
當屏幕開啟時, 設置主機配置命令(Set Master Configuration)選擇的電路將被連通。
當屏幕關閉時, 這些電路將被斷開, 且段和公共的輸出都被分別置為Vss和高阻態。
此指令設置屏幕狀態為以下二者的其中之一:
AEh: 關閉屏幕
AFh: 開啟屏幕
13.頁地址模式下設置頁起始地址
此指令用於設置在頁地址模式下GDDRAM的頁起始地址, 取值范圍為[0, 7]
14.設置列輸出掃描方向(Set COM Output Scan Direction)(C0h/C8h)
此指令用於設置列輸出的掃描方向, 增強了OLED模塊設計的布局的伸縮性。
注意, 此指令會立即生效。例如當屏幕正常顯示時調用此指令, 屏幕將會立刻垂直翻轉。
15.設置顯示偏移(Set Display Offset)(D3h)
此命令為雙字節命令, 第二個字節用於設置屏幕起始行為COM0~COM63之一(假設COM0為屏幕起始行, 那么屏幕起始行寄存器值為0)
例如, 要使COM16向COM0方向移動16行, 第二個字節的值應該為010000b; 向COM0相反方向移動16行, 第二個的值應該為64-16, 即100000b, 下表展示了調用指令C0h/C8h和D3h的例子
16.設置顯示時鍾分頻值/震盪頻率(Set Display Clock Divide Ration/Oscillator Frequency)(D5h)
此指令包括兩個功能:
-設置顯示時鍾分頻值(D)(A[3:0])
由於設置從CLK分頻得到的DCLK(顯示時鍾, Display clock)的分頻值, 分頻值取值范圍為[1, 16], 初始值為1, (Please refer to Secion 8.3 for more details)
-設置震盪頻率(A[7:4])
如果CLS腳被拉高, 可用於編程震盪頻率。 默認值為1000b
17.設置預充電周期(Set Pre-charge Period)(D9h)
此指令用於設置預充電周期的時長, 此周期單位為一DCLK的周期, 復位值為2 DCLK
18.設置列引腳硬件配置(Set COM Pins Hardware Configuration)(DAh)
此指令用於設置列信號引腳配置來適應OLED面板的硬件布局。下表展示了在不同條件下的列引腳配置效果。(圖中芯片金手指向上)
-1.序列的列引腳配置(DAh A[4]=0), 列輸出掃描方向從COM0到COM63(C0h), 禁用列左/右映射(DAh A[5]=0)
-2.序列的列引腳配置(DAh A[4]=0), 列輸出掃描方向從COM0到COM63(C0h), 啟用列左/右映射(DAh A[5]=1)
-3.序列的列引腳配置(DAh A[4]=0), 列輸出掃描方向從COM0到COM63(C8h), 禁用列左/右映射(DAh A[5]=0)
-4.序列的列引腳配置(DAh A[4]=0), 列輸出掃描方向從COM63到COM0(C8h), 啟用列左/右映射(DAh A[5]=1)
-5.備選的列引腳配置(DAh A[4]=1), 列輸出掃描方向從COM63到COM0(C0h), 禁用列左/右映射(DAh A[5]=0)
-6.備選的列引腳配置(DAh A[4]=1), 列輸出掃描方向從COM0到COM63(C0h), 啟用列左/右映射(DAh A[5]=1)
-7.備選的列引腳配置(DAh A[4]=1), 列輸出掃描方向從COM63到COM0(C8h), 禁用列左/右映射(DAh A[5]=0)
-8.備選的列引腳配置(DAh A[4]=1), 列輸出掃描方向從COM63到COM0(C8h), 啟用列左/右映射(DAh A[5]=1)
19.設置VCOMH反壓值(Set VCOMH Deselect Level)(DBh)
此指令用於調整VCOMH輸出
20.空指令(NOP)(E3h)
不產生作用的指令
21.讀取狀態寄存器(Status register Read)
在讀取數據時將D/C#拉低以調用此指令, MCU可用此指令讀取芯片內部狀態。
圖形加速命令:
1.水平滾動配置(Horizontal Scroll Setup)(26h/27h)
此指令用於配置水平滾動參數和確定滾動起始頁、終止頁和滾動速度
水平滾動需要在調用此命令前禁用(2Eh), 否則RAM中的內容將會出錯
SSD1306的水平滾動設計來為128列滾動, 以下是使用水平滾動的例子
向右滾動一列
向左滾動一列
水平滾動配置例子
2.垂直和水平滾動配置(Continuos Vertical and Horizontal Scroll Setup)(29h/2Ah)
此指令用於配置垂直和水平滾動參數和確定滾動起始頁、終止頁、滾動速度和垂直滾動偏移
B[2:0], C[2:0], D[2:0]用於配置垂直滾動, E[5:0]用於配置垂直滾動偏移, 所有這些字節用於設置斜線(Diagonal, 垂直滾動+水平滾動)
如果垂直滾動偏移為0, 那么只將發生水平滾動(和命令26/27h一樣)
滾動需要在調用此命令前禁用(2Eh), 否則RAM中的內容將會出錯
以下是使用垂直和水平滾動的例子:
3.禁用滾動(Deactivate Scroll)(2Eh)
此指令用於停止滾動, 在調用命令2Eh后, RAM的數據需要被重寫
4.啟用滾動(Activate Scroll)(2Fh)
此指令用於啟動滾動, 並且只能在滾動配置參數經過調用命令26h/27h/29h/2Ah后調用。最后調用滾動參數命令時的配置將覆蓋之間調用過時設置的配置
以下操作會在啟用滾動后被禁止
-1.對RAM的訪問
-2.改變水平滾動配置參數
5.設置垂直滾動區(Set Vertical Scroll Area)(A3h)
此指令用於設置垂直滾動區, 對於垂直滾動功能(29/2Ah), 垂直滾動的行數可以大於或小於復用率(MUX ratio)
————————————————
版權聲明:本文為CSDN博主「專注於無線通信的蓬勃」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/XiaoXiaoPengBo/java/article/details/81329770