单片机通过I²C实现OLED显示原理和实现方法

关注+星标公众,不错过精彩内容

直接来源 | 瑞萨嵌入式小百科

I²C(Inter-Integrated Circuit)是一种串行通信协议,常用于连接低速外设。

由于I²C在很多场景下都会使用,所以很多单片机内部都集成了I²C控制器,

通过I²C实现OLED显示,主要涉及硬件连接、通信协议和软件驱动。

下面就结合瑞萨 RA0E1单片机以及e2 studio工具给大家讲述一下通过I²C实现OLED显示原理和实现方法。

RA0E1单片机概述

1efac6d6f1018b0028d772f4e4226943.png

  • 32MHz Arm Cortex-M23内核

  • 高达64KB闪存和12KB SRAM 

  • 1KB数据闪存(100,000次编程/擦除 (P/E) 周期)

  • 16引脚和32引脚封装选项

  • 1.6V至5.5V的宽电压范围

  • TAU(16位通用PWM定时器)

  • TML32(32位间隔定时器)

  • 实时时钟

  • 12位模数转换器

  • 温度传感器

  • SAU(UART、简单SPI、简单 I2C)

  • UART

  • I2C总线

  • 随机数发生器

  • 安全功能

  • +-1%高精度、高速片上振荡器

  • 灵活的电源架构,具有快速唤醒功能

  • HAL驱动器代码

  • 支持Arm生态系统和瑞萨电子原创开发工具

1

背景

简单介绍IIC通信协议、OLED显示原理、SS1306驱动IC等。

IIC通信协议

IIC(Inter-Integrated Circuit)即集成电路总线。它是一种串行通信总线,使用多主从架构,如图所示。

ff86c1abde96fb7783355105ea702e51.png

关于IIC:

https://www.i2c-bus.org/

飞利浦Philips公司于二十世纪八十年代初设计,最初是为了让主板、嵌入式系统或手机用以连接低速周边设备。

自2006年10月1日起,使用IIC协议不需要支付专利费,但制造商仍然需要付费以获取IIC从属设备地址。

IIC通信协议的功能特点如下

  • 只需要两条总线线路

  • 没有严格的波特率要求,例如使用RS232,主站生成总线时钟

  • 所有组件之间存在简单的主/从关系连接到总线的每个设备都可通过唯一地址进行软件寻址

  • IIC是真正的多主总线,提供仲裁和冲突检测

    https://www.i2c-bus.org/MultiMaster/

IIC使用两根线进行通信:一根时钟线SCL,一根数据线 SDA。

IIC将SCL处于高时SDA拉低的动作作为开始信号,SCL处于高时SDA拉高的动作作为结束信号;

传输数据时,SDA在SCL低电平时改变数据,在SCL高电平时保持数据,每个SCL脉冲的高电平传递1位数据。

7-bit设备的数据传输

18e02ad38f3dbaaa98e2184b26be5f3f.png

  • 软件模拟IIC一般是用GPIO管脚,软件控制管脚高低电平输出,以模拟IIC通信波形。

  • 硬件IIC对应芯片上的IIC外设,有相应IIC驱动电路,其所使用的IIC管脚也是专用。

软硬件IIC对比

  • 硬件IIC效率远高于软件IIC,软件IIC不受管脚限制,接口更灵活;

  • 软件模拟IIC是通过GPIO软件模拟寄存器的工作方式,而硬件IIC是直接调用内部寄存器进行配置;

  • 性能方面,硬件IIC由于由专门的硬件模块处理,减少了软件干预,因此具有更高的可靠性和稳定性;

  • 硬件IIC模块可以在后台自动处理数据传输,释放CPU资源,因此CPU占用率更低;

  • 软件IIC的代码量多于硬件IIC,相比之下更为复杂;

  • 硬件IIC通常还支持更高的通信速率。

OLED显示原理

OLED(Organic Electroluminescence Display)即有机发光二极管。

5906dd8c159e3a33147adaea25c4c8a5.jpeg

OLED由于同时具备自发光,不需背光源、对比度高、厚度薄、视角广、反应速度快、可用于挠曲性面板、使用温度范围广、构造及制程较简单等优异特性,被认为是下一代的平面显示器新兴应用技术。

0.96英寸OLED基本参数

  • 工作电压:3.3~5V(内置3.3V LDO,IIC通信接口电平是3.3V的)

  • 像素点阵规模:128*64(128列,64行,共8192颗LED)

  • 驱动IC:SSD1306

OLED模块电路

df31b9b9363f47c486d84c7d87f51852.png

SSD1306驱动电路

0287bd5d944710e8e2e4b44f42ed961f.png

详见:oled i2c , SSD1306 Datasheet .

https://www.alldatasheet.com/datasheet-pdf/pdf/1179026/ETC2/SSD1306.html

2

方法说明

  1. 使用e2 studio建立硬件IIC框架;

  2. 编译OLED相关主函数,特别是初始化、打开IIC、写入IIC等部分,或移植相关函数,并进行修改;

  3. 运行程序,构建项目,调试项目。

3

操作说明

  • 新建项目;

  • 引脚Pins定义;

  • 新建Stacks - IIC master,并修改属性,定义地址0x3C;

178e3d28af5f9dd55d25e93296822ae8.png

  • 移植并修改oled.c、oled.h、oledfont.h、bmp.h文件;

  • 构建主函数hal_entry.c,调试项目。

4

系统框图

0d183fd9f7be02ef8c921b397e8047f9.jpeg

5

代码

主函数

hal_entry.c

左右滑动查看完整内容

while(1)
{
        /*---------- Picture ------------*/
        OLED_Clear();//clear screen
        OLED_DrawBMP(0,0,128,8,BMP1);
        R_BSP_SoftwareDelay(500, BSP_DELAY_UNITS_MILLISECONDS);
        /*----------- Text ------------*/
        OLED_Clear();//clear screen
        OLED_ShowString(0,0,"RA",16);
        OLED_ShowCHinese(16,0,0);//生
        OLED_ShowCHinese(32,0,1);//态
        OLED_ShowCHinese(48,0,2);//工
        OLED_ShowCHinese(64,0,3);//作
        OLED_ShowCHinese(80,0,4);//室
        OLED_ShowString(0,2,"2024.12.14",16);
        OLED_ShowString(0,4,"Renesas RA0E1",16);
        R_BSP_SoftwareDelay(500, BSP_DELAY_UNITS_MILLISECONDS);
}
oled.c
oled.h
oledfont.h
bmp.h

6

结果

如主代码所示,图片和文字交替显示。

左右滑动查看完整内容

while(1)
{
        /*---------- Picture ------------*/
        OLED_Clear();//clear screen
        OLED_DrawBMP(0,0,128,8,BMP1);
        R_BSP_SoftwareDelay(500, BSP_DELAY_UNITS_MILLISECONDS);
        /*----------- Text ------------*/
        OLED_Clear();//clear screen
        OLED_ShowString(0,0,"RA",16);
        OLED_ShowCHinese(16,0,0);//生
        OLED_ShowCHinese(32,0,1);//态
        OLED_ShowCHinese(48,0,2);//工
        OLED_ShowCHinese(64,0,3);//作
        OLED_ShowCHinese(80,0,4);//室
        OLED_ShowString(0,2,"2024.12.14",16);
        OLED_ShowString(0,4,"Renesas RA0E1",16);
        R_BSP_SoftwareDelay(500, BSP_DELAY_UNITS_MILLISECONDS);
}

每隔500ms刷新页面一次。

7

演示视频

2f94c38cb209f1e24253b5150362fae4.gif

8

最后

通过以上实践操作,你能掌握瑞萨RA0E1单片机的开发流程、了解I2C通信协议,以及外设OLED的基础原理。

------------ END -----------

单片机4种互补PWM模式原理和实现方法

DeepSeek上RA8单片机,实现教程来了!

基于RA2单片机移植RTT打印功能

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值