为什么使用iic驱动OLED时没有进行寻址的操作?

一般iic协议首先发送的数据就是要与之通信的设备的地址,但是我在学习OLED屏幕驱动时发现并没有这一个环节,请问这是为什么?

  • 这篇博客: 基于IIC接口的OLED数据显示实验中的 一、实验要求 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 要求:
    理解OLED屏显和汉字点阵编码原理,使用STM32F103的SPI或IIC接口实现以下功能:
    1、显示自己的学号和姓名;
    2、上下或左右的滑动显示长字符,比如“Hello,欢迎来到重庆交通大学物联网205实训室!”或者歌词、诗词。

  • 以下回答由chatgpt基于相关博客总结生成:

    需要进行寻址操作。在使用iic协议进行通信时,需要向设备发送一个地址码,以指定通信的对象。OLED屏幕在支持iic通信时也不例外。在驱动OLED屏幕之前,需要使用iic协议发送OLED的设备地址码,然后才能发送其他命令和数据。常见的OLED屏幕的iic地址为0x78或0x7A,具体地址可能根据型号和电路设计而有所不同,需要参考数据手册或原理图确认。发送设备地址时,可以使用bit7为0的7位地址,也可以使用bit6为1的8位地址。以下是简单的代码示例,使用OLED的7位地址0x78进行寻址:

    #define OLED_ADDRESS 0x78
    
    void OLED_Init(void)
    {
        // 初始化IIC总线
        IIC_Init();
        // 设置OLED显示控制寄存器
        IIC_Start();   // 发送开始条件
        IIC_SendByte(OLED_ADDRESS);   // 发送设备地址
        IIC_SendByte(0x00);   // 发送寄存器地址,此处设置为0x00
        IIC_SendByte(0xAE);   // 关闭OLED显示
        IIC_SendByte(0xD5);   // 设置时钟分频因子,震荡频率
        IIC_SendByte(0x80);   // 分频因子,低4位为分频部分,高4位为震荡频率部分,默认都是0,具体需要参考数据手册
        IIC_SendByte(0xA8);   // 设置驱动路数,默认为0x3F
        IIC_SendByte(0x3F);
        IIC_SendByte(0xD3);   // 设置显示偏移,
        IIC_SendByte(0x00);   // 默认是0,不需要偏移
        IIC_SendByte(0x40);   // 设置OLED显示开始行
        IIC_SendByte(0x8D);   // 电荷泵设置,下面详解
        IIC_SendByte(0x14);   // bit2,设置开启/关闭 逆像素显示 ,bit0,设置打开/关闭 电荷泵
        IIC_SendByte(0x20);   // 设置内存地址模式
        IIC_SendByte(0x02);   // 设置内存地址模式为页寻址模式
    
        // 接下来还需设置硬件驱动等参数
    }
    

    此外,需要注意,OLED屏幕在使用iic协议进行通信时,也支持SPI通信协议。在使用SPI通信协议时,不需要进行设备地址的寻址操作,因为SPI是基于CS片选信号来确定通信的对象的。