瑞薩RA0單片機連載之―面向?qū)ο笾甀2C驅(qū)動OLED
1 前言
OLED是非常常用的顯示設(shè)備,可以由4線、3線的spi驅(qū)動,也可以使用2線的IIC來驅(qū)動。百問網(wǎng)提供了spi_OLED的驅(qū)動例程,這次使用IIC來驅(qū)動,并且使用基于面向?qū)ο蟮木幊虂韺崿F(xiàn)。
2 實現(xiàn)步聚
1.配置IIC,打開RASC后,在棧中增加rau_master_I2C,并設(shè)置channel為0b20即通道2,選擇SCL為P112與SDA為P110。
【注】我原來設(shè)置了為通道0或者通道1,但是都與UART或的外接晶振的IO有沖突,所以只能選擇這個通道但是他還是與tx、LED有沖突,如果自己的設(shè)計的話還需要考慮到IO的沖突問題。
2.生成代碼后,我拷貝drv_oled.h/c 以及driv_spi.h到工程之中。
3.在原來的OLED工程之中,是使用spi來驅(qū)動的,同時原來的RA5他的內(nèi)存與頻率相比RA0要高很多,需要進(jìn)行很多的更改。首先添加回調(diào)函數(shù),回調(diào)函數(shù)中判斷接收狀態(tài),并更新:
4.接著修改發(fā)送等待超時函數(shù),在我們向i2c 總線發(fā)送數(shù)據(jù)結(jié)事后,我們需要用這個函數(shù)來判斷是否發(fā)送結(jié)束的標(biāo)志位。
5.修改向ssd1306 寫入一個寄存器的功能函數(shù),在這個函數(shù)中,我們要組裝一個buff 用于向i2c 總線寫入數(shù)據(jù)的,由于向ssd1306 寫入寄存器,第一個字節(jié)為0x00,所以組裝為[0x00, cmd]。
6.組裝向ssd1306 發(fā)送一整個buff 的命令:
【注】這里原來使用malloc 進(jìn)行了重新的內(nèi)存申請,但是由于這個MCU 的內(nèi)存有限,我做了申請,好象一直不成功,先寫成這樣,其實buf 中的0 位是被清除掉了的,所以會有點問題,在后面我將重新這個驅(qū)動,這里先實現(xiàn)基本功能。
7.編寫測試函數(shù)如下:
其中第一段是向整個屏寫入了0x00即全屏為黑色,第二段是寫入oxFF 即全白。這樣就實現(xiàn)了清屏-》全亮的效果。
3 總結(jié)
在面向?qū)ο蟮木幊讨校瑢LED 進(jìn)行的封裝,在使用的過程中,可以實現(xiàn)少量的低層代碼的修改即中實現(xiàn)模塊化的功能實現(xiàn)。下一步,我將補全字符、圖片的功能。
(本文來源于《EEPW》202504)
評論