一般iic协议首先发送的数据就是要与之通信的设备的地址,但是我在学习OLED屏幕驱动时发现并没有这一个环节,请问这是为什么?
要求:
理解OLED屏显和汉字点阵编码原理,使用STM32F103的SPI或IIC接口实现以下功能:
1、显示自己的学号和姓名;
2、上下或左右的滑动显示长字符,比如“Hello,欢迎来到重庆交通大学物联网205实训室!”或者歌词、诗词。
需要进行寻址操作。在使用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片选信号来确定通信的对象的。