oled--SSD1315驱动

news2024/12/23 9:02:42

OLED

接口方式(由硬件电路确定):6800、8080、spi、i2c.

常见的驱动芯片:ssd1306、ssd1315。

oled屏幕的发光原理不同于lcd,上电后无法直接显示,需要初始化后才能正常显示。

SSD1315手册资料

SSD1315是一款单芯片CMOS OLED/PLED驱动控制芯片,直接从内部128*64位GDDRAM中显示数据。

GDDRAM(Graphic Display Data RAM,图形显示数据RAM)

GDDRAM是位映射静态RAM,保存要显示的位模式。RAM的大小为128*64位,又分为8页(PAGE0~PAGE7),用于单色128*64点阵显示。

当一个数据字节写入GDDRAM时,将当前列同一页的所有行图像数据全部填充(即填充列地址指针所指向的整列,8位)。D0数据位写在最上面一行,D7数据位写在最下面一行。

ssd1315基本命令

设置页寻址模式的列起始地址(00h~0fh、10h~17h)

00h~0fh该命令指定页面寻址模式的RDDRAM的8位列起始地址的较低部分(8位列地址的低四位)。列地址将随着每次数据访问而增加。

10h~17h该命令指定页面寻址模式的RDDRAM的8位列起始地址的较高部分(8位列地址的高四位)。列地址将随着每次数据访问而增加。

页寻址模式会讲到,这命令就会很清楚了。

设置页寻址模式的页起始地址(B0h~B7h)

该命令指定页面寻址模式的RDDRAM的页起始地址(PAGE0~PAGE7)。页寻址模式会讲到,这命令就会很清楚了。

设置内存寻址模式(20h)

3种内存寻址模式:水平寻址模式、垂直寻址模式、页寻址模式。

页寻址模式(A[1:0]=10b)

在页寻址模式下,在GDDRAM进行读写后会自动移向下一个COL,用户必须设置新的PAGE和COL地址才能访问下一个PAGE的内容。在页寻址模式下,PAGE的移动顺序和列地址方向如下图所示。(先确定PAGE,再确定COL,最后写入数据)

页寻址模式下正常的GDDRAM读写,需要通过以下步骤来定义RAM的起始访问指针位置:

通过命令 b0h~b7h 设置目标显示位置的页面起始地址(b固定,0~7对应PAGE0~PAGE7)。

通过命令 00h~0fh 设置指针的较低部分的起始列地址(0固定,0~f搭配下方的0~7)。

通过命令 10h~17h 设置指针的较高部分的起始列地址(1固定,0~7搭配上方的0~f)。

举例:假如页地址 = b2h,较低的起始列地址 = 03h,较高的起始列地址 = 15h。

那么较低的起始列地址剥离开始的0,3对应8位的低4位,即03h。

那么较高的起始列地址剥离开始的1,5对应8位的高4位,即50h。

所以起始列地址 = 50h | 03h = 53h = 83。即对应的PAGE2的COL83。

水平寻址模式(A[1:0]=00b)

在水平寻址模式下,在GDDRAM进行读写后会自动移向下一个COL。当列地址指针到达COL127时,列地址指针重置为COL0,页面地址指针加1。当列地址指针和页地址指针都到达结束地址时,指针被重置为PAGE0_COL0。

水平寻址模式下正常的GDDRAM读写,需要通过以下步骤来定义RAM的起始访问指针位置:

通过命令 21h 设置目标显示位置的列起始地址和列结束地址。(水平)

通过命令 22h 设置目标显示位置的页起始地址和页结束地址。(垂直)

垂直寻址模式(A[1:0]=00b)

在垂直寻址模式下,在GDDRAM进行读写后会自动移向下一个PAGE。当页地址指针到达PAGE7时,页地址指针重置为PAGE0,列地址指针加1。当列地址指针和页地址指针都到达结束地址时,指针被重置为PAGE0_COL0。

垂直寻址模式下正常的GDDRAM读写,需要通过以下步骤来定义RAM的起始访问指针位置:

通过命令 21h 设置目标显示位置的列起始地址和列结束地址。(水平)

通过命令 22h 设置目标显示位置的页起始地址和页结束地址。(垂直)

设置列地址和页地址(21h、22h)

21h这个三字节命令指定GDDRAM的列起始地址和列结束地址。该命令还设置列地址指针为列起始地址。

22h这个三字节命令指定GDDRAM的页起始地址和页结束地址。该命令还设置页地址指针为页起始地址。

举例:假如列起始地址 = 2,列结束地址 = 125,页起始地址 = 1,页结束地址 = 6,通过 20h 命令设置为水平寻址模式。

那么GDDRAM的可访问范围仅为COL2~COL125和PAGE1~PAGE6。另外,将列地址指针设置为2,页地址指针设置为1。

指针移动方向还是和水平寻址方式一样,只不过范围限制了,即在范围内维持了水平寻址模式的指针移动方向。即使指针到达了PAGE6_COL125,指针会重置为PAGE1_COL2。

设置显示起始线(40h~7fh)

该命令设置显示起始行寄存器,通过选择 0~63 值来确定GDDRAM的起始地址。

当值为0时,将RAM第0行映射到COM0;当值为1时,将RAM第0行映射到COM1;类推。(40h~0~COM0、50h~16~COM16、...)

设置对比度控制(81h)

该命令设置显示屏的对比度设置(有效范围:01h~ffh)。分段输出电流随着对比阶跃值的增加而增加。

正反显示(A6h / A7h)

正常显示:1表示开像素。

反向显示:0表示开像素。

设置显示开关(AEh / AFh)

AEh:显示关闭。

AFh:显示打开。

设置COM输出扫描方向(C0h / C8h)

该命令设置COM输出的扫描方向,允许oled模块设计的布局灵活性。此外,一旦发出此命令,显示将显示。例如,如果在正常显示期间发送此命令,则图像显示将立即垂直翻转。

NOP(E3h)

无操作命令。

电荷泵设置(8Dh)

此命令控制电荷泵的开关。

电荷泵必须通过以下命令顺序启动:

8Dh:电荷泵设置

14h / 94h / 95h:使能不同输出模式下的电荷泵

AFh:显示打开

水平滚动设置(26h / 27h)

该命令由7个连续字节组成,用于设置水平滚动参数,并确定滚动的起始页、结束页和滚动速度。

在发出此命令之前,必须禁用水平滚动(2Eh),否则RAM内容可能会损坏。

连续垂直和水平滚动设置(29h / 2Ah)

该命令由8个连续字节组成,用于设置连续垂直滚动参数,并确定滚动的起始页、结束页、起始列、结束列、滚动速度、水平和垂直滚动偏移量。

在发出此命令之前,必须禁用水平滚动(2Eh),否则RAM内容可能会损坏。

如果命令29h / 2Ah的垂直滚动偏移字节E[3:0]被设置为0,则只执行水平滚动(如命令26h / 27h);

如果将列滚动偏移字节A[0]被设置为0,则只执行垂直滚动;

如果E[3:0]和A[0]都设置为0,则可以启用(水平+垂直)滚动;

建议设置F[6:0]=00h和G[6:0]=7Fh,则可以启用全列对角线滚动模式。

取消滚动(2Eh)

此命令停止滚动。发送2Eh命令去停止滚动后,RAM数据需要重写。

激活滚动(2Fh)

该命令启动滚动,只有在滚动设置命令26h / 27h / 29h / 2Ah定义了滚动设置参数后才应该发出。最后一个滚动设置命令中的设置将覆盖前一个滚动设置命令中的设置。

激活滚动后,禁止以下操作:

RAM访问(数据读写)

更改水平滚动设置参数

设置垂直滚动区域(A3h)

该命令由3个连续字节组成,用于设置垂直滚动区域。对于连续垂直滚动功能(29h / 2Ah命令),可以设置垂直滚动的行数小于或等于MUX比率。

内容滚动设置(2Ch / 2Dh)

该命令由7个连续字节组成,用于设置水平滚动参数,并确定滚动的起始页、结束页、开始列和结束列。

发送一次命令2Ch / 2Dh,将水平滚动一列。

设置淡出和闪烁(23h)

该命令设置淡出模式并调整每个淡出步骤的时间间隔。

设置放大(D6h)

在“放大”模式下,显示屏的一行显示内容将扩展为两行,即第0~31行内容填充整个64行的显示面板。

注意:面板必须在可选的COM引脚配置放大功能(DAh命令 A[4]=1)。

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

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

相关文章

微信小程序手机号快速验证组件调用方式

目录 一、测试环境 二、问题现象 三、总结 手机号验证组件&#xff08;包括快速验证组件和实时验证组件&#xff09;调用后无法对事件进行回调这个问题&#xff0c;先说结论&#xff0c;以下是正确的使用方式&#xff1a; <!-- 手机号快速验证组件 --> <button op…

第三章 图像到图像的映射

文章目录 第三章 图像到图像的映射3.1 单应性变换3.1.1 直接线性变换算法3.1.2 仿射变换 3.2 图像扭曲3.2.1 图像中的图像3.2.2 分段仿射扭曲3.2.3 图像配准 3.3 创建全景图3.3.1 RANSAC3.3.2 稳健的单应性矩阵估计3.3.3 拼接图像 第三章 图像到图像的映射 本章讲解…

Pandas数据分析基础—pandas自带函数map()/apply()/applymap()

文章目录 前言一、Series数据处理1、map()方法2、apply()方法3、applymap()方法总结 二、DataFrame数据处理1、map()方法2、apply()方法3、applymap()方法总结 三、map、apply、applymap三个函数区别 前言 在进行数据处理时&#xff0c;经常会对一个DataFrame展开逐行、逐列、…

three.js(二):webpack + three.js + ts

用webpackts 开发 three.js 项目 webpack 依旧是主流的模块打包工具;ts和three.js 是绝配&#xff0c;three.js本身就是用ts写的&#xff0c;ts可以为three 项目提前做好规则约束&#xff0c;使项目的开发更加顺畅。 1.创建一个目录&#xff0c;初始化 npm mkdir demo cd de…

【项目 计网8】4.23 TCP状态转换 4.24半关闭、端口复用

文章目录 4.23 TCP状态转换关于三次握手四次挥手 4.24半关闭、端口复用端口复用 4.23 TCP状态转换 2MSL(Maximum Segment Lifetime) 主动断开连接的一方&#xff0c;最后进入一个TIME_WAIT状态&#xff0c;这个状态会持续&#xff1a;2msl msl&#xff1a;官方建议&#xff1a;…

Linux 多进程解决客户端与服务器端通信

写一个服务器端用多进程处理并发&#xff0c;使两个以上的客户端可以同时连接服务器端得到响应。每当接受一个新的连接就fork产生一个子进程&#xff0c;让子进程去处理这个连接&#xff0c;父进程只用来接受连接。 与多线程相比的不同点&#xff1a;多线程如果其中一个线程操…

Kubernetes(K8s 1.28.x)部署---创建方式Docker(超详细)

目录 一、基础环境配置&#xff08;所有主机均要配置&#xff09; 1、配置IP地址和主机名、hosts解析 2、关闭防火墙、禁用SELinux 3、安装常用软件 4、配置时间同步 5、禁用Swap分区 6、修改linux的内核参数 7、配置ipvs功能 二、容器环境操作 1、定制软件源 2、安…

RocketMQ消息队列-@RocketMQMessageListener实现原理

使用Spring-RocketMQ时&#xff0c;只需要引入rocketmq-spring-boot-starter包&#xff0c;并且定义以下消费者&#xff0c;就可以很简单的实现消息消费 Component RocketMQMessageListener(topic "first-topic", consumerGroup "my-producer-group", s…

过滤器的应用-Filter

过滤器 1.工作原理 2.创建Filter 2.1通过注解的方式实现 //创建一个类&#xff0c;实现Filter接口 WebFilter(urlPatterns "/myfilter") //urlPatterns表示需要拦截的路径 public class MyFilter implements Filter {Overridepublic void doFilter(ServletReques…

深度解读NeuS代码(1):输入数据格式

准备训练数据 在preprocess_cutsom_data中&#xff0c;笔者采取第二个经过colmap的方法。但是这个方法其实需要一个前置结果&#xff0c;即colmap与LLFF的处理。接下来分别讨论&#xff1a; Colmap 一个非常好的操作流程在这里&#xff1a; https://zhuanlan.zhihu.com/p/57…

Kubernetes(k8s)安装NFS动态供给存储类并安装KubeSphere

Kubernetes安装NFS动态供给存储类并安装KubeSphere KubeSphere介绍环境准备KubeSphereNFS动态供给 安装NFS动态供给搭建NFS下载动态供给驱动修改驱动文件安装动态供给 安装KubeSphere下载KubeSphere的yaml资源清单文件安装KubeSphere 使用KubeSphere部署应用创建项目部署MySQL …

Android 13 - Media框架(9)- NuPlayer::Decoder

这一节我们将了解 NuPlayer::Decoder&#xff0c;学习如何将 MediaCodec wrap 成一个强大的 Decoder。这一节会提前讲到 MediaCodec 相关的内容&#xff0c;如果看不大懂可以先跳过此篇。原先觉得 Decoder 部分简单&#xff0c;越读越发现自己的无知&#xff0c;Android 源码真…

nginx-缓存

disk cache&#xff1a;磁盘缓存数据&#xff0c;有时间延迟&#xff0c;但是非常小&#xff0c;相对于直接请求服务器返回 对于用户来说基本无感知。 memory cache&#xff1a;磁盘缓存数据&#xff0c;基本上没有时间延迟 协商缓存&#xff08;nginx自带功能&#xff0c; 不…

机器人中的数值优化(五)——信赖域方法

本系列文章主要是我在学习《数值优化》过程中的一些笔记和相关思考&#xff0c;主要的学习资料是深蓝学院的课程《机器人中的数值优化》和高立编著的《数值最优化方法》等&#xff0c;本系列文章篇数较多&#xff0c;不定期更新&#xff0c;上半部分介绍无约束优化&#xff0c;…

18.kthread_worker:内核线程异步传输

目录 kthread_worker 驱动传输数据的方式 同步传输 异步传输 头文件 kthread_worker结构体 kthread_work结构体 kthread_flush_work结构体 init_kthread_worker()函数 为kthread_worker创建内核线程 init_kthread_work()函数 启动工作 刷新工作队列 停止内核线程…

3D点云测量:计算三个平面的交点

文章目录 0. 测试效果1. 基本内容文章目录:3D视觉测量目录微信:dhlddxB站: Non-Stop_0. 测试效果 1. 基本内容 计算三个平面的交点需要找到满足所有三个平面方程的点。三个平面通常由它们的法向量和通过它们的点(或参数形式的方程)来定义。以下是计算三个平面的交点的一般步…

在VScode中使用sftp传输本地文件到服务器端

安装SFTP 在VScode的扩展中安装sftp 注意这里需要在你没连接服务器的状态下安装&#xff0c;即本机需要有sftp 配置传输端口 安装成功后&#xff0c;使用快捷键"ctrlshiftp",输入sftp&#xff0c;选择Config 根据自己的实际情况修改配置文件&#xff0c;主要改h…

设计模式-6--装饰者模式(Decorator Pattern)

一、什么是装饰者模式&#xff08;Decorator Pattern&#xff09; 装饰者模式&#xff08;Decorator Pattern&#xff09;是一种结构型设计模式&#xff0c;它允许你在不修改现有对象的情况下&#xff0c;动态地将新功能附加到对象上。这种模式通过创建一个包装类&#xff0c;…

排序之交换排序

文章目录 前言一、冒泡排序1、冒泡排序基本思想2、冒泡排序的效率 二、快速排序 -- hoare版本1、快速排序基本思想2、快速排序代码实现3、为什么最左边值做key时&#xff0c;右边先走 三、快速排序 -- 挖坑法1、快速排序 -- 挖坑法基本思想2、快速排序 -- 挖坑法代码实现3、为什…

stable diffusion实践操作-随机种子seed

系列文章目录 stable diffusion实践操作 文章目录 系列文章目录前言一、seed是什么&#xff1f;二、使用步骤1.多批次随机生成多张图片2.提取图片seed3. 根据seed 再次培养4 seed使用4.1 复原别人图4.1 轻微修改 三、差异随机种子1. webUI位置2. 什么是差异随机种子3.使用差异…