本帖最后由 ppptalk 于 2018-4-11 01:14 編輯
前面的一個帖子簡單介紹了LCD1602如何顯示字符,同時整理出了一個思路:初始化,確定顯示位置,確定顯示內容。OLED模塊也是一個顯示模塊,我們關心的仍然是兩點內容,在哪里顯示,顯示什么內容。所以上面的這個思路對于OLED模塊同樣適用。只不過OLED模塊顯示的位置更多一點罷了。
LCD1602模塊每行16個空格,共2行,也就是一共有32個空格。我們在LCD1602自定義字符這一個帖子中,是從這32個空格中提取出一個空格來看成8×8的點陣(64個led),然后通過控制這64個led從而實現自定義字符。現在把這8×8的點陣放大成128×64的點陣就是OLED模塊了。
可見只要把LCD1602如何顯示字符和1602如何構造字符結合起來就很容易搞定OLED了。
1. 初識OLED模塊
OLED(Organic Light-Emitting Diode),即有機發光二極管,其實物圖如下所示. OLED由于同時具備自發光,不需背光源,對比度高,厚度薄,視角廣,反應速度快,可用于撓曲性面板,使用溫度范圍廣,構造及制程簡單等優異特性,被認為是下一代的平面顯示器新興應用技術。具有輕,薄,省電等特性,工作電壓寬度高,從2.2V到5.5V.
1.png (194.11 KB, 下載次數: 120)
下載附件
2018-4-10 21:58 上傳
以上關于OLED的介紹簡單看看就可以了,只需要知道它是128×64的點陣就行(當然也有其他尺寸的)。
2. 思路分析
前面已經講了,就是三步曲,
(1) 初始化
(2)確定顯示位置
(3)確定顯示內容
3. 操作步驟
3.1 初始化
初始化過程說明書講的很詳細了,想都不用想,照做即可
- (1)Set MUX Ratio A8h, 3Fh
- (2)Set Display Offset D3h, 00h
- (3)Set Display Start Line 40h
- (4)Set Segment re-map A0h/A1h
- (5)Set COM Output Scan Direction C0h/C8h
- (6)Set COM Pins hardware configuration DAh,02h
- (7)Set Contrast Control 81h,7Fh
- (8)Disable Entire Display On A4h
- (9)Set Normal Display A6h
- (10)Set Osc Frequency D5h, 80h
- (11)Enable charge pump regulator 8Dh, 14h
- (12)Display On AFh
復制代碼
3.2 確定顯示位置
與LCD1602的分析思路相同,要知道知道在哪里顯示,就需要先知道哪些地方能顯示。這里我們使用的oled模塊的分辨率是128×64,也就是說一共128×64個led,下面用一個128列,64行的表格來描述更清晰一些,如下表所示。顯示模塊上的每一個點就對應著這個表格的一個空格,假設你在某一個空格中放1表示這個‘點‘亮,那么放0就表示這個’點‘暗,F在我們把這個表格的每8行叫做一個PAGE,這樣一共就有8個PAGE(PAGE0~PAGE7). 由于我們在寫如數據時通常以字節為單位,那么現在把表格中的Col0這一列的Row0-Row7作為一個單位,一共8個空格,剛好對應一個字節。那么這個字節的高低位如何分配呢?最低位放到Row0-Col0對應的空格(bit0),最高位放到Row7-Col0對應的空格(bit7)。這樣當你寫入一個字節的數據0x08時,對應的坐標(Col0-Row3)這個’點‘就亮了,其他7個點為暗。
那么現在對OLED模塊的控制這個問題就轉換成了如何向以下這個表格寫入數據了。所謂確定顯示屏的位置就是確定這個表格的位置,而確定表格的位置就是確定第幾行,第幾列。注意到我們這里是把表格中的每8行看成一個基本單位,因此確定表格的位置就是確定第幾個PAGE,第幾列。
|
|
| Col 0
| Col 1
| Col 2
| Col 3
| Col 4
| …
| Col 125
| Col 126
| Col 127
| PAGE 0 | bit 0
| Row 0
| 0
|
|
|
|
|
|
|
|
| bit 1
| Row 1
| 0
|
|
|
|
|
|
|
|
| bit 2
| Row 2
| 0
|
|
|
|
|
|
|
|
| bit 3
| Row 3
| 1
|
|
|
|
|
|
|
|
| bit 4
| Row 4
| 0
|
|
|
|
|
|
|
|
| bit 5
| Row 5
| 0
|
|
|
|
|
|
|
|
| bit 6
| Row 6
| 0
|
|
|
|
|
|
|
|
| bit 7
| Row 7
| 0
|
|
|
|
|
|
|
|
| PAGE 1
| bit 0
| Row 8
|
|
|
|
|
|
|
|
|
| bit 1
| Row 9
|
|
|
|
|
|
|
|
|
| bit 2
| Row 10
|
|
|
|
|
|
|
|
|
| bit 3
| Row 11
|
|
|
|
|
|
|
|
|
| bit 4
| Row 12
|
|
|
|
|
|
|
|
|
| bit 5
| Row 13
|
|
|
|
|
|
|
|
|
| bit 6
| Row 14
|
|
|
|
|
|
|
|
|
| bit 7
| Row 15
|
|
|
|
|
|
|
|
|
| PAGE 2
|
|
|
|
|
|
|
|
|
|
|
| PAGE 3
|
|
|
|
|
|
|
|
|
|
|
| PAGE 4
|
|
|
|
|
|
|
|
|
|
|
| PAGE 5
|
|
|
|
|
|
|
|
|
|
|
| PAGE 6
|
|
|
|
|
|
|
|
|
|
|
| PAGE 7
|
|
|
|
|
|
|
|
|
|
|
|
那么如何確定PAGE和'列'呢?這個就涉及到尋址模式了,看看下面的這個圖就明白了
4.png (19.62 KB, 下載次數: 112)
下載附件
2018-4-10 22:00 上傳
這個屬于頁尋址模式,當然還有其他尋址,為了描述的簡潔性這里不列出,詳細內容查看說明書應該不難理解。這樣對這個表格位置的確定就轉換成了如何確定尋址模式,如何確定PAGE,如何確定起止列。與LCD1602類似,去查看OLED的指令表就可以搞定了,指令表中描述的非常清楚了。
3.3 確定顯示內容
顯示位置確定后,以字節為單位寫入數據就可以了,一個字節8位,對應8個led,讓它亮就寫1,讓它滅就寫0. 寫完一個字節的數據,指針會按照尋址模式的方向自動加1。這樣就能構造出各種形狀了。當然在實際操作過程中我們需要借助字模工具,讓設計過程更加便捷。
2.png (521.59 KB, 下載次數: 116)
下載附件
2018-4-10 21:58 上傳
4. 顯示模塊小結:
以上只是簡單的描述OLED顯示模塊操作的思路,忽略了很多具體的細節。但是了解了這個思路,然后去查看說明書就很容易了。
現在來小結一下,對于顯示模塊,其功能自然是顯示作用,既然是顯示,我們關心無非就是在哪里顯示,顯示什么內容。只不過對于不同的顯示模塊,有些顯示的位置多些,有些顯示的內容更加豐富一些,比如有些模塊可以顯示不同的顏色。整體來講對于顯示模塊,我們只需要做一件事情就可以了,就是在顯示畫面的任意一個位置能顯示一個點(白點,黑點或者紅點等等)。因為任何一個形狀都是由點構成的,所以你能在任意一個位置顯示一個點,那么理論上講你就能顯示各種形狀了。當然,在具體操作中我們會借助一些字模工具來完成。
5. OLED模塊參考代碼
OLED參考代碼-51HEI分享.rar
(39.66 KB, 下載次數: 523)
2018-4-10 22:14 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
10分鐘理解LCD1602液晶模塊
10分鐘理解LCD1602如何自定義字符
|