51单片机控制0.96寸OLED(IIC接口)

2023-05-16

1. OLED初步认识

OLED(Organic Light-Emitting Diode),即有机发光二极管. OLED由于同时具备自发光,不需背光源,对比度高,厚度薄,视角广,反应速度快,可用于挠曲性面板,使用温度范围广,构造及制程简单等优异特性,被认为是下一代的平面显示器新兴应用技术。具有轻,薄,省电等特性,通信接口简单.

这里我们描述的是IIC接口的0.96寸OLED,其实对于其他接口的OLED,分析思路是一样的。前面讲了,显示模块我们就关心三个问题,显示模块初始化;在哪里显示;显示什么。对于OLED同样适用,相对于1602液晶模块,它只不过显示的地方比较多,显示内容更加丰富一点,但是思路基本相同。下面我们就从这个三个问题入手,简单讲述如何使用这款显示模块。

2. OLED初始化

关于OLED初始化,芯片手册上描述的非常清楚了,这没什么好讨论的,照做即可。

(1)Set MUX Ratio A8h, 3Fh  

(2)Set Display OffsetD3h, 00h

(3)Set Display StartLine 40h

(4)Set Segment re-mapA0h/A1h

(5)Set COM Output ScanDirection C0h/C8h

(6)Set COM Pinshardware configuration DAh,02h

(7)Set Contrast Control81h,7Fh

(8)Disable EntireDisplay On A4h

(9)Set Normal DisplayA6h

(10)Set Osc FrequencyD5h, 80h

(11)Enable charge pumpregulator 8Dh, 14h

(12)Display On AFh

3. 在哪里显示

与LCD1602的分析思路相同,要知道知道在哪里显示,就需要先知道哪些地方可能显示。oled模块的分辨率是128×64,也就是说一共能显示128×64这么多个“点”,下面我们用一个128列,64行的表格来描述更清晰一些,如下所示:

显示模块上的每一个点对应着这个表格的一个空格,假设你在某一个空格中放1表示这个‘点’亮,那么放0就表示这个‘点’暗。由于我们在写入数据时通常以字节为单位,那么现在把表格中的Col0这一列对应的Row0-Row7作为一个单位,一共8个空格,刚好对应一个字节。那么这个字节的高低位如何分配呢?最低位放到Row0-Col0对应的空格,最高位放到Row7-Col0对应的空格。这样当你写入一个字节的数据0x08时,对应的Col0-Row3这个‘点’就亮了,其他7个点为暗。那么这个数据0x08写到哪里去了?这个显示模块一定有个存储空间来存放这些写入的数据,暂且把它叫做PAGE0,PAGE1,...PAGE7. 这样每一个PAGE就对应着8行,比如PAGE0就对应着Row0-Row7.

经过以上分析,问题就变得简单了,就是如何访问PAGE0-PAGE7,然后往里面填数据就行了。这个就涉及到寻址模式了,一共三种,分别 是页寻址,水平寻址和垂直寻址模式。(叁议电子www.ppptalk.com)以下三幅图描述了这三种寻址模式

(1)页寻址模式

(2)水平寻址模式

(3)垂直寻址模式

下面就去查看OLED模块说明书的指令表确定其中任意一种寻址模式,然后根据需要显示的内容填数据就可以了。

4. 显示什么内容

(1)显示一个点

一幅图画是由各种线条构成的,一根线条是由很多点构成的,那么只要我们能在任意指定的位置显示一个点,从理论上讲,就能实现显示oled能力范围内的任何图形。现在我们来看看如何显示一个点。首先显示之前需要确定显示“点”的位置,这里我们以页寻址举例,先确定页地址。前面讲了,一共有8页,每一页对应显示模块的8行,也就是同一列的8个点。例如现在想在显示模块上显示一个点,坐标为(Row3, Col0),那么写入的数据为0x08(0b00001000)。注意写入数据字节的最高位和最低位对应显示模块的“点”。此后如果继续写入一个字节,那么col会自动加1,也就是会自动从Col0 跳到Col1,一直自动增加到Col127为止(注意这里设置的col end address为127)。如果此时继续写入数据,那么Col就会从Col127跳到Col0。那么现在想在Row8(也就是PAGE 1部分)写入数据怎么办呢?这个时候就需要重新设置page address了。

通过以上分析相信各位已经明白了如何在显示模块的任意位置显示一个“点”了。这样从理论上讲,就能实现显示任意形状了,比如字符,汉字,图片。但是很明显,这种方式非常复杂。以下提供的方法是借助“字模工具”来实现的。

(2)显示字符

打开“点阵取模”这个程序文件,并点击参数设置,主要配置两个方面,输入文字的大小(这里选择12号)和其他选项的配置。具体设置参考以下图片说明:

配置完毕后就可以输入字符了,如下图所示:

从以上内容可以看出,对于12号字体的字符,宽×高=8×16,表示一个字符占用8列,16行,也就是两个PAGE。这样很容易就能写出代码了,一定要注意,由于我们采用的是“页寻址模式”,在“写”完8列之后,一定要注意更换PAGE,否则它会自动将这16组数据写入同一个PAGE。

(3)显示汉字

显示一个汉字与字符的操作过程相同,在输入“字符”的时候,修改成输入“汉字”即可。“点阵生成区”产生的数据部分即为我们要写入的数据。


(4)显示一幅图片

显示一幅图与字符的操作过程基本类似。首先准备好一幅图,尺寸为128×64pix,注意保存为.bmp格式的文件。然后在字模工具中点击“打开图像图标”,之后生成数据并点击“点阵生成区”。生成的数据部分即为需要写入的数据

   

        考代码下载:

          链接:https://pan.baidu.com/s/1DqXNUDjyAKiApw-aAji8Ug 密码:lezb

         视频地址:OLED视频

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

51单片机控制0.96寸OLED(IIC接口) 的相关文章

  • 【可信执行环境】Keystone 简介

    当下 xff0c 安全挑战是一个非常突出的问题 可行执行环境TEE Trusted Execution Environment 成为必须满足的特性 1 安全挑战与TEE 1 1 安全挑战的来源 xff1a 1 1 1 被抄板 导致研发投入的
  • 超长docker笔记

    docker ce 和docker ee docker操作容器只需要id前4位就可以 docker编译安装 https blog csdn net lwyeluo article details 51765309 删除命令 docker r
  • 第1课【寄存器开发到库开发】寄存器 库 位操作 封装 分层 GPIO

    目录 基本知识框架课堂笔记什么是寄存器开发什么是库开发寄存器开发和库开发的关联寄存器开发的基本流程寄存器开发的优缺点 库开发的基本流程库开发的优缺点 结论 如何从寄存器开发实现库开发 xff08 GPIO口为例 xff0c 通过操作其寄存器
  • python str基本用法

    目录 1 没什么用的 1 1 调用实例属性后自动执行 getattribute 1 2 实例化后自动调用 new 1 3 将其他变量转变为字符串 repr 1 4 反向替代占位符 格式化 rmod 1 5 字符串反向做乘法 rmul 1 6
  • 32.QButtonGroup

    目录 1 创建和添加按钮 1 1 创建按钮组 1 2 添加按钮 addButton 2 查看按钮 2 3 获取当前选中的按钮 CheckedButton 3 从按钮组中移除按钮 removeButton 4 ID操作 4 1 设置 setI
  • Windows下的Win32串口编程

    在工业控制中 xff0c 工控机 xff08 一般都基于Windows平台 xff09 经常需要与智能仪表通过串口进行通信 串口通信方便易行 xff0c 应用广泛 一般情况下 xff0c 工控机和各智能仪表通过RS485总线进行通信 RS4
  • Ubuntu内网穿透

    本文借鉴 使用frp进行内网穿透 少数派 目录 1 准备材料 2 服务端部署 3 服务端后台运行 4 客户端部署 1 准备材料 1 一台具有公网IP的实体机 xff08 服务端 xff0c 也可以是vps 2 一台网页部署内网的实体机 客户
  • Ubuntu系统基本操作

    文章中所需要的文件可以在这里下载 链接 xff1a https pan baidu com s 1NYXxHD0jebngmCTEwgjGbQ 提取码 xff1a 2jyo 目录 1 安装谷歌浏览器 2 修改开机启动项 3 快捷键查找与设置
  • Ubuntu向日葵锁定之后忘记密码后解除锁定状态

    此操作会重置本机识别码与本机验证码 我们在使用向日葵的时候会使用锁定按钮 设置完密码之后 xff0c 我们忘了 xff0c 就会导致无法使用向日葵 重新安装也不能解决问题 xff0c 这个时候我们找到etc orayconfig conf
  • 26.疲劳检测

    目录 1 项目介绍 2 代码实现 2 1 导入库 2 2 定义68个关键点 2 3 定义eye aspect ratio 2 4 定义参数 2 5 定义阈值 2 6 定义次数 2 7 创建检测器 2 8 获取左眼与右眼的起始点与终止点 2
  • NX点亮oled

    效果是这样的 目录 1 接线 2 配置环境 3 运行代码 4 显示开发板信息 1 接线 小屏幕的名称叫oled xff0c 使用芯片SSD1306驱动 上面有四个引脚 xff0c 与NX接线如下 VCC 5V GND GND SDA 3 S
  • 43.一维卷积-航空公司评论情感预测

    之前我们使用的都是二维卷积 xff0c 二维卷积处理图像问题 xff0c 这次我们使用一维卷积 xff0c 一维卷积处理序列问题 一维卷积就是在一个序列上进行滑动 xff0c 从而得出一维卷积的结果 xff0c 详细一维卷积的介绍可以看一下
  • serial库常见用法

    安装的时候要输入 pip install pyserial 进行安装 serial是python做串口通讯的库 xff0c 在这里介绍了NX与Windows串口通讯 NX串口通讯windows Suyuoa的博客 CSDN博客 目录 1 使
  • Ubuntu开机自启动一些东西

    有三种方式做开机自启动 目录 1 免除sudo密码 2 Startup 2 desktop 3 service 1 免除sudo密码 做完这一步你的所有sudo命令都不会再让你输密码了 如果你的开机自启动的东西需要sudo xff0c 那么
  • 附录3-动态组件 component与keep-alive setup()写法

    目录 1 基本使用 2 按钮切换组件 3 keep alive 3 1 在切换组件的时候 xff0c 默认情况下被切换的组件就会被销毁 3 1 1 数据情况 3 1 2 生命周期函数情况 3 2 使用 keep alive 3 3 keep
  • 附录11-插件ESLint与prettier

    ESLint是提示错误的 xff0c prettier是帮你解决错误的 目录 1 ESLint 1 1 安装 1 2 配置 1 3 效果 2 prettier 1 ESLint 1 1 安装 1 2 配置 在插件介绍中 xff0c 搜索 e
  • 用 C 语言编写 Windows 服务程序

    NTService cpp Defines the entry point for the console application include lt windows h gt include lt stdio h gt define S
  • 10.过滤器

    过滤器是做文本格式化的 xff0c 只能用在 插值表达式 与 v bind 上 xff0c 在vue3中已经被弃用了 xff0c 这里我简单记录一下并写一下在vue3的替代方法 目录 1 基本使用 1 1 vue2中的写法 1 2 vue3
  • 24.eslint

    eslint是约束代码写法的插件 xff0c 比如组件的命名必须要用驼峰命名这种 eslint官网 检测并修复 JavaScript 代码中的问题 ESLint 插件化的 JavaScript 代码检查工具 目录 1 vue cli的esl
  • CocoaPods的使用——pod install pod install --repo-update pod update pod update --repo-update

    Podfile文件中 xff0c 使用某个库时 不指定版本 xff0c 表示希望使用最新版本 xff0c 如 pod SDWebImage 指定明确版本 xff0c 表示只想要这个版本 xff0c 如 xff1a pod 39 SDWebI

随机推荐

  • SceneDelegate有什么作用?删除有什么影响

    自从Xcode11发布以来 xff0c 当你使用新XCode创建一个新的iOS项目时 xff0c SceneDelegate会被默认创建 xff0c 它到底有什么用呢 xff1f 在iOS 13 xff08 及以后版本 xff09 上 xf
  • UICollectionViewCell自适应宽度

    如图所示效果 xff0c 根据字符长度自适应UICollectionViewCell的大小 xff0c 同时进行左对齐处理 如何实现 继承UICollectionViewFlowLayout创建子类 xff0c 并实现相关的方法 xff0c
  • 微信小程序开发——JS中字符和数组的操作

    字符的操作 span class token keyword var span word span class token operator 61 span span class token string 34 hello world 34
  • 微信小程序开发——字体样式设置

    font style文字样式 normal 正常字体italic 斜体字oblique 倾斜字体 font weight文字粗细 取值范围 100 900normal 相当于400bold 粗体 相当于700bolderlighter fo
  • 异常处理——richview不显示cloud路径的图片

    图片上传后 xff0c 得到的文件路径为cloud xxx png格式 xff0c 使用image组件时 xff0c 正常显示 xff0c 但使用richview富文本组件时 xff0c 未显示出来 此时 xff0c 需要通过使用wx cl
  • 编译错误“Too many arguments to function call....”

    运行编译过程中出现错误 xff0c 并提示 Too many arguments to functions call expected 的信息 xff0c 如图一 遇到这种情况时 xff0c 该如何解决呢 xff1f 解决方法是将属性 En
  • CocoaPods的使用——cocoapods的升级更新

    最近使用cocoa pods时提示版本过低需要升级才能正常使用 但是在升级过程中又出现了问题 首先我是直接使用语句 xff1a sudo gem install cocoapods 进行更新升级的 xff0c 没想到又报错了 接着我在想是不
  • http请求方法(GET、POST、HEAD、OPTIONS、PUT、DELETE、TRACE、CONNECT)

    根据HTTP标准 xff0c HTTP请求可以使用多种请求方法 HTTP的1 0版本中只有三种请求方法 xff1a GET POST 和 HEAD方法 到了1 1版本时 xff0c 新增加了五种请求方法 xff1a OPTIONS PUT
  • MongoDB可视化工具 Studio 3T

    告别终端使用可视化工具Studio 3T对MongoDB进行数据库的操作 简单的使用步骤介绍 1 启动MongoDB服务器 xff08 方法见MongoDB介绍与安装中的介绍 xff09 2 连接MongoDB服务器 3 操作数据库
  • 微信小程序开发——form表单

    WeChat小程序交流 xff08 QQ群 xff1a 769977169 xff09 效果图 代码示例 1 xxx wxml lt form bindsubmit 61 39 submitClick 39 bindreset 61 39
  • 苹果电脑(Mac mini或Macbook或iMac)恢复出厂设置

    苹果电脑 xff08 Mac mini或Macbook或iMac xff09 恢复出厂设置 xff0c 首先要做好如下的准备 xff1a 第一 xff1a 数据的备份 xff1b 第二 xff1a 保证正常的wifi连接 xff1b 第三
  • VSLAM基础(一)————常见特征点提取算法及匹配优化

    过年期间闲来无事 xff0c 就想来把这半年学习的一些视觉知识 xff08 视觉slam相关 xff09 做个梳理 xff0c 就以这篇图像特征点提取与匹配作为开头吧 一 关键点与描述子 关键点 xff1a 图像上某些特殊的 具有代表的点
  • 【2017CS231n】第十五讲:神经网络模型压缩和加速(硬件、算法层面)

    一 算法 1 剪枝 不是所有的神经网络连接都有用 减少连接 xff0c 但不降低准确性 尝试性 xff1a 剪枝 xff0c 训练不断重复 xff0c 找到对准确性影响最高的那一部分连接 2 参数共享 1 98 2 09 1 92 1 87
  • 程序员面试等通知一般多久?

    最近面试的人比较多 xff0c 毕竟是金三银四嘛 xff0c 竞争也挺大的 xff0c 很多人在面试之后 xff0c 久久没有收到入职通知 xff0c 等待是一件非常痛苦的事情 那么程序员面试等通知一般多久 xff1f 多久没有发通知就等于
  • 程序员简历项目经验怎么写?

    我是一个典型的互联网公司程序员 xff0c 也见过无数的程序员简历 xff0c 包括很多优秀的程序员简历 xff0c 看了可以让人眼前一亮 xff0c 优美简洁的简历模板 xff0c 项目经验工作重点突出 也见过更多的写得不好的简历 程序员
  • OpenRAVE

    机器人的高级功能 机械手臂控制 软件方面 在ros里 有moveit 研究的过程中 扩展到了openrave专业包 Welcome to OpenRAVE Latest Official Release 0 8 2 OpenRAVE pro
  • C++——STL初识

    一 为什么需要STL xff1f 目的 xff1a 为了建立一套重复利用的东西 使用STL可以避免从事大量重复的工作 为建立数据结构的一套标准 xff0c 诞生了STL 二 基本概念 STL是标准模板库 STL从广义上分为 xff1a 容器
  • Showing progress bar in a status bar pane

    This article was contributed by Brad Mann This code creates a progress bar anywhere in the status window and the control
  • 大小端字节序转换

    特点 各主机的字节序可能不同 xff0c 网络协议指定的通讯字节序为大端 只有在多字节数据处理时才需要考虑字节序 运行在同一台计算机的进程互相通信时 xff0c 不需要考虑字节序 二 字节序转换函数 头文件 xff1a include lt
  • 51单片机控制0.96寸OLED(IIC接口)

    1 OLED初步认识 OLED Organic Light Emitting Diode xff0c 即有机发光二极管 OLED由于同时具备自发光 xff0c 不需背光源 xff0c 对比度高 xff0c 厚度薄 xff0c 视角广 xff