OLED 12864屏幕指南
原文鏈接:https://www.jianshu.com/p/7e54ebb387ee
OLED12864屏幕指南
OLED 屏幕作為一種新型的顯示技術(shù),其自身可以發(fā)光,亮度,對(duì)比度高,功耗低,在當(dāng)下備受追捧。而在我們正常的顯示調(diào)整參數(shù)過(guò)程中,我們?cè)絹?lái)越多的使用這種屏幕。我們使用的一般是分辨率為 128x64 ,屏幕尺寸為 0.96 寸。由于其較小的尺寸和比較高的分辨率,讓它有著很好的顯示效果和便攜性。
| 分辨率 | 128x64 |
| 電壓 | 3.3V-5V |
| 協(xié)議 | IIC/SPI |
?
目前我們經(jīng)常使用的 OLED 屏幕一般有兩種接口,IIC 或者 SPI ,兩者使用的通信協(xié)議稍有不同,這里以 SPI 協(xié)議的 OLED 屏幕為例,帶來(lái)它的使用方法。
模塊接口定義
| GND | 電源地 |
| VCC | 電源正(3~5.5V) |
| D0 | OLED 的 D0 腳,在 SPI 和 IIC 通信中為時(shí)鐘管腳 |
| D1 | OLED 的 D1 腳,在 SPI 和 IIC 通信中為數(shù)據(jù)管腳 |
| RES | OLED 的 RES#腳,用來(lái)復(fù)位(低電平復(fù)位) |
| DC | OLED 的 D/C#E 腳,數(shù)據(jù)和命令控制管腳 |
| CS | OLED 的 CS#腳,也就是片選管腳 |
我們自己打板制作做的oled
使用方法
一般OLED屏幕都會(huì)有一套相配套的程序庫(kù),我一般用的是中景園電子的庫(kù),因?yàn)樗业膸?kù)移植比較方便,各種單片機(jī)都適用。
BMP.H?是存放的圖片數(shù)據(jù),也就是大家對(duì)一 BMP 圖片取模的數(shù)據(jù) Oledfont.H 主要是存放的字庫(kù)數(shù)據(jù),包含常用的字符和用戶自己所取模的中文
OLED.C?主要是函數(shù)的操作大家使用前需要將其添加到自己的程序工程文檔中。
OLED.H?這 個(gè) 主 要 是 函 數(shù) 說(shuō) 明 和 管 腳 定 義
大家在使用前需要將以上幾個(gè)文件添加到自己的單片機(jī)工程文檔中,然后在進(jìn)行進(jìn)一步的修改。大家需要對(duì)文檔中的一部分初始化內(nèi)容進(jìn)行更改適配:主要包括IO初始化,延時(shí)函數(shù)初始化,IO方向函數(shù)定義。
以51單片機(jī)為例
sbit OLED_CS=P1^4; //片選 sbit OLED_RST =P1^2;//復(fù)位 sbit OLED_DC =P1^3;//數(shù)據(jù)/命令控制 sbit OLED_SCL=P1^0;//時(shí)鐘 D0(SCL) sbit OLED_SDIN=P1^1;//D1(MOSI) 數(shù)據(jù)上面五行是對(duì)接口管腳的定義,而下面的十行則是對(duì)管腳定義重新做了一次更為統(tǒng)一的定義,這種統(tǒng)一的定義極大的提高了程序的可移植性,這樣只要前面五個(gè)腳的定義完成了,程序移植基本上就完成了。
#define OLED_CS_Clr() OLED_CS=0 #define OLED_CS_Set() OLED_CS=1 #define OLED_RST_Clr() OLED_RST=0 #define OLED_RST_Set() OLED_RST=1 #define OLED_DC_Clr() OLED_DC=0 #define OLED_DC_Set() OLED_DC=1 #define OLED_SCLK_Clr() OLED_SCL=0 #define OLED_SCLK_Set() OLED_SCL=1 #define OLED_SDIN_Clr() OLED_SDIN=0 #define OLED_SDIN_Set() OLED_SDIN=1;而其他單片機(jī)還需要在 Oled_Init() 函數(shù)中加入對(duì) IO 口初始化以及端口時(shí)鐘初始化的相關(guān)代碼,配置為自己將要使用的 IO 口,因?yàn)椴捎玫氖悄M SPI,對(duì) IO 口并沒(méi)有太多的要求,只要不與其他 IO 口使用復(fù)用即可
例如在 STM32 單片機(jī)中,對(duì) IO 口,輸出模式,端口時(shí)鐘等進(jìn)行配置。
之后是硬件接線,SPI協(xié)議的屏幕有7根線,其中包括兩根電源線,另外的五根線則需要和程序定義的SPI端口一一對(duì)應(yīng),連接到單片機(jī)或者樹莓派等設(shè)備上。
完成以上工作之后,我們就可以調(diào)用相關(guān)函數(shù),進(jìn)行顯示了。
實(shí)際編寫
這里我們首先在main.c文件里用#include”oled.h”,方便我們進(jìn)行函數(shù)調(diào)用,然后在main()函數(shù)中,while(1)前調(diào)用oled_init();,對(duì) oled 屏幕進(jìn)行初始化,然后我們?cè)僬{(diào)用oled_clear();,完成屏幕初始化清屏。并在屏幕上打印出 ”Hello world“。
例:在屏幕上打印hello world! #inlcude “oled.h”int main() {timer_init();oled_init();oled_clear();while(1){oled_ShowString(0,0,"Hello World!");//前兩位數(shù)字為字母顯示在屏幕上的位置} }顯示效果
另外常用的函數(shù)包括:
- OLED_ShowChar(u8 x,u8 y,u8 chr);//顯示一個(gè)字符函數(shù),參數(shù)為屏幕坐標(biāo)位置,和字符值
- OLED_ShowNum(u8 x,u8 y,u32 num,u8 len,u8 size);//顯示一個(gè)數(shù)字函數(shù),參數(shù)為屏幕坐標(biāo),要顯示的數(shù)字,這個(gè)數(shù)字的長(zhǎng)度,顯示數(shù)字的大小
- OLED_ShowString(u8 x,u8 y, u8 *p);//顯示一個(gè)字符串函數(shù),參數(shù)為屏幕坐標(biāo),字符串的首地址指針
- OLED_ShowCHinese(u8 x,u8 y,u8 no);//顯示一個(gè)漢字,參數(shù)為屏幕坐標(biāo)和在漢字字符庫(kù)Oledfont.H中的字符數(shù)組
其中屏幕坐標(biāo)對(duì)應(yīng)的就是 128x64 的一個(gè)坐標(biāo)面,其中 x 為 0-127 內(nèi)的數(shù)字任意移動(dòng),而 y 則和顯示的字符大小有關(guān),正常我們顯示 8x16 的字符,oled 可以顯示 4行,則對(duì)應(yīng)的 y 坐標(biāo)范圍就是 0-3。
使用函數(shù)庫(kù)中的函數(shù)實(shí)現(xiàn)顯示圖片,漢字
因?yàn)閛led屏幕本身并沒(méi)有圖片庫(kù)和漢字庫(kù),要顯示漢字或者圖片只能通過(guò)取模的方式來(lái)實(shí)現(xiàn)。
取模主要有三種一是圖片、字符、漢字三種,取的原理是一樣的。
打開 PCtoLCD2002.exe 軟件
?
PCtoLCD2002
選擇圖形模式,打開一個(gè)BMP圖片
字模設(shè)置
按圖片所示進(jìn)行設(shè)置
然后將得到的bmp模 數(shù)組放到BMP.h當(dāng)中
最后在程序中調(diào)用Oled_Drawbmp();即可實(shí)現(xiàn)顯示
圖片原始BMP文件
顯示效果
字符的取模和圖片取模方式類似,取好字模放到?oledfont.h中,然后使用Oled_ShowChinese()就可以了
OLED 還可以實(shí)現(xiàn)更多的顯示功能,如描繪幾何圖形,實(shí)現(xiàn)動(dòng)態(tài)波形顯示,感興趣的話可以在網(wǎng)上找到更多的相關(guān)資料,自己來(lái)實(shí)現(xiàn),如果使用 Arduino 的話還有一個(gè)十分強(qiáng)大的 u8g2 庫(kù)可以調(diào)用,實(shí)現(xiàn)強(qiáng)大的功能,同時(shí)這個(gè)庫(kù)也很容易移植到其他平臺(tái)使用,同樣可以自己嘗試,又時(shí)間的話后面我還會(huì)寫一些關(guān)于這些繪圖庫(kù)的應(yīng)用。
推薦給大家的開源庫(kù)地址:
https://github.com/olikraus/u8g2
http://idown.win/category/pangpangoled%E5%9B%BE%E5%BD%A2%E5%BA%93/
總結(jié)
以上是生活随笔為你收集整理的OLED 12864屏幕指南的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: FPGA笔记(八)-驱动12864
- 下一篇: 学习记录 | ZigBee协议栈工作流程