新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 瑞萨RA0单片机连载之―面向对象之I2C驱动OLED

瑞萨RA0单片机连载之―面向对象之I2C驱动OLED

作者:lulugl 时间:2025-04-18 来源:EEPW 收藏


本文引用地址:https://www.eepw.com.cn/article/202504/469575.htm

1   前言

OLED是非常常用的显示设备,可以由4线、3线的spi驱动,也可以使用2线的IIC来驱动。百问网提供了spi_OLED的驱动例程,这次使用IIC来驱动,并且使用基于面向对象的编程来实现。

2   实现步聚

1.配置IIC,打开RASC后,在栈中增加rau_master_I2C,并设置channel为0b20即通道2,选择SCL为P112与SDA为P110。

1744987216768564.png

【注】我原来设置了为通道0或者通道1,但是都与UART或的外接晶振的IO有冲突,所以只能选择这个通道但是他还是与tx、LED有冲突,如果自己的设计的话还需要考虑到IO的冲突问题。

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

image.png

1744987256301838.png

3.在原来的OLED工程之中,是使用spi来驱动的,同时原来的RA5他的内存与频率相比RA0要高很多,需要进行很多的更改。首先添加回调函数,回调函数中判断接收状态,并更新:

image.png

image.png

4.接着修改发送等待超时函数,在我们向i2c 总线发送数据结事后,我们需要用这个函数来判断是否发送结束的标志位。

image.png

5.修改向ssd1306 写入一个寄存器的功能函数,在这个函数中,我们要组装一个buff 用于向i2c 总线写入数据的,由于向ssd1306 写入寄存器,第一个字节为0x00,所以组装为[0x00, cmd]。

image.png

image.png

6.组装向ssd1306 发送一整个buff 的命令:

image.png

【注】这里原来使用malloc 进行了重新的内存申请,但是由于这个MCU 的内存有限,我做了申请,好象一直不成功,先写成这样,其实buf 中的0 位是被清除掉了的,所以会有点问题,在后面我将重新这个驱动,这里先实现基本功能。

7.编写测试函数如下:

image.png

image.png

image.png

其中第一段是向整个屏写入了0x00即全屏为黑色,第二段是写入oxFF 即全白。这样就实现了清屏-》全亮的效果。

3   总结

在面向对象的编程中,对OLED 进行的封装,在使用的过程中,可以实现少量的低层代码的修改即中实现模块化的功能实现。下一步,我将补全字符、图片的功能。

(本文来源于《EEPW》



评论


相关推荐

技术专区

关闭