0.96寸OLED 的驱动原理及代码(IIC模式)

前言

先上效果图
在这里插入图片描述
在这里插入图片描述

这类屏幕大部分是由SSD1306来驱动的,datasheet在这:SSD1306Z

英语好的直接看这个PDF就明白了,英语不好的…还不赶紧好好学习一下,下面也是挑手册内容讲一讲,图也是手册里面截的

关于IIC总线,就不啰嗦了。

正文

从机地址

b7b6b5b4b3b2b1b0
011110SA0R/W_

SA0用来扩展从机地址,一般硬件设置为0。
b0指明读写操作的,一般写的比较多,这一位是0。
所以地址为0x78

屏幕像素与GDDRAM (Graphic Display Data RAM)

屏幕有128列(Column ),64行(Row),共128*64像素点,每8行为1页(PAGE),共有8页。
用PAGE2举个例子,每列都用一个字节存储,一页PAGE就需要128个bytes,注意高位在下。
1

总的来看就是这样,总共需要128*8个bytes。
2
重映射之后,相当于左右翻转(列重映射)和上下翻转(行重映射)。

IIC总线数据帧格式

3

  • 发送命令
    0x78表示从设备地址,0x00表示写命令,0xXX表示若干条命令。

0x78, 0x00, 0xXX, 0xXX, 0xXX, 0xXX(若干指令)

  • 发送数据
    0x78表示从设备地址,0x40表示写数据到DDRAM里面,一般来说是128个。

0x78, 0x40, 0xXX (128bytes的数据)

至于读操作基本不会用到,不再赘述,有兴趣自己尝试。

指令介绍

这个写的很详细,建议看看
https://wlink.blog.csdn.net/article/details/81329770

这个指令翻译的比较全
https://wenku.baidu.com/view/e8307ca72f60ddccda38a0e0.html

Set Lower Column Start Address for Page Addressing Mode (00h~0Fh)

在地址模式为Page Addressing,列开始位置的低四位(0h~Fh)

Set Higher Column Start Address for Page Addressing Mode (10h~1Fh)

在地址模式为Page Addressing,列开始位置的高四位(0h~Fh)

Set Memory Addressing Mode (20h)

设置内存地址模式,这是一个两个字节的命令,第二个字节的低两位确定了模式
00:
在这里插入图片描述
01:
在这里插入图片描述
10:
在这里插入图片描述
11:无效

Set Column Address (21h)

设置列地址,三字节命令,二三字节分别为列开始和结束位置,用于模式00,01。

Set Page Address (22h)

设置页地址,三字节命令,二三字节分别为页开始和结束位置,用于模式00,01。
这两个相当于设置了矩形显示的边界。

Set Display Start Line (40h~7Fh)

设置显示开始列

Set Contrast Control for BANK0 (81h)

双字节命令,设置对比度00h~FFh

Set Segment Re-map (A0h/A1h)

Segment重映射,也就是列重映射(相当于左右翻转)

Entire Display ON (A4h/A5h)

全屏点亮(A5h),显示内容随着DDRAM刷新(A4h)。

Set Normal/Inverse Display (A6h/A7h)

反色显示

Set Multiplex Ratio (A8h)

设置复用率

Set Display ON/OFF (AEh/AFh)

显示开关

Set Page Start Address for Page Addressing Mode (B0h~B7h)

Page Addressing模式下,Page的地址(0h~Fh)

Set COM Output Scan Direction (C0h/C8h)

COM显示输出方向,也就是行重映射(相当于上下翻转)

Set Display Offset (D3h)

双字节命令,显示偏移

Set Display Clock Divide Ratio/ Oscillator Frequency (D5h)

设置显示时钟分频值/震荡频率,双字节命令

Set Pre-charge Period (D9h)

设置预充电周期

Set COM Pins Hardware Configuration (DAh)

设置硬件PIN的连接方式

Set VCOMH Deselect Level (DBh)

设置Vcomh

NOP (E3h)

空指令

Horizontal Scroll Setup (26h/27h)

水平滚动设置

Continuous Vertical and Horizontal Scroll Setup (29h/2Ah)

垂直和水平滚动配置

Deactivate Scroll (2Eh)

禁用滚动

Activate Scroll (2Fh)

启用滚动

Set Vertical Scroll Area(A3h)

设置垂直滚动区域

命令详细格式看手册吧,不在翻译了。

驱动代码

使用的是STM32CubeMX 6.0.1和MDK5.32,工程如下
链接:https://pan.baidu.com/s/1LxD3pvg99jUowFiwYym3pw
提取码:zq08

  • 19
    点赞
  • 159
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
当涉及到特定硬件设备的驱动代码时,我无法提供完整的实现代码。但是,我可以给你一个基本的框架,帮助你开始编写0.96OLED IIC驱动代码。以下是一个示例: ```C #include <Wire.h> #include <Adafruit_GFX.h> #include <Adafruit_SSD1306.h> #define SCREEN_WIDTH 128 #define SCREEN_HEIGHT 64 Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1); void setup() { // 初始化串行通信 Serial.begin(9600); // 初始化I2C总线 Wire.begin(); // 初始化OLED显示屏 if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { Serial.println(F("SSD1306初始化失败")); while (true); } // 清空屏幕 display.clearDisplay(); // 设置文本大小 display.setTextSize(1); // 设置文本颜色 display.setTextColor(SSD1306_WHITE); // 设置光标位置 display.setCursor(0, 0); // 显示文本 display.println("Hello, World!"); // 更新显示 display.display(); } void loop() { // 主循环 } ``` 这个示例使用了Adafruit SSD1306库来驱动0.96OLED显示屏。它通过I2C总线与Arduino连接,使用Wire库进行通信。在setup()函数中,我们初始化了串行通信、I2C总线和OLED显示屏。然后,我们清空屏幕、设置文本大小、颜色和光标位置,并显示文本。最后,我们调用display.display()来更新显示。 请注意,以上代码是一个简单的示例,具体的驱动代码可能会因不同的OLED型号和库而有所不同。你需要根据你使用的具体硬件设备和库进行相应的修改和调整。希望这个示例能帮助你入门。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值