博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
I2C 12864OLED的工作机制
阅读量:6293 次
发布时间:2019-06-22

本文共 1185 字,大约阅读时间需要 3 分钟。

有许多不同规格的OLED显示屏与Arduino兼容, 128x64是最常见的型号, 也很便宜, 淘宝上大概是12~14元一片.

OLED与Arduino的通信

首先, 使用I2C总线的设备, 都可以使用Wire这个library与其通信, 其设备地址可以从0x00至0xFF, 可以通过指定地址操作对应的设备.

其次, 在OLED显示屏中, 每个寄存器地址对应某个功能, 例如反转颜色, 或关闭显示, 寄存器地址的范围也是0x00到0xFF.
所以, 基本上你只需要3个参数就能让OLED显示屏执行某项命令, 方式如下:

Wire.beginTransmission(devAddr);Wire.write(regAddr);Wire.write(data);Wire.endTransmission(); // stop transmitting

例如, 要关闭0x3C这个地址的设备的显示, 我们修改寄存器地址0x40的值为0xAE

Wire.beginTransmission(0x3C); // might be different for your displayWire.write(0x80);Wire.write(0xAE);Wire.endTransmission(); // stop transmitting

我们需要了解的寄存器地址主要有两个: 一个是命令地址, 另一个是数据地址, 可以自行查阅datasheet

如何控制每个像素的显示

这个屏幕的像素矩阵的划分是比较特殊的, 整个屏幕水平方向划分为8个page, 垂直方向则是按像素划分为128 column. 每个page-column包含8个像素, 通过一个十六进制数(其实就是一个字节, 8个bit)来控制, 每个bit控制一个像素

 

如果我们要在左上角显示一个亮点, 需要发送0x01到数据地址, 例如

Wire.beginTransmission(0x3C); // might be different for your displayWire.write(0x40);Wire.write(0x01);Wire.endTransmission(); // stop transmitting

如果需要改变下一column的显示, 你只需要继续给数据地址发送数据, 指针会自动走到下一个column. 如果已经到了最后一个column, 取决于当前的寻址模式, 如果是Page Addressing, 会返回到本page的第一个column, 如果是Horizontal Addressing, 会跳到下一个page的第一个column. 还有第三种寻址模式, Vertical addressing mode. 具体的地址增长方式如下

 

以上就是需要了解的OLED显示机制

翻译自:

转载地址:http://nzcta.baihongyu.com/

你可能感兴趣的文章
内核源码树
查看>>
Java 5 特性 Instrumentation 实践
查看>>
AppScan使用
查看>>
Java NIO框架Netty教程(三) 字符串消息收发(转)
查看>>
Ucenter 会员同步登录通讯原理
查看>>
php--------获取当前时间、时间戳
查看>>
Spring MVC中文文档翻译发布
查看>>
docker centos环境部署tomcat
查看>>
JavaScript 基础(九): 条件 语句
查看>>
Linux系统固定IP配置
查看>>
配置Quartz
查看>>
Linux 线程实现机制分析
查看>>
继承自ActionBarActivity的activity的activity theme问题
查看>>
设计模式01:简单工厂模式
查看>>
项目经理笔记一
查看>>
Hibernate一对一外键双向关联
查看>>
mac pro 入手,php环境配置总结
查看>>
MyBatis-Plus | 最简单的查询操作教程(Lambda)
查看>>
rpmfusion 的国内大学 NEU 源配置
查看>>
spring jpa 配置详解
查看>>