电子产业一站式赋能平台

PCB联盟网

搜索
查看: 28|回复: 0
收起左侧

基于MCU通过I2C实现OLED显示原理和方法

[复制链接]

666

主题

666

帖子

8835

积分

高级会员

Rank: 5Rank: 5

积分
8835
发表于 2025-6-5 11:58:00 | 显示全部楼层 |阅读模式
关注+星标公众,不错过精彩内容来源 | 瑞萨嵌入式小百科
I2C(Inter-Integrated Circuit)是一种串行通信协议,常用于连接低速外设。

由于I2C在很多场景下都会使用,所以很多单片机内部都集成了I2C控制器,
通过I2C实现OLED显示,主要涉及硬件连接、通信协议和软件驱动。

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

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

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

4zhujnwaxog64087606628.png

4zhujnwaxog64087606628.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设备的数据传输

    wpu3jtsq3df64087606729.png

    wpu3jtsq3df64087606729.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)即有机发光二极管。

    e1iwhna10a564087606829.jpg

    e1iwhna10a564087606829.jpg


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

    0.96英寸OLED基本参数
  • 工作电压:3.3~5V(内置3.3V LDO,IIC通信接口电平是3.3V的)
  • 像素点阵规模:128*64(128列,64行,共8192颗LED)
  • 驱动IC:SSD1306

    OLED模块电路

    5hrev30far464087606929.png

    5hrev30far464087606929.png


    SSD1306驱动电路

    pwjo202o0xs64087607029.png

    pwjo202o0xs64087607029.png


    详见:oled i2c , SSD1306 Datasheet .
    https://www.alldatasheet.com/datasheet-pdf/pdf/1179026/ETC2/SSD1306.html

    2
    方法说明
  • 使用e2 studio建立硬件IIC框架;
  • 编译OLED相关主函数,特别是初始化、打开IIC、写入IIC等部分,或移植相关函数,并进行修改;
  • 运行程序,构建项目,调试项目。
    [/ol]
    3
    操作说明

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


    onudp52mydo64087607129.png

    onudp52mydo64087607129.png


  • 移植并修改oled.c、oled.h、oledfont.h、bmp.h文件;
  • 构建主函数hal_entry.c,调试项目。

    4
    系统框图

    gnri0k2t3bu64087607229.jpg

    gnri0k2t3bu64087607229.jpg


    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
    演示视频

    ce2dbidlklg64087607329.gif

    ce2dbidlklg64087607329.gif


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

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

    offdbqqoggb64087607429.jpg

    offdbqqoggb64087607429.jpg

    用寄存器点亮 LED 灯:新手必学IO的几种模式

    aq0s2csxcop64087607529.jpg

    aq0s2csxcop64087607529.jpg

    基于MPU实现9轴驱动助力多关节机器人

    zwbagghmark64087607629.jpg

    zwbagghmark64087607629.jpg

    如何轻松在MPU上部署离线版DeepSeek -R1大语言模型
  • 回复

    使用道具 举报

    发表回复

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条


    联系客服 关注微信 下载APP 返回顶部 返回列表