IIC驱动OLED屏(4PIN)

  • 概述
  • IIC通信协议
  • OLED屏(兼下载链接)

概述

因为毕设,又得重新拾起嵌入式知识了,之前主要用51单片机,当年直接copy的代码,对很多东西不求甚解,这次用STM32重头梳理一遍,本文会讲解IIC和OLED的部分原理。能力有限,有错误请指出。

需要程序自动跳最后面,有网盘链接,亲测可用。

IIC通信协议

IIC通信物理连接时非常方便,只有两根数据线:SCL和SDA,具体操作步骤直接读时序图就可以理解,非常的方便。
SDA:SerialData的缩写,主要就是通信中数据传输。
SCL:Supply Chain Logistic缩写(来源百度百科),主要用来决定数据收发的。
我个人觉得有错,应改为:SerialClock,所有人都称呼这个是时钟线唉!难道不是时钟的缩写嘛!!!毕竟SCL的作用就是决定数据何时传递的,难道不应该理解为时钟嘛?

IIC的主要使用,需要配合时序图使用:(这里参考野火的教程里的图)
在线链接: STM32库开发实战指南-刘火良;杨森-微信读书.

起始信号的关键在于,SCL和SDA都在高电平时,SDA的下降,因此体现在代码中:

#define OLED_GPIO GPIOB
#define OLED_SCL GPIO_Pin_6//这是我的SDA和SCL引脚
#define OLED_SDA GPIO_Pin_7#define OLED_SCL_LOW() GPIO_ResetBits(OLED_GPIO,OLED_SCL)//SCL高低电平
#define OLED_SCL_HIGH() GPIO_SetBits(OLED_GPIO,OLED_SCL)#define OLED_SDA_LOW() GPIO_ResetBits(OLED_GPIO,OLED_SDA)//SDA高低电平
#define OLED_SDA_HIGH() GPIO_SetBits(OLED_GPIO,OLED_SDA)//IIC,起始信号时序,SCL高电平,SDA由高到低,然后SCL也变低,数据开始传输
void I2C_Start(void)
{OLED_SDA_HIGH();OLED_SCL_HIGH();OLED_SDA_LOW();OLED_SCL_LOW();
}

同理,停止信号也是这样写的:

void I2C_Stop(void)//同理,看时序图
{OLED_SCL_HIGH();OLED_SDA_LOW();OLED_SDA_HIGH();
}

起始都设计好了,那么数据怎么传输?

注意时序图,SCL由低到高时,并保持在高电平的时候,数据才有效,
那么开始思考,数据怎么传,我是一大段数据一口气发出去?还是一位一位发送?
一大段传的话,个人没有太好思路。有会的可以指导我一下。
下面是代码:

void Send_Byte(uchar data)//写入一个字节
{uchar i;for(i=0;i<8;i++){OLED_SCL_LOW();//将时钟信号设置为低电平if(data&0x80)//将dat的8位从最高位依次写入,也就是一位一位写,每写一位,数据左移一位{OLED_SDA_HIGH();}else{OLED_SDA_LOW();}OLED_SCL_HIGH();//将时钟信号设置为高电平OLED_SCL_LOW();//将时钟信号设置为低电平data<<=1;}
}

为什么这里用0x80呢?,0x80,转换成二进制为:1000 0000 ,数据于0x80进行“与运算”,并保持SDA为高电平,因为与运算的话,只有第一位能保留下来,比如:7|0x80 ,过程为:0111|1000 0000 ,结果为:1000 0000 ,然后数据左移一位,继续,直到数据走完,那么一个SDA高电平中就存了7这个数。

,那么一个数据发送完后,我该换下一个值了,但还要继续接收数据上虽然没值了,但如果我传的还是高电平怎么办?继续传的你还收不收?你是等待下一个数据发过来哈斯还是结束?这个时候就需要等待状态来了,(TNND!这水印怎么去!!!,下面水印挡住的文字是:等待响应)

void I2C_WaitAck(void) //等待信号的电平
{OLED_SCL_HIGH();OLED_SCL_LOW();
}

至此,IIC通信你大致了解了基本逻辑,接下来就是配合硬件了

OLED屏(兼下载链接)

0.96寸OLED屏,驱动IC为:SSD1306;
多有代码都围绕这个进行编写,我目前看的代码少,暂时来说中景园的代码和资料就非常NICE,非常适合初学者读和思考,这里我直接放资料了:
链接: https://pan.baidu.com/s/1KZN-d0wCnlVR_jEqLZSPVw
提取码:4kej
代码和资料都在里面。

优点:代码是51改的,非常通俗易懂,学过51必看懂,
缺点:冗余,很多没必要的代码段在里面。里面说是IIC代码,实际还是SPI,只不过只用到了SDA和SCL两个引脚,其他没用,可以删除。
当然,好处就是7pin的SPI的oled也可以照葫芦画瓢。
后续我会将我修改完的(改了一半,没改完,就先不放出来了,后续改完会发github上。)
暂时就这。

参考资料:
STM32库开发实战指南-刘火良;杨森
中景园电子OLED淘宝店参考资料

STM32库函数版IIC驱动OLED屏相关推荐

  1. STM32通过SPI协议驱动OLED屏

    坚持就是胜利 一.SPI协议介绍 01 简介 02 SPI物理层 03 SPI基本通讯过程 二.OLED显示器介绍 01 简介 02 接口定义 03 与STM32接线图 三.汉字取模软件介绍 01 下 ...

  2. STM32模拟IIC驱动OLED屏 原理+源码

    处理器和芯片间的通信可以形象的比喻成两个人讲话:1.你说的别人得能听懂:双方约定信号的协议.2.你的语速别人得能接受:双方满足时序要求. 一.IIC总线的信号类型 1.开始信号:处理器让SCL时钟保持 ...

  3. 12. STM32——硬件IIC驱动OLED屏幕显示

    STM32--硬件IIC驱动OLED屏幕显示 OLED屏幕 OLED屏幕特点 OLED屏幕接线说明 OLED屏幕显存 OLED屏幕原理 OLED屏幕常用指令 OLED屏幕字模软件的使用 写命令 写数据 ...

  4. 【STM32】 硬件IIC 驱动SSD1302(0.96 OLED模块) -- 3/4 OLED的命令表 学习

    书接上回 文章1:[STM32] 硬件IIC 驱动SSD1306(0.96 OLED模块) – 1/4 库函数 学习 文章2:[STM32] 硬件IIC 驱动SSD1302(0.96 OLED模块) ...

  5. 15. STM32——软件IIC驱动OLED屏幕显示字符、字符串、数字、汉字

    STM32--软件IIC驱动OLED屏幕显示 OLED屏幕 写命令 写内容 对OLED写入一个字节 设置光标 启动OLED 关闭OLED 全屏填充(清屏) 显示字符 显示字符串 获取次方 显示数字 显 ...

  6. RA4M2开发(2)----基于IIC驱动OLED

    概述 在e2studio中创建新的工程并导入必要的文件,包括I2C驱动代码和SSD1306 OLED显示驱动代码. 配置RA4M2的I2C接口,使其作为I2C master进行通信. 初始化SSD13 ...

  7. IIC 驱动OLED

    IIC总线可以驱动很多器件,比较常见的有OLED.EEPROM存储器(AT24C02).温度传感器(LM75A).温湿度传感器(DHT11)等.有关IIC总线协议的基本原理可以看我之前的文章介绍.这一 ...

  8. arduino上ESP8266用Adafruit_SSD1306库驱动OLED屏

    关注.星标公众号,不错过精彩内容 编辑:Tony 来源:公众号TonyCode 在进行后续的ESP8266学习前,我们先来对OLED屏进行驱动,为后续学习提供直观的信息显示. 1. 安装驱动库 在之前 ...

  9. esp32 spi 驱动 oled 屏显示来自 PC 的画面

    esp32 spi 驱动 oled 屏显示来自 PC 的画面 实验代码 gayhub 实验源码 设备及运行环境 装有python的电脑 Python 3.8.2 (tags/v3.8.2:7b3ab5 ...

  10. esp32使用MicroPython驱动oled屏显示中文和英文

    文章目录 esp32使用MicroPython驱动oled屏显示中文和英文 介绍 安装 特点 开源 硬件连接 API 示例 显示英文字符 显示汉字 参考链接 esp32使用MicroPython驱动o ...

最新文章

  1. 事件处理机制--浏览器流程处理分析
  2. 4怎样判断动作是否执行_汽车驾驶怎样试验高压火,怎样判断分电器盖是否破裂,来看看吧!...
  3. 说说vue-cli中使用flexible和px2rem-loader
  4. 收藏的一些github开源项目,在这里记录一下
  5. 计算机系统的今后应用,计算机系统毕业论文范本(2)
  6. 中国十大名牌直流稳压电源
  7. Linux系统中的远程访问及控制
  8. 程序与进程以及作业之间的区别
  9. php 301目录对应,PHP 301转向实现代码
  10. Excel 数字转化成以文本形式存储的数字
  11. linux 生成dump文件
  12. Atom 修改Atom快捷键 实测可行
  13. Overleaf (LaTex) 使用笔记(自用)
  14. 事务与共识 DDIA小结
  15. php templete什么意思,PHP设计模式之模板方法模式定义与用法详解
  16. 2017-2042美国国防部无人系统路线图
  17. Java JDBC https://www.bilibili.com/video/BV1PE411i7CV?p=31spm_id_from=pageDriver
  18. html script写布局,scriptmanager
  19. 极客大学产品经理训练营 解决方案的设计与积累 第6课总结
  20. 去修苹果手机的时候,当心遇到 “李鬼” 维修点!

热门文章

  1. PTA L1-087(C++) 机工士姆斯塔迪奥
  2. 【数学建模】regress()函数进行回归分析| 美国人口预测
  3. 【转】Java线程系列:Callable和Future
  4. 如何根据论文文章名称一键查询该篇论文的引用格式?
  5. Spring复习——B站
  6. 羊台山西丽路线登山记
  7. 使用MediaPlayer的一些常见报错及解决方法-1
  8. python数据挖掘课后题答案_中国大学MOOC《数据挖掘与python实践》章节答案
  9. 输入今天的日期,输出明天的日期
  10. 写给三维建模入门小白的建议