1. oled屏幕的接口IIC

应用场合:

2.IIC通信原理

概念:

IIC(Inter-Integrated Circuit)其实是IICBus简称,所以中文应该叫集成电路总线,它是一种串行通信总线,使用多主从架构,由飞利浦公司在1980年代为了让嵌入式系统或手机用以连接低速周边设备而发展。I²C的正确读法为“I平方C”("I-squared-C"),而“I二C”("I-two-C")则是另一种错误但被广泛使用的读法。自2006年10月1日起,使用I²C协议已经不需要支付专利费,但制造商仍然需要付费以获取I²C从属设备地址。

IIC:也是一种串行总线,半双工。

IIC是一种主从结构

主从结构的通信,必须有主机发送起始信号,才可以开始进行通信。

IIC总线对工程师的好处:

 专有名词:

IIC收发过程:

1 假设微控制器 A 要发送信息到微控制器 B

• 微控制器 A 主机 寻址(包含了读写标志)微控制器 B 从机 (从机要给应答信号)

• 微控制器 A 主机 发送器 发送数据到微控制器 B 从机 接收器

• 微控制器 A 终止传输(终止信号)

2 如果微控制器 A 想从微控制器 B 接收信息

• 微控制器 A 主机 寻址(包含了读写标志)微控制器 B 从机

• 微控制器 A 主机 接收器 从微控制器 B 从机 发送器 接收数据

• 微控制器 A 终止传输

IIC总线时序

IIC总线时序

硬件组成:

SDA 和 SCL 都是双向线路

SDA:根据数据传输配置输入或者输出---开漏输出

SCK:复用推挽输出(硬件IIC)

SCK:通用推挽输出(软件(模拟)IIC)

传输速率:

I2C 总线上数据的传输速率在标准模式下可达 100kbit/s 在快速模式下可达 400kbit/s 在高速模式下可达 3.4Mbit/s 。

传输方式:按位传输(内部传输,主机或者从机内部)

数据的有效性:

SDA 线上的数据必须在时钟的高电平周期保持稳定 数据线的高或低电平状态只有在 SCL 线的时钟信号是低电平时才能改变

时钟为高电平,只能传输数据

时钟线为低电平,只能切换要传输的数据

起始信号和停止信号:

起始信号的状态:

时钟线为高电平的时候,数据线由高拉低

停止信号的状态:

时钟线为高电平的时候,数据线由低拉高

传输数据

发送到 SDA 线上的每个字节必须为 8 位 每次传输可以发送的字节数量不受限制 每个字节后必须跟一个响应位 首先传输的是数据的最高位 MSB

数据宽度:8bit

响应位:是否正确应答

响应:

时钟为高电平的时候,数据线输出稳定的低电平

单个数据发送的应答信号:

仲裁机制:

所有主机在 SCL 线上产生它们自己的时钟来传输 I2C 总线上的报文 数据只在时钟的高电平周期有效因此 需要一个确定的时钟进行逐位仲裁

从设备的地址格式:

7bit+读写标志位=8位

写操作:低电平

读操作:高电平

数据传输帧格式:

主机 发送器发送到从机 接收器 传输的方向不会改变

在第一个字节后 主机立即读从机

OLED屏幕介绍:

OLED屏幕的基本特性:

大小:0.96寸(对角线)

分辨率:128*64(0.96寸的屏幕上总共有128*64个像素点)

像素点:成像的最小单位

单色屏:由两种颜色组成,背景色和前景色都是只有一种,黑白 黑和蓝......

像素点大小:1bit 0或者1

多色屏幕中像素点的颜色显示格式:RGB565 RGB888

RGB565的颜色显示格式:一个像素点大小就是2字节

OLED屏幕的IO口:

写操作:

 保存的图像或者字符在OLED屏幕中保存方式:

128*64---像素点个数

长度128个像素点(128列)

高度64像素点(64行)

PAGE0(com0--com7)--第0页(0--7行)

因此我们的屏幕中就有8页。

指令部分:数据手册27页

IIC通信接口,只负责发送或者接收数据

比如:我需要在屏幕的第二行去显示字符,首先设置显示起始位置,因此我们在操作显示屏幕的时候,需要先发送指令,告诉从设备,主机先要执行那些操作。

代码编写部分:

软件IIC编写代码:

IIC通信连接在单片机的哪些IO口上:

PA6--CLK---通用推挽输出

PA7--SDA--开漏输出(只能输出低电平,无法输出高电平(是一个高阻态))

为什么不用推挽???

1.我们使用开漏输出,需要外界上拉电阻,IO内部结构中有上拉

2.选择开漏是因为,SDA数据线,还需要去接收从设备数据(输入)

这时如果设置成推挽,从设备给主机发送数据,此时主机还在输出,有可能产生短路

如果设置成开漏,当设备输入的时候,就可以直接检测外界的电平状态

内部上拉能力不够???这个时候就需要外接上拉电阻。

以上两个IO口为例,进行代码编写

1.参考官方提供的例程代码

 参考文件内容:

将以上OLED驱动和字体内容添加到工程

有一个错误需要修改:

显示字符串:

 

因为font.c中已经将全部的英文字符取模

全部是根据ASCII表格进行取模处理

直接网页搜索取模工具,也可以在线取模 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/917402.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/917402.shtml
英文地址,请注明出处:http://en.pswp.cn/news/917402.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

解决 Node.js 托管 React 静态资源的跨域问题

在 Node.js 项目中托管 React 打包后的静态资源时,可能会遇到跨域问题(CORS)。以下是几种解决方案: 1. 使用 Express 中间件设置 CORS 头 const express require(express); const path require(path); const app express();// …

【Linux】多路转接之epoll

优化poll进行拷贝的开销poll开销过大将整个 pollfd 数组拷贝到内核态,以便内核检查 fd 是否就绪(从用户态 → 内核态)。内核检查 fd 状态,并填充 revents。将 pollfd 数组从内核态拷贝回用户态,让应用程序可以读取 rev…

下载一个JeecgBoot-master项目 导入idea需要什么操作启动项目

官网:开发环境搭建 | JEECG 文档中心 一般做开发的电脑里都是有的,没有的只能下载了 前端安装 node官网:https://nodejs.org/zh-cnpnpm安装:通过命令 后端安装: jdk17 :https://www.oracle.com/cn/java/technologies/downloads/#java17maven :https://m…

解决 InputStream 只能读取一次问题

是的,InputStream 的一个重要特性是它通常只能被读取一次。这是因为:输入流通常是单向的、顺序访问的数据源很多流(如网络流、文件流)读取后指针就移动了,无法回退有些流(如Socket流)甚至读取后…

数据分析面试题

技都测试 1、请列举5个 Excel 中常用的函数及写法。[ if ] IF(A1>60, "及格", "不及格") —— 若 A1 单元格数值≥60,返回 “及格”,否则返回 “不及格”。IF(B2>100, B2*0.8, B2) —— 若 B2 数值 > 100&#xff0c…

【07】VisionMaster入门到精通——Blob分折

文章目录0 视屏讲解与演示1 案例演示2 参数详解1 运行参数0 视屏讲解与演示 1 案例演示 周长使能查找U型槽 短轴使能查找U型槽 面积筛选区域 当条件不符合是,该模块显示红色,状态为NG 显示二值图像 显示Blob图像 2 参数详解 Blob分折,…

解释 MySQL 中的 EXPLAIN 命令的作用和使用场景

解释 MySQL 中的 EXPLAIN 命令的作用和使用场景 总结性回答 EXPLAIN 是 MySQL 中用于分析 SQL 查询执行计划的命令,它能展示 MySQL 如何执行一个查询,包括使用的索引、表连接顺序、扫描行数等关键信息。主要用于查询性能优化,帮助开发者识别潜…

.env 文件

.env 文件其实就是一个纯文本文件,用来写“环境变量”键值对,格式非常简单 👇✅ .env 文件写法格式:每一行就是一个变量名 值,不要加引号,不要加空格DEEPSEEK_API_KEYsk-xxxxxxxxxxxxxxxxxxxx完整例子&…

机器学习——K 折交叉验证(K-Fold Cross Validation),案例:逻辑回归 交叉寻找最佳惩罚因子C

什么是交叉验证? 交叉验证是一种将原始数据集划分为若干个子集,反复训练和验证模型的策略。 交叉验证(Cross-Validation)适用于你在模型调参(如逻辑回归中的 C) 最常用的:K 折交叉验证&#…

蓝桥杯----串口

(五)、串口1、串口通信简介制定通信的规则,通信双方按照协议规则进行数据收发,将一个设备的数据传送到另一个设备,扩展硬件系统,串口USART有两根通信线Tx、Rx,可同时双向通信,称之为…

错误: 找不到或无法加载主类 原因: java.lang.ClassNotFoundException

背景: 代码没有更改,主类位置也没有移动,运行时突然报找不到或无法加载主类的错误 错误: 找不到或无法加载主类 原因: java.lang.ClassNotFoundException编译器上方显示 Java file is located outside of the module source root so it wont …

Lock 接口及实现类详解:从 ReentrantLock 到并发场景实践

在 Java 并发编程中,除了synchronized关键字,java.util.concurrent.locks.Lock接口及其实现类是另一种重要的同步机制。自 JDK 5 引入以来,Lock接口凭借灵活的 API 设计、可中断的锁获取、公平性控制等特性,成为复杂并发场景的首选…

「iOS」————SideTable

iOS学习前言sideTableSlideTablesSideTableBufSideTable前言 我们在上一篇中,简单的介绍了weak的实现原理。其中弱引用表就是存储在SideTable中的,这里我们来学习了解一下SideTable sideTable sideTable主要用于存储和管理对象的额外信息,…

【PHP】CURL请求第三方API接口

当我们需要调用第三方接口时,就需要使用CURL,通过CURL操作去请求第三方API接口,有的是通过POST方式,有的是通过GET方式,下面介绍一个通用的使用CURL调用API接口的方法。一、CURL操作共两个方法,分别是CURL操…

对于考研数学的理解

文章目录高等数学总结补充说明1. 微分方程与无穷级数的特殊性2. 隐藏的逻辑链条3. 向量代数的桥梁作用核心框架为什么这样设计?结论线性代数核心逻辑框架各讲之间的本质联系1. 行列式 → 矩阵2. 矩阵 → 向量组3. 矩阵 向量组 → 线性方程组4. 矩阵 → 特征值与特征…

基于 Hadoop 生态圈的数据仓库实践 —— OLAP 与数据可视化(四)

目录 四、数据可视化与 Hue 简介 1. 数据可视化简介 (1)数据可视化的重要性 (2)数据可视化的用途 (3)实施数据可视化需要考虑的问题 (4)几种主要的数据可视化工具 2. Hue 简介…

HarmonyOS 开发:基于 ArkUI 实现复杂表单验证的最佳实践

摘要 在现代应用开发中,表单是最常见的交互方式之一。不管是用户注册、信息录入,还是登录验证,表单的可靠性直接影响用户体验。而在鸿蒙 ArkUI 开发中,虽然表单结构清晰,但要实现 复杂验证(比如&#xff1a…

高效游戏状态管理:使用双模式位运算与数学运算

在游戏开发中,状态管理是一个核心问题。无论是任务系统、成就系统还是玩家进度跟踪,我们都需要高效地存储和查询大量状态。本文将深入分析一个创新的游戏状态管理工具类 GameStateUtil,它巧妙结合了位运算和数学运算两种模式,在存…

linux-process-control

Linux进程控制 1. 进程终止 1.1. 进程终止的本质是回收资源 1.1 释放资源 内存资源: 释放进程的地址空间(mm_struct),包括代码段、数据段、堆、栈等,通过写时复制(CoW)共享的页会减少引用计数&a…

Autoswagger:揭露隐藏 API 授权缺陷的开源工具

Autoswagger 是一款免费的开源工具,用于扫描 OpenAPI 文档中列出的 API,查找授权漏洞。 即使在拥有成熟安全团队的大型企业中,这类漏洞仍然很常见,而且尤其危险,因为即使技术水平不高的人也能利用它们。 Autoswagger…