新聞中心

EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 瑞薩RA0單片機(jī)連載之―面向?qū)ο笾甀2C驅(qū)動(dòng)OLED

瑞薩RA0單片機(jī)連載之―面向?qū)ο笾甀2C驅(qū)動(dòng)OLED

作者:lulugl 時(shí)間:2025-04-18 來(lái)源:EEPW 收藏


本文引用地址:http://www.2s4d.com/article/202504/469575.htm

1   前言

OLED是非常常用的顯示設(shè)備,可以由4線、3線的spi驅(qū)動(dòng),也可以使用2線的IIC來(lái)驅(qū)動(dòng)。百問(wèn)網(wǎng)提供了spi_OLED的驅(qū)動(dòng)例程,這次使用IIC來(lái)驅(qū)動(dòng),并且使用基于面向?qū)ο蟮木幊虂?lái)實(shí)現(xiàn)。

2   實(shí)現(xiàn)步聚

1.配置IIC,打開(kāi)RASC后,在棧中增加rau_master_I2C,并設(shè)置channel為0b20即通道2,選擇SCL為P112與SDA為P110。

1744987216768564.png

【注】我原來(lái)設(shè)置了為通道0或者通道1,但是都與UART或的外接晶振的IO有沖突,所以只能選擇這個(gè)通道但是他還是與tx、LED有沖突,如果自己的設(shè)計(jì)的話還需要考慮到IO的沖突問(wèn)題。

2.生成代碼后,我拷貝drv_oled.h/c 以及driv_spi.h到工程之中。

image.png

1744987256301838.png

3.在原來(lái)的OLED工程之中,是使用spi來(lái)驅(qū)動(dòng)的,同時(shí)原來(lái)的RA5他的內(nèi)存與頻率相比RA0要高很多,需要進(jìn)行很多的更改。首先添加回調(diào)函數(shù),回調(diào)函數(shù)中判斷接收狀態(tài),并更新:

image.png

image.png

4.接著修改發(fā)送等待超時(shí)函數(shù),在我們向i2c 總線發(fā)送數(shù)據(jù)結(jié)事后,我們需要用這個(gè)函數(shù)來(lái)判斷是否發(fā)送結(jié)束的標(biāo)志位。

image.png

5.修改向ssd1306 寫入一個(gè)寄存器的功能函數(shù),在這個(gè)函數(shù)中,我們要組裝一個(gè)buff 用于向i2c 總線寫入數(shù)據(jù)的,由于向ssd1306 寫入寄存器,第一個(gè)字節(jié)為0x00,所以組裝為[0x00, cmd]。

image.png

image.png

6.組裝向ssd1306 發(fā)送一整個(gè)buff 的命令:

image.png

【注】這里原來(lái)使用malloc 進(jìn)行了重新的內(nèi)存申請(qǐng),但是由于這個(gè)MCU 的內(nèi)存有限,我做了申請(qǐng),好象一直不成功,先寫成這樣,其實(shí)buf 中的0 位是被清除掉了的,所以會(huì)有點(diǎn)問(wèn)題,在后面我將重新這個(gè)驅(qū)動(dòng),這里先實(shí)現(xiàn)基本功能。

7.編寫測(cè)試函數(shù)如下:

image.png

image.png

image.png

其中第一段是向整個(gè)屏寫入了0x00即全屏為黑色,第二段是寫入oxFF 即全白。這樣就實(shí)現(xiàn)了清屏-》全亮的效果。

3   總結(jié)

在面向?qū)ο蟮木幊讨?,?duì)OLED 進(jìn)行的封裝,在使用的過(guò)程中,可以實(shí)現(xiàn)少量的低層代碼的修改即中實(shí)現(xiàn)模塊化的功能實(shí)現(xiàn)。下一步,我將補(bǔ)全字符、圖片的功能。

(本文來(lái)源于《EEPW》



評(píng)論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉