一般iic协议首先发送的数据就是要与之通信的设备的地址,但是我在学习OLED屏幕驱动时发现并没有这一个环节,请问这是为什么?
1条回答 默认 最新
关注 - 这篇博客: 基于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片选信号来确定通信的对象的。
解决 无用评论 打赏 举报- 这篇博客: 基于IIC接口的OLED数据显示实验中的 一、实验要求 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
悬赏问题
- ¥15 视频编码 十六进制问题
- ¥15 Xsheii7我安装这个文件的时候跳出来另一个文件已锁定文件的无一部分进程无法访问。这个该怎么解决
- ¥15 unity terrain打包后地形错位,跟建筑不在同一个位置,怎么办
- ¥15 FileNotFoundError 解决方案
- ¥15 uniapp实现如下图的图表功能
- ¥15 u-subsection如何修改相邻两个节点样式
- ¥30 vs2010开发 WFP(windows filtering platform)
- ¥15 服务端控制goose报文控制块的发布问题
- ¥15 学习指导与未来导向啊
- ¥15 求多普勒频移瞬时表达式