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