在介绍0.91寸 SSD1306之前先附上模块链接:点击购买SSD1306 OLED显示模块

寄存器设置介绍

其实要驱动一颗IC,说白了即使根据寄存器来通过特定的硬件协议来发送特定的数据就OK了,SSD1306 OLED就是通过IIC硬件协议来发送你要设置的寄存器以及要设置的寄存器值
接下来我们就根据他的数据手册来一一介绍他的寄存器。
SSD1306 OLED的寄存器一共分为几大类,但是由于每个版本的数据手册有细微差异,所以分的类也有差异,但是不影响我们写驱动,我们暂且把SSD1306分为几大类:
1)基本命令表
2)滚屏命令
3)地址设置命令表
4)硬件配置
5)Timing & Driving Scheme Setting Command Table
寄存器格式为:
cmd + cmd value(option)
拿第一个命令作为示例如图所示:

Control byte = 0x81
Data byte(也就是cmd value)为对比度,范围是0~0xff
下面我们来具体说下每一个指令

1 基本命令表

1) 设置对比度(0x81)

此值就是设置对比度,先发送0x81代表要设置对比对,后面跟一个value,代表对比度的值
假设我们把对比度设为最高0xff,如果逻辑分析仪分析如图所示:

2)全部显示开启(A4h/A5h)

看以上的说明你可能比较困惑这个是什么功能,我理解的就是类似于一个OLED显示使能开关,默认是开启的,我们在上位机也有做这个功能,你可以体验一下效果
3)设置正常/反相显示(A6h、A7h)

这个说白了就是背景色跟字体颜色替换,正常显示跟反向显示如图:

4)设置显示开、关(Aeh、AFh)

这个单字节命令用来打开或关闭OLED面板的显示。
当显示是ON,通过设置主机配置命令选择的电路会打开;
当显示为OFF时,这些电路会关闭,segment 和common输出将处于高阻状态。这些命令
设置显示的状态在开关之间切换

2 滚屏命令

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

如图,滚动设置是由7byte组成
Byte 0: bit1~bit7已经固定,bit0也就是X0是决定滚动方向,0是向右滚动,1是向左滚动
Byte 1:0
Byte 2:bit0bit2也就是B0B2是决定滚动的开始页,在3.28图中也有说明每个值对应的页
Byte 3:bit0bit2也就是C0C2是决定滚动的速度,在3.28图中也有说明每个值对应的速度
Byte 4:bit0bit2也就是D0D2是决定滚动的结束页,在3.28图中也有说明每个值对应的页
Byte 5:0
Byte 6:0xff
在声明这个命令前,水平滚动必须用命令(2Eh)关闭,否则,RAM中的内容可能被损坏。
SSD1306 水平滚动是为128列滚动设计的。下面的两张插图演示了滚动的效果:

代码如下:

/******************************************************************************* func name   : hw_oled_set_horizontal_scroll* para        : direct(IN)           --> direct 0->left 1->rightstart_page(IN)      -->Start Page, SSD1306 pages range from 0 to 7end_page(IN)       -->Endi Page, SSD1306 pages range from 0 to 7interval(IN)        -->time interval#define SSD1306_TIME_INTEVAL_2FRAME 0x7#define SSD1306_TIME_INTEVAL_3FRAME 0x4#define SSD1306_TIME_INTEVAL_4FRAME 0x5#define SSD1306_TIME_INTEVAL_5FRAME 0x0#define SSD1306_TIME_INTEVAL_25FRAME 0x6#define SSD1306_TIME_INTEVAL_64FRAME 0x1#define SSD1306_TIME_INTEVAL_128FRAME 0x2#define SSD1306_TIME_INTEVAL_256FRAME 0x3* return      : hw_oled_set_horizontal_scroll result* description : Config horizontal_scroll,but not active
******************************************************************************/
uint8_t hw_oled_set_horizontal_scroll(uint8_t direct,uint8_t start_page,uint8_t end_page,uint8_t interval)
{if((direct != SSD1306_LEFT_H_SCROLL) && (direct != SSD1306_RIGHT_H_SCROLL)){return HW_ERR_OLED_INVALID_DIRECT;}if((start_page > SSD1306_MAX_PAGE) || (end_page > SSD1306_MAX_PAGE)){return HW_ERR_OLED_INVALID_PAGE;}if(interval > SSD1306_TIME_INTERVAL_MASK){return HW_ERR_OLED_INVALID_INTERVAL;}hw_oled_scroll_deactive();if(direct == SSD1306_RIGHT_H_SCROLL){hw_oled_write_byte(oled_cmd_right_hor_scroll,OLED_CMD);}else{hw_oled_write_byte(oled_cmd_left_horl_scroll,OLED_CMD);}hw_oled_write_byte(0x00,OLED_CMD);hw_oled_write_byte(start_page,OLED_CMD);hw_oled_write_byte(interval,OLED_CMD);hw_oled_write_byte(end_page,OLED_CMD);hw_oled_write_byte(0x00,OLED_CMD);hw_oled_write_byte(0xff,OLED_CMD);return HW_ERR_OK;
}

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

这是一个由六个连续字节组成的命令,用来设置持续水平滚动参数和决定滚动开始页,结束
页,滚动速度和垂直滚动偏移的。
命令29h、2Ah中的字节B[2:0],C[2:0]和D[2:0]用来设置持续水平滚动。字节E[5:0]用来设置
持续垂直滚动的偏移量。所有这些字节一起设置持续倾斜(垂直+水平)滚动。如果垂直滚
动偏移字节E[5:0]设为0,那么效果就只是水平滚动。
在发布此命令前必须用命令(2Eh)关闭滚动。否则,RAM内容会损坏。
3)关闭滚动(2Eh)

这个命令停止滚动的动作。在发布命令2Eh来关闭滚动动作之后,RAM内容需要重写
4)激活滚动(2Fh)

5)设置垂直滚动区域(A3h)

代码如下:


uint8_t hw_oled_set_vertical_scroll(uint8_t direct,uint8_t start_page,uint8_t end_page,uint8_t interval,uint8_t offset)
{if((direct != SSD1306_LEFT_V_SCROLL) && (direct != SSD1306_LEFT_V_SCROLL)){return HW_ERR_OLED_INVALID_DIRECT;}if((start_page > SSD1306_MAX_PAGE) || (end_page > SSD1306_MAX_PAGE)){return HW_ERR_OLED_INVALID_PAGE;}if(interval > SSD1306_TIME_INTERVAL_MASK){return HW_ERR_OLED_INVALID_INTERVAL;}if(offset >= SSD1306_MAX_RAW){return HW_ERR_OLED_INVALID_OFFSET;}hw_oled_scroll_deactive();if(direct == SSD1306_LEFT_V_SCROLL){hw_oled_write_byte(oled_cmd_ver_left_horl_scroll,OLED_CMD);}else{hw_oled_write_byte(oled_cmd_ver_right_hor_scroll,OLED_CMD);}hw_oled_write_byte(0x00,OLED_CMD);hw_oled_write_byte(start_page,OLED_CMD);hw_oled_write_byte(interval,OLED_CMD);hw_oled_write_byte(end_page,OLED_CMD);hw_oled_write_byte(offset,OLED_CMD);hw_oled_write_byte(0x00,OLED_CMD);hw_oled_write_byte(0xff,OLED_CMD);return HW_ERR_OK;
}

3 地址设置命令表

1)设置低列开始地址作为页地址模式(00h~0Fh)
设置高列开始地址作为页地址模式(10h~1Fh)
此命令就是设置开始列的地址,分为两个命令发送

2)设置开始页(B0h~B7h)

这两个命令是要显示的内容设定,下面来一个例子说明

如果你设置了开始页为B2开始列为3(低是00h | 03,高为10h | 0),后续的显示内容就是在第二页,从第3列开始
3)设置内存地址模式(20h)

有三种模式:水平,垂直,页(默认)
水平示意图如下:

垂直示意图如下:

4)设置列地址(21h)设置页地址(22h)


以一个例子来说明

此例子说明很详细,就是列从2125,然后行从16显示

4 硬件配置

1)设置显示开始行(40h~7Fh)

这个命令设置显示开始行寄存器来决定显示RAM的开始地址,通过选择0到63的值。当值
为0是,RAM行0映射到COM0,当值为1时,RAM行1映射到COM0,以此类推。
这个我们基本用不到,除非你有苛刻的环境,但是
2)设置Segment 重映射(A0h/A1h)

这个命令设置显示开始行寄存器来决定显示RAM的开始地址,通过选择0到63的值。当值
为0是,RAM行0映射到COM0,当值为1时,RAM行1映射到COM0,以此类推。
这个我们也用到很少
3)设置复用率(A8h)

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

5)设置显示偏移(D3h)

6)设置COM引脚硬件配置(DAh)

5 Timing & Driving Scheme Setting Command Table

1)设置显示时钟分频率、振荡器频率(D5h)

我们选择1分频,以及默认的晶振频率,值为0x80
2)设置重充电周期(D9h)

我们同样选择默认的参数
3)设置Vcomh取消选择水平(DBh)

我们同样选择默认的参数

0.91寸 SSD1306 OLED介绍(二) --- 命令介绍相关推荐

  1. 0.91寸 SSD1306 OLED介绍(四) --- 用上位机验证OLED显示屏

    在介绍0.91寸 SSD1306之前先附上模块链接:点击购买SSD1306 OLED显示模块 前面的文章已经详细说明了OLED的原理,指令,代码 0.91寸 SSD1306 OLED介绍(一) - 整 ...

  2. 0.91寸 SSD1306 OLED介绍(一) --- 整体介绍/IIC时序介绍

    在介绍0.91寸 SSD1306之前先附上模块链接:点击购买SSD1306 OLED显示模块 1. SSD1306 OLED介绍 OLED,即有机发光二极管(Organic Light-Emittin ...

  3. STM32 HAL 驱动I2C总线0.91寸OLED模块(基于SSD1306显示驱动芯片)

    STM32 HAL 驱动I2C总线0.91寸OLED模块(基于SSD1306显示驱动芯片) 基于SSD1306驱动芯片的OLED模块有多种型号,有0.91英寸,0.96英寸等等.OLED采用单色显示方 ...

  4. 物联网开发笔记(85)- 使用Micropython开发ESP32开发板之通过I2C控制0.91寸OLED液晶屏

    一.目的 这一节我们学习如何使用我们的ESP32开发板来学习通过I2C控制0.91寸OLED液晶屏. 二.环境 ESP32 + Thonny + 0.91寸 OLED显示液晶屏模块 + 几根杜邦线 + ...

  5. 【雕爷学编程】Arduino动手做(136)---0.91寸OLED液晶屏模块

    37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的.鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为 ...

  6. esp8266加0.91寸oled显示屏制作天气时钟

    前言 上两周做了个客制化键盘,将esp8266改在键盘里面了显示始终天气等信息,演示视频看我B站视频:200块改的键盘,没错,你是来听歌的,五分钟剪的视频. 键盘制作教程在最后的参考资料里,自行查看. ...

  7. Esp8266 进阶之路31【外设篇】分享一个乐鑫esp8266 SDK编程使用 IIC总线驱动 0.96寸的OLED显示屏,显示天气预报信息。(附带Demo)

    本系列博客学习由非官方人员 半颗心脏 潜心所力所写,不做开发板.仅仅做个人技术交流分享,不做任何商业用途.如有不对之处,请留言,本人及时更改. 序号 SDK版本 内容 链接 1 nonos2.0 搭建 ...

  8. (HAL库学习8)STM32CubeMX 驱动0.96寸IIC oled(取字模,取图模)

    这一篇讲解用STM32CubeMX来使用0.96寸的IIC oled(128*64,VCC,GND,SCL,SDA四脚) 这篇文章我重新写了,如果你是第二次读到这篇文章,对不起,之前卧病额米有讲清楚, ...

  9. ESP32驱动0.96寸12864 OLED显示屏

    ESP32学习导航帖 1.用adafruit_ssd1306库 代码 #include <Wire.h> #include <Adafruit_SSD1306.h> #defi ...

最新文章

  1. array用法 numpy_关于Numpy Array的使用技巧整理
  2. LINUX文件、目录权限及相关操作命令
  3. 精通python网络爬虫-精通python网络爬虫
  4. win7访问linux共享路径不存在,win7系统访问网络共享找不到网络路径如何解决
  5. 如何用VB编程实现关闭WINDOWS窗口?
  6. 《逆袭进大厂》第二弹之C++进阶篇59问59答(超硬核干货)
  7. Android短信验证码-使用mob免费版
  8. mt管理器主题修改教程_微信也可以设置皮肤了!超详细教程和方法!
  9. css版权备案等居于页面底部与超出不换行可滑动
  10. linux系统无法识别固态硬盘_重装Linux操作系统为什么识别不了硬盘
  11. 一牛网5G产品及方案:mtk5G/高能5G核心板/5GCPE/5G相关仪器
  12. 阿里企业邮箱的smtp
  13. 怎么使用山东鼎信发送短信验证码
  14. V2X-ViT:基于Vision Transformer的V2X协同感知
  15. 一、MacBook Pro 使用eGPU-WTG篇,mac告别虚拟机
  16. 【Python】【setFocus】焦点
  17. scanf和cin的返回值问题
  18. linux驱动之字符设备
  19. 旭日图(echarts)
  20. 中国空气能热水器市场品牌竞争格局与投资价值分析报告2022版

热门文章

  1. python练习——恺撒密码 I
  2. java 高德地图路线规划_高德地图api之路线规划
  3. python 秘钥_python 生成ssh秘钥对
  4. 打开html就自动到搜狗网扯,今天一打开IE浏览器,页就一直是搜狗网址导航,怎么改也改不掉,...
  5. 【负荷预测】基于神经网络的负荷预测和价格预测(Matlab代码实现)
  6. 人工智能在产业化进程中,应同时关注基础科学的研究
  7. docker部署单机nacos
  8. 逆天了!看大二学生做的超写实CG卷尾猴!
  9. 回溯法经典算法 求集合中所有的子集
  10. Springboot @Schedule 多个定时任务积压解决