嵌入式基础--第七周作业--OLED显示

news/2025/10/27 17:17:48/文章来源:https://www.cnblogs.com/dshuidawsud/p/19169436

一.I2C协议的基本原理和时序协议
一、I2C 协议的基本原理
I2C协议的核心设计思想是用最少的连线实现多个器件之间的通信。它只需要两根线:

  1. SDA:串行数据线,用于传输数据。

  2. SCL:串行时钟线,用于同步时钟。

  3. 核心特性
    半双工通信:数据可以在SDA线上双向流动,但同一时刻只能有一个方向。
    同步通信:所有通信都由主设备产生的SCL时钟信号同步。
    多主从结构:总线上可以连接多个主设备和多个从设备。
    地址寻址:每个从设备都有一个唯一的7位或10位地址,主设备通过地址来选择与哪个从设备通信。
    低速通信:标准模式速度为100kbps,快速模式为400kbps,高速模式可达3.4Mbps。
    线与逻辑:SDA和SCL线都是开源输出 或集电极开路结构。这意味着设备只能将总线拉低(输出0),而不能主动拉高(输出1)。总线通过上拉电阻被拉到高电平。这种设计实现了“线与”功能,避免了多个设备同时输出时的总线冲突。

  4. 总线上的角色

主设备:负责发起和终止一次传输,产生时钟信号SCL。
从设备:响应主设备的寻址,接收或发送数据。

二、I2C 时序协议详解

一次完整的I2C通信由起始条件、数据传输和停止条件组成。数据传输的基本单位是字节(8位),每个字节传输后都跟随一个应答位。

  1. 起始条件

当SCL线为高电平时,SDA线发生一个从高到低的跳变。
这个独特的边沿信号告诉总线上所有设备:一次传输开始了。

  1. 停止条件

当SCL线为高电平时,SDA线发生一个从低到高的跳变。
这个信号表示本次传输结束,总线将被释放。

  1. 数据传输与应答

数据传输以字节(8位) 为单位,从最高有效位 开始依次发送。每个字节后必须紧跟一个应答位。

数据有效性:在SCL为高电平期间,SDA线上的数据必须保持稳定。只有在SCL为低电平时,SDA线上的数据才允许变化。
应答:每传输完一个字节(8位数据),发送方(无论是主设备还是从设备)会释放SDA线。接收方需要在第9个时钟脉冲期间将SDA线拉低,表示已成功接收到数据。
非应答:如果接收方在第9个时钟脉冲期间没有将SDA线拉低(即SDA线因上拉电阻保持高电平),则表示非应答。这通常意味着:
接收方未准备好或无法接收。
主设备读取数据时,用它来告诉从设备“不要再发送数据了”。

三、完整的数据传输帧格式
一次完整的I2C通信包含以下几个部分:

  1. 主设备写数据到从设备

  2. 起始条件

  3. 从设备地址(7位) + 写标志位(0)

  4. 从设备应答

  5. 数据字节(8位)

  6. 从设备应答
    (可重复多个数据字节)

  7. 停止条件

  8. 主设备从从设备读取数据

  9. 起始条件

  10. 从设备地址(7位) + 读标志位(1)

  11. 从设备应答

  12. 从设备发送数据字节(8位)

  13. 主设备应答 (如果希望继续读)或 主设备非应答 (如果这是最后一个字节)
    (可重复多个数据字节,最后一个字节主设备发NACK)

  14. 停止条件

  15. 复合格式(在一次传输中改变方向)
    这种方式非常常见,例如先告诉从设备要读取哪个寄存器地址,然后再读取数据。

  16. 起始条件

  17. 从设备地址 + 写(0)

  18. ACK

  19. 寄存器地址(数据字节)

  20. ACK

  21. 重复起始条件 (注意,这里不是停止条件!)

  22. 从设备地址 + 读(1)

  23. ACK

  24. 从设备发送数据字节

  25. 主设备NACK (假设只读一个字节)

  26. 停止条件(P)
    重复起始条件(Repeated Start) 的波形与起始条件完全相同。它可以在不释放总线(不发送停止条件)的情况下开始一次新的通信,保证了操作的原子性。

二.0.96寸OLED屏的工作原理和汉字点阵的显示原理
一、 硬件结构和工作原理

  1. 像素结构

单个OLED像素:
┌─────────────────┐
│ 阴极(透明电极) │ ← 电子注入
│ 有机发光层 │ ← 电子空穴复合发光
│ 阳极 │ ← 空穴注入
└─────────────────┘

  1. 矩阵驱动原理

OLED屏采用被动矩阵(PMOLED) 驱动:

行扫描:逐行选通
列数据:同时提供该行所有列的数据
快速刷新:通过人眼视觉暂留效应形成完整图像

  1. SSD1306驱动芯片功能

显示数据RAM(GDDRAM):128×64位,直接映射到屏幕像素
命令解析器:接收并执行配置命令
时序控制:产生行、列扫描时序
DC/DC转换:产生OLED所需的高电压

  1. 通信接口

I2C接口接线(以Arduino为例):

Arduino OLED
GND --- GND
3.3V --- VCC
A4 --- SDA
A5 --- SCL

二、汉字点阵显示原理

  1. 点阵显示基本概念

汉字在数码显示设备中都是以点阵形式存储和显示的。

  1. 汉字编码体系

2.1 字符编码

ASCII码:英文字符,1字节表示
GB2312:简体中文,2字节表示
Unicode:全球统一字符集

2.2 GB2312编码结构

第一个字节:0xA1-0xFE(区码)
第二个字节:0xA1-0xFE(位码)
区码 = 第一个字节 - 0xA0
位码 = 第二个字节 - 0xA0

  1. 汉字点阵数据存储

3.1 常见点阵规格

16×16点阵:适合小字号显示,32字节/汉字
24×24点阵:中等字号,72字节/汉字
32×32点阵:大字号,128字节/汉字

3.2 16×16点阵数据结构(最常用)

每个16×16点阵汉字需要32字节存储:

前16字节:显示上半部分(0-7行)
后16字节:显示下半部分(8-15行)

字节内位顺序:通常高位在上,低位在下

字节数据:0x08 (二进制 00001000)
像素映射:□ □ □ ■ □ □ □ □ (0=灭,1=亮)
7 6 5 4 3 2 1 0 (位序号)

  1. 字库寻址计算

4.1 区位码计算

// 假设汉字"中"的GB2312编码为:0xD6, 0xD0
unsigned char code_h = 0xD6; // 高字节
unsigned char code_l = 0xD0; // 低字节

// 计算区位码
unsigned char qu_ma = code_h - 0xA0; // 区码 = 54
unsigned char wei_ma = code_l - 0xA0; // 位码 = 48

4.2 点阵数据偏移量计算

// 16×16点阵,每个汉字32字节
unsigned long offset = ((qu_ma - 1) * 94 + (wei_ma - 1)) * 32;

  1. OLED显示汉字的具体实现

5.1 显示内存映射

SSD1306的GDDRAM结构:

8页(Page):每页8行,共64行
128列:每列对应1个像素宽度
字节组织:每列的1个字节代表垂直的8个像素

Page0: 第0-7行
Page1: 第8-15行
Page2: 第16-23行
...
Page7: 第56-63行

5.2 16×16汉字显示过程

显示位置计算:
// 在(x,y)位置显示16×16汉字
page = y / 8; // 计算页地址
page_offset = y % 8; // 计算页内偏移

数据写入流程:

  1. 设置起始地址:指定显示起始页和列

  2. 写入上半部分:前16字节数据

  3. 切换到下一页:设置下一页地址

  4. 写入下半部分:后16字节数据

  5. 实际开发中的字库处理

6.1 字库存储方式

外部Flash:存储完整字库
内部Flash:存储常用汉字
SD卡:动态加载字库
在线字库:通过网络获取

6.2 常用取模方式

逐列式:按列顺序取模(最常用)
逐行式:按行顺序取模
逆向取模:字节内位顺序反转

6.3 取模软件设置示例

点阵格式:阴码(1亮0灭)
取模方式:逐列式
取模走向:逆向(低位在前)
输出格式:C51格式


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

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

相关文章

TensorFlow与PyTorch深度对比分析:从基础原理到实战选择的完整指南 - 指南

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

102302105汪晓红作业1

作业1 作业①:用requests和BeautifulSoup库方法定向爬取给定网址 http://www.shanghairanking.cn/rankings/bcur/2020 的数据,屏幕打印爬取的大学排名信息。 代码与结果 核心代码:点击查看代码#设置headers,模拟浏览…

【IEEE出版 | 重庆邮电大学主办 | 多届次、高层次】第六届人工智能与计算机工程国际学术会议(ICAICE 2025)

第六届人工智能与计算机工程国际学术会议(ICAICE 2025)将于2025年11月7-9日在重庆召开。【早鸟优惠、学生优惠、团队优惠、学生友好】 【重庆邮电大学主办|多届次、高层次】 第六届人工智能与计算机工程国际学术会议…

普通幂转下降幂

一个 trick。更新日志 2025/10/27:开工。概念 一个小 trick,利用第二类斯特林数将普通幂转化成下降幂。 思路 \[v^k=\sum_{i=0}^{\min(v,k)} {k\brace i}v^{\underline{i}}=\sum_{i=0}^{\min(v,k)}{k\brace i}\binom…

解决Java项目在复杂网络环境下访问外网不通的问题

解决Java项目在复杂网络环境下访问外网不通的问题 问题描述 在企业内部或本地开发环境中,Java项目经常遇到无法访问外网API或资源的情况。这是由于复杂的网络环境导致的,常见的网络限制包括:防火墙策略限制 代理服务…

私有2.4G无线对讲机方案:BLE芯片+PA芯片

在许多需要团队协作的场景中,清晰、即时、稳定的沟通是效率和安全的关键。传统对讲机笨重、频道申请麻烦;而手机通话则成本高、组群不便,在复杂环境中信号更是堪忧。在商场、仓库、景区等场景中,即时通信的稳定性与…

PyCharm 2024超详细下载安装教程(附安装包+激活教程)超详细图文步骤

目录一、PyCharm 2024 介绍二、PyCharm 2024安装包网盘下载三、PyCharm 2024 安装教程及激活教程1.解压PyCharm 2024安装包2.启动PyCharm 2024安装程序3.点下一步4.选PyCharm 2024安装位置5.勾选PyCharm 2024安装选项6…

发布会回顾|袋鼠云发布多模态数据中台,重构AI时代的数据底座

在AI全面渗透产业的浪潮中,数据平台的能力边界正在被重新定义。在2025袋鼠云秋季数智发布会上,袋鼠云重磅发布“数栈多模态数据中台”,标志着数栈正式完成从结构化数据中台向AI时代“全模态、全场景”的全面升级。袋…

Docker容器里面部署的Jenkins的Java17升级到21版本(无需删除之前容器,内部在线升级) - 攻城狮

发现Jenkins出现了如此提示: Java 17 end of life in JenkinsYou are running Jenkins on Java 17, support for which will end on or after Mar 31, 2026. Refer to the documentation for more details. 原因是ja…

布谷直播系统源码:高并发直播架构设计到搭建部署配置

在移动互联网时代,直播已成为内容传播、电商带货和社交互动的核心载体。面对动辄百万甚至千万级的瞬时用户涌入,如何构建一个稳定、流畅、可扩展的高并发直播系统,是每个技术团队必须攻克的堡垒。山东(泰安)布谷科技…

25.10.27联考题解

CF2110D 求最小值的问题可以考虑转化成二分答案然后判断合法性。于是先二分答案,然后发现判断合法性本质就是判断连通性,因为是 DAG 于是考虑拓扑排序维护到一个点的合法最大值即可。 B 考虑 \(k=0\) 怎么做?我们直…

医疗器械行业数字化破局:一体化平台正在淘汰多系统集成模式

当“系统集成”消耗企业30%IT预算的时代即将结束,一体化架构正重新定义医疗供应链数字化当“系统集成”消耗企业30%IT预算的时代即将结束,一体化架构正重新定义医疗供应链数字化 “我们使用了五套系统,CRM管客户、E…

报表知识

FORM frm_pf_status USING lt_status_name TYPE slis_t_extab. SET PF-STATUS PF_1000EXCLUDING lt_status_name. . ENDFORM. DATA: gt_excluding TYPE slis_t_extab. " ALV工具栏按钮排除表 CLEAR gt_excluding…

【IEEE出版 | 往届均已完成见刊检索 | 见刊检索稳定】第七届信息与计算机前沿术国际学术会议(ICFTIC 2025)

第七届信息与计算机前沿技术国际学术会议(ICFTIC 2025)将在中国青岛举行,会期是2025年12月5-7日。【中国石油大学(华东)、山东省智能人工学会、山东计算机学会主办】 【往届均已完成见刊检索,见刊检索稳定】 第七届信…

动态点分树

讲解动态点分树,附例题及代码。更新日志 2025/10/27:开工。概念 首先你应当会点分树。 动态点分树可以支持每次加一个叶子结点并动态维护点分树结构平衡的数据结构。 思路 利用替罪羊树的思想,考虑 \(\alpha\) 重构…

2025年隔热条厂家权威推荐榜:尼龙隔热条/PA66尼龙隔热条/建筑用隔热条/断桥铝门窗隔热条/幕墙隔热条/阳光房隔热条/国标隔热条精选

2025年隔热条厂家权威推荐榜:尼龙隔热条/PA66尼龙隔热条/建筑用隔热条/断桥铝门窗隔热条/幕墙隔热条/阳光房隔热条/国标隔热条精选 随着建筑节能要求的不断提高和绿色建筑理念的深入推广,隔热条作为建筑节能的关键材…

【前端效率工具】:告别右键另存,不到 50 行代码一键批量下载网页图片

🧑‍💻 写在开头 点赞 + 收藏 === 学会🤣🤣🤣先看效果:在素材网站一键批量保存所有图片废话不多说,直接上手! 项目结构image-downloader-extension ├── manifest.json # 扩展的"身份证"…

特殊符号的输入

特殊符号的输入符号 说明 Alt编码© 版权符号 Alt+0169 注册商标 Alt+0174™ 商标 Alt+0153• 项目符号 Alt+0149 正负号 Alt+0177 乘号 Alt+0215 除号 Alt+0247 度 Alt+0176… 省略号 Alt+0133√ 对勾 Alt+251≤ …

Luogu P3237 [HNOI2014] 米特运输 题解 [ 蓝 ] [ 树形 DP ] [ 哈希 ]

米特运输 不是很难,但是思路很巧妙的一道题。 手模样例,观察合法方案的性质,容易发现,只要有一个节点权值是固定的,那么整棵树所有节点的权值便也固定了。 而由于每个节点之间是倍数关系,因此我们需要一个基本单…

「Gym 104901F」Say Hello to the Future

题目大意 给定一个序列,定义其权值为划分序列的方案数,使得划分出来的每个区间 \([l, r]\) 有 \(\max_{i = l}^r {a_i} \leq r - l + 1\) 。对于每个 \(1 \leq i \leq n\) 求只将 \(a_i\) 修改为 \(1\) ,序列的权值…