標(biāo)題: 7針腳OLED用spi通訊的單片機(jī)源碼與資料 [打印本頁(yè)]
作者: xiaowuya07 時(shí)間: 2018-7-25 00:13
標(biāo)題: 7針腳OLED用spi通訊的單片機(jī)源碼與資料
OLED使用經(jīng)歷
手里有7針腳的OLED屏幕,也是閑來(lái)無(wú)聊,就研究了一下如何使用。
大概翻了一下廠家的手冊(cè),默認(rèn)是SPI通訊,啊,他為什么不能是IIC通訊呢,不過(guò)也好,正好學(xué)習(xí)一下SPI。
先說(shuō)SPI通訊,百度了一下SPI是同步串行全雙工通訊總線。現(xiàn)在想想,DS18B20的單總線,eeprom的半雙工IIC,OLED的全雙工SPI就都玩過(guò)一把了。優(yōu)缺點(diǎn)就不說(shuō)了,現(xiàn)在的水平還是體會(huì)不到的,直接說(shuō)怎么用。SPI可以接四根線(發(fā)數(shù)據(jù)與讀數(shù)據(jù))或者是接三線(只發(fā)數(shù)據(jù))。
四根線分別是:SDI(數(shù)據(jù)輸入),SDO(數(shù)據(jù)輸出)SCLK(時(shí)鐘)CS(片選)
1. SDO/MOSI:主設(shè)備發(fā)送數(shù)據(jù),從設(shè)備接受數(shù)據(jù)
2. SDI/MISO:主設(shè)備接受數(shù)據(jù),從設(shè)備發(fā)送數(shù)據(jù)
3. SCLK:時(shí)鐘信號(hào),由主設(shè)備產(chǎn)生
4. CS:當(dāng)從設(shè)備有很多時(shí),每個(gè)設(shè)備都有一個(gè)CS引腳連接到主設(shè)備,當(dāng)主設(shè)備想要連接到A從設(shè)備但是又不想連接到B的從設(shè)備時(shí),就可以通過(guò)拉低A設(shè)備的CS引腳而不拉低B設(shè)備的CS引腳來(lái)控制不同的從設(shè)備是否工作
盜一張圖SPI通訊的開(kāi)始與結(jié)束比IIC簡(jiǎn)單多了,CS為低就開(kāi)始,CS為高就結(jié)束
然后就是時(shí)鐘極性(CPOL)與時(shí)鐘相位(CPHA)了,感覺(jué)是不是聽(tīng)上去就高大上
主機(jī)和從機(jī)的時(shí)鐘極性時(shí)鐘相位必須一樣,時(shí)鐘極性與時(shí)鐘相位通過(guò)不通過(guò)01組合,一共有四種模式
1. mode0:CPOL = 0,CPHA = 0
CPOL=0,CPHA=0:此時(shí)空閑態(tài)時(shí),SCLK處于低電平,數(shù)據(jù)采樣是在第1個(gè)邊沿,也就是SCLK由低電平到高電平的跳變,所以數(shù)據(jù)采樣是在上升沿,數(shù)據(jù)發(fā)送是在下降沿。
2.Mode1:CPOL= 0,CPHA = 1
CPOL=0,CPHA=1:此時(shí)空閑態(tài)時(shí),SCLK處于低電平,數(shù)據(jù)發(fā)送是在第1個(gè)邊沿,也就是SCLK由低電平到高電平的跳變,所以數(shù)據(jù)采樣是在下降沿,數(shù)據(jù)發(fā)送是在上升沿。
3.mode2:CPOL= 1,CPHA = 0
CPOL=1,CPHA=0:此時(shí)空閑態(tài)時(shí),SCLK處于高電平,數(shù)據(jù)采集是在第1個(gè)邊沿,也就是SCLK由高電平到低電平的跳變,所以數(shù)據(jù)采集是在下降沿,數(shù)據(jù)發(fā)送是在上升沿。
4.mode3:CPOL = 1,CPHA = 1
CPOL=1,CPHA=1:此時(shí)空閑態(tài)時(shí),SCLK處于高電平,數(shù)據(jù)發(fā)送是在第1個(gè)邊沿,也就是 SCLK由高電平到低電平的跳變,所以數(shù)據(jù)采集是在上升沿,數(shù)據(jù)發(fā)送是在下降沿。
SPI的時(shí)鐘極性和時(shí)鐘相位一般都是是從機(jī)出場(chǎng)時(shí)就設(shè)定好的,主機(jī)根據(jù)從機(jī)去配
嗯,以上差不多就是我對(duì)SPI使用的理解了,下面說(shuō)一說(shuō)OLED
OLED的7個(gè)引腳分別為GND,VCC(3.3-5V)D0(時(shí)鐘線)D1(數(shù)據(jù)線)RES(復(fù)位線)DC(數(shù)據(jù)命令選擇線)和CS(SPI片選線)手上的OLED用的驅(qū)動(dòng)芯片是SSD1306,那么就先從最基礎(chǔ)的SPI與SSD1306通訊開(kāi)始主要就是這么一個(gè)函數(shù)OLED_CS_Clr();首先傳來(lái)兩個(gè)數(shù)據(jù),一個(gè)dat,一個(gè)cmd,如果cmd是1的話說(shuō)明發(fā)送的是指令,要將DC拉高。DC確定完后拉低CS確定從機(jī)。之后開(kāi)始傳輸數(shù)據(jù)。數(shù)據(jù)從高到低發(fā)送,數(shù)據(jù)手冊(cè)上有說(shuō)明按照次序?qū)?shù)據(jù)線至高至低,每次循環(huán)完一次后將時(shí)鐘拉高,數(shù)據(jù)左移一位。這是SPI的時(shí)鐘極性和時(shí)鐘相位的所規(guī)定,總之SPI通訊是這么一回事,具體還得看手冊(cè)。其中還是有一點(diǎn)小問(wèn)題,圖上的sclk(d0)在空閑情況下可高可低,但是在改動(dòng)過(guò)程序后如果不將空閑時(shí)時(shí)鐘線拉高的話是顯示不出圖像的,也就是sclk在空閑情況下只能是高。但是為什么數(shù)據(jù)手冊(cè)上可高可低,我也確實(shí)不得而知,要是有大神懂的話就告訴我唄。
還有一個(gè)問(wèn)題,SPI是有4根線的,現(xiàn)在只有三根,還有一根數(shù)據(jù)接收線。在我找遍了百度都找不到后,不得不翻開(kāi)了數(shù)據(jù)手
串行模式下只允許寫(xiě)入操作,那剩下的讀取線自然是沒(méi)有了,好奇怪4線和3線有什么區(qū)別。。。哎英語(yǔ)還是得好好學(xué)啊。
好了,基本的通訊寫(xiě)完了,那剩下就是一些零散的寄存器配置了,要是可以搞懂SSD1306的寄存器配置還得讀完59頁(yè)的數(shù)據(jù)手冊(cè)。。。。。。。還是偷個(gè)懶用原廠代碼吧,里面有一些基本函數(shù)和字庫(kù),做簡(jiǎn)單的顯示用還是應(yīng)付的過(guò)來(lái)的。漢字用取模軟件可以出,模式是列行式,圖片的話吧圖片轉(zhuǎn)成bmp格式大小轉(zhuǎn)換成128X64就能顯示。
最后上幾張測(cè)試圖如果要用IIC的話圖中的R3電阻要放到R4的
程序是根據(jù)廠家的程序一個(gè)一個(gè)函數(shù)調(diào)過(guò)來(lái)的,自己做了一個(gè)OLED的代碼庫(kù),這里還是給出原廠代碼吧。圖片轉(zhuǎn)換器和取模軟件都在文件夾中。
-
1532447930169.jpg
(1.6 MB, 下載次數(shù): 132)
下載附件
2018-7-25 00:09 上傳
-
t01b6660b12621e7f16.jpg
(5.7 KB, 下載次數(shù): 117)
下載附件
2018-7-25 00:09 上傳
-
TIM圖片20180724233052.jpg
(2.66 MB, 下載次數(shù): 107)
下載附件
2018-7-25 00:09 上傳
-
TIM圖片20180724233101.jpg
(1.74 MB, 下載次數(shù): 108)
下載附件
2018-7-25 00:09 上傳
-
TIM圖片20180724233112.jpg
(2.28 MB, 下載次數(shù): 129)
下載附件
2018-7-25 00:09 上傳
-
Snipaste_2018-07-24_21-46-14.png
(60.46 KB, 下載次數(shù): 119)
下載附件
2018-7-25 00:09 上傳
-
Snipaste_2018-07-24_22-39-32.png
(45.17 KB, 下載次數(shù): 106)
下載附件
2018-7-25 00:09 上傳
-
Snipaste_2018-07-24_22-47-33.png
(46.55 KB, 下載次數(shù): 98)
下載附件
2018-7-25 00:09 上傳
-
Snipaste_2018-07-24_23-40-19.png
(79.73 KB, 下載次數(shù): 113)
下載附件
2018-7-25 00:09 上傳
-
Snipaste_2018-07-25_00-09-06.png
(103.93 KB, 下載次數(shù): 124)
下載附件
2018-7-25 00:09 上傳
-
0.png
(49.26 KB, 下載次數(shù): 120)
下載附件
2018-7-25 01:35 上傳
-
-
OLED使用經(jīng)歷.zip
2018-7-25 00:12 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
12.04 MB, 下載次數(shù): 318, 下載積分: 黑幣 -5
作者: xiaowuya07 時(shí)間: 2018-7-25 00:23
時(shí)鐘極性和時(shí)鐘相位通過(guò)不同組合
作者: xiaowuya07 時(shí)間: 2018-7-25 00:24
主要就是這么一個(gè)函數(shù)OLED_WR_Byte(),這兩處寫(xiě)錯(cuò)了,才看見(jiàn)
作者: 發(fā)燒人生 時(shí)間: 2018-10-3 20:25
謝謝樓主分享,很有用
作者: animation 時(shí)間: 2018-12-30 13:29
怎么改呢
作者: Smartaotao 時(shí)間: 2019-7-7 18:43
I2C的話電阻要更改嗎
作者: 由我們主宰 時(shí)間: 2019-8-28 08:23
要啊,你買(mǎi)的OLED背后一般有寫(xiě)IIC電阻有哪些,spi3線和spi四線有哪些電阻要焊上
作者: 10494771 時(shí)間: 2019-11-27 09:06
主要就是這么一個(gè)函數(shù)OLED_WR_Byte(),這兩處寫(xiě)錯(cuò)了,才看見(jiàn)
作者: nnlynn 時(shí)間: 2023-7-22 17:14
可以寫(xiě)一下oled顯示數(shù)字的程序嗎
歡迎光臨 (http://www.torrancerestoration.com/bbs/) |
Powered by Discuz! X3.1 |