OLED内部结构

主要结构

主要结构包括,MCU、 (经典款用的是SSD1306;方屏SSD1317;竖屏SH1107;有些新款用的是SSD1315)
GDDRAM(我们写入的显示数据存放在这里)、Command register(命令寄存器,写入的命令放在这里)等部分。

各芯片数据手册链接如下:
SSD1306:https://leoeinstein.lanzous.com/iTI83kivv9e
SSD1317:https://leoeinstein.lanzous.com/iiJTukivv8d
SSD1107:https://leoeinstein.lanzous.com/iYK41kivvaf
SSD1315:https://leoeinstein.lanzous.com/iLhlmkivvbg

部分引脚说明

" # "表示“非”,低电平有效

引脚 说明
RES# 复位信号,拉低时芯片会开始初始化,置1的时候正常工作
CS# 片选脚,不接的情况下,默认低电平(默认选中)
D/C# 为1时,读写数据;为0时,读写指令
R/W# 读写控制端,为1时读;为0时写
E/(RD#) 串行模式下接到VSS,也就是低电平
D[7:0] 串行通信模式下,D0是串行时钟输入(SCLK);D1是串行数据输入(SDIN)

在选择不同的通信方式时,引脚的接法会有些差别,请看下表:

4线SPI

串行接口说明

四线串行接口由串行时钟: SCLK串行数据: SDIND/C#、CS组成

其中D0充当SCLK,D1充当 SDIN;

对于未使用的数据引脚,D2应该保持开路状态;D3到D7、E和 R/W# 的引脚连接到外部地。

时序图


通过时序图可以看到:

在SCLK的每个上升沿,SDIN数据从高到低逐位,移位到一个8位移位寄存器,其顺序为D7…D0。

8个时钟后,对D/C#进行采样(看看接下来的是数据还是命令),移位寄存器中的数据字节会同步写入到图形显示数据aRAM ( GDDRAM )或命令寄存器。

GDDRAM


如上图显示数据寄存器,被分为128 * 8页,每一页有8位,总的就有 128 *8 * 8=128 * 64


如上图所示,当一个字节(8位)数据写入GDDRAM时候,会从低位数据D0开始写入,一直到D7。

也就要求了,字符或者图片取模时要求 取模方式为列行式, 取模走向 为低位在前。

命令

命令表(部分)

Hex Command
AF 设置显示为打开
AE 设置显示为关闭
A4/A5 显示打开
A6/A7 正常显示(A6)/反转显示(A7)
81 设置对比度控制


更为详细的命令可参考:SSD1306手册

OLED 初始化程序

驱动芯片:STM32F407

//-----------------OLED端口定义----------------#define OLED_SCLK_Clr() GPIO_ResetBits(GPIOG,GPIO_Pin_12)//SCL
#define OLED_SCLK_Set() GPIO_SetBits(GPIOG,GPIO_Pin_12)#define OLED_SDIN_Clr() GPIO_ResetBits(GPIOD,GPIO_Pin_5)//DIN
#define OLED_SDIN_Set() GPIO_SetBits(GPIOD,GPIO_Pin_5)#define OLED_RES_Clr() GPIO_ResetBits(GPIOD,GPIO_Pin_4)//RES
#define OLED_RES_Set() GPIO_SetBits(GPIOD,GPIO_Pin_4)#define OLED_DC_Clr() GPIO_ResetBits(GPIOD,GPIO_Pin_15)//DC
#define OLED_DC_Set() GPIO_SetBits(GPIOD,GPIO_Pin_15)#define OLED_CS_Clr()  GPIO_ResetBits(GPIOD,GPIO_Pin_1)//CS
#define OLED_CS_Set()  GPIO_SetBits(GPIOD,GPIO_Pin_1)
//OLED的初始化函数
void OLED_Init(void)
{GPIO_InitTypeDef  GPIO_InitStructure;RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD|RCC_AHB1Periph_GPIOG|RCC_AHB1Periph_GPIOE,ENABLE);//使能PORTA~E,PORTG时钟//GPIO初始化设置GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_15 ;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;//普通输出模式GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//推挽输出GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100MHzGPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//上拉GPIO_Init(GPIOD, &GPIO_InitStructure);//初始化//GPIO初始化设置GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8|GPIO_Pin_10;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;//普通输出模式GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//推挽输出GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100MHzGPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//上拉GPIO_Init(GPIOE, &GPIO_InitStructure);//初始化//GPIO初始化设置GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;//普通输出模式GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//推挽输出GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100MHzGPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//上拉GPIO_Init(GPIOG, &GPIO_InitStructure);//初始化OLED_RES_Clr();delay_ms(200);OLED_RES_Set();OLED_WR_Byte(0xAE,OLED_CMD);//--turn off oled panelOLED_WR_Byte(0x00,OLED_CMD);//---set low column addressOLED_WR_Byte(0x10,OLED_CMD);//---set high column addressOLED_WR_Byte(0x40,OLED_CMD);//--set start line address  Set Mapping RAM Display Start Line (0x00~0x3F)OLED_WR_Byte(0x81,OLED_CMD);//--set contrast control registerOLED_WR_Byte(0xCF,OLED_CMD);// Set SEG Output Current BrightnessOLED_WR_Byte(0xA1,OLED_CMD);//--Set SEG/Column Mapping     0xa0左右反置 0xa1正常OLED_WR_Byte(0xC8,OLED_CMD);//Set COM/Row Scan Direction   0xc0上下反置 0xc8正常OLED_WR_Byte(0xA6,OLED_CMD);//--set normal displayOLED_WR_Byte(0xA8,OLED_CMD);//--set multiplex ratio(1 to 64)OLED_WR_Byte(0x3f,OLED_CMD);//--1/64 dutyOLED_WR_Byte(0xD3,OLED_CMD);//-set display offset   Shift Mapping RAM Counter (0x00~0x3F)OLED_WR_Byte(0x00,OLED_CMD);//-not offsetOLED_WR_Byte(0xd5,OLED_CMD);//--set display clock divide ratio/oscillator frequencyOLED_WR_Byte(0x80,OLED_CMD);//--set divide ratio, Set Clock as 100 Frames/SecOLED_WR_Byte(0xD9,OLED_CMD);//--set pre-charge periodOLED_WR_Byte(0xF1,OLED_CMD);//Set Pre-Charge as 15 Clocks & Discharge as 1 ClockOLED_WR_Byte(0xDA,OLED_CMD);//--set com pins hardware configurationOLED_WR_Byte(0x12,OLED_CMD);OLED_WR_Byte(0xDB,OLED_CMD);//--set vcomhOLED_WR_Byte(0x40,OLED_CMD);//Set VCOM Deselect LevelOLED_WR_Byte(0x20,OLED_CMD);//-Set Page Addressing Mode (0x00/0x01/0x02)OLED_WR_Byte(0x02,OLED_CMD);//OLED_WR_Byte(0x8D,OLED_CMD);//--set Charge Pump enable/disableOLED_WR_Byte(0x14,OLED_CMD);//--set(0x10) disableOLED_WR_Byte(0xA4,OLED_CMD);// Entire Display On (0xa4/0xa5)OLED_WR_Byte(0xA6,OLED_CMD);// Disable Inverse Display On (0xa6/a7) OLED_WR_Byte(0xAF,OLED_CMD);OLED_Clear();
}

例程

工程链接:https://leoeinstein.lanzous.com/ipI81kj0vgb

OLED(经典0.96英寸)--4SPI--SSD1306控制原理(含常用芯片_oled例程)相关推荐

  1. MSP430 G2553 硬件SPI OLED 单片机 0.96英寸7针OLED SPI 6针OLED

    SSD1306通信方式靠硬件选择: 四线SPI(只针对SSD1306的一个名字)的OLED款式1 D0时钟 D1数据 RST复位 DC数据命令选择 四线SPI(只针对SSD1306的一个名字)的OLE ...

  2. MSP430 F5529 硬件SPI OLED 单片机 0.96英寸7针OLED SPI 6针OLED

    https://www.ti.com.cn/cn/lit/ds/symlink/msp430f5529.pdf?ts=1600611951477&ref_url=https%253A%252F ...

  3. 0.96英寸128*64 OLED显示二维码

    0.96英寸I2C,OLED 显示屏显示二维码 STM32 SSD1306 RT-Thread 关于 软.硬件环境 开启RT-Thread的终端打印二维码功能 思路 移植开肝 开始测试 关于 最近手头 ...

  4. 0.91英寸和0.96英寸OLED驱动区别

    0.96寸分辨率是128*64 0.91寸分辨率是128*32 驱动芯片:SSD1306 接口:IIC 0.96英寸OLED驱动程序 delay_ms(100); // 延迟(必须要有)OLED_WR ...

  5. F411-WeAct(二)IIC 驱动SSD1306 OLED(0.96寸)

    F411-WeAct(二)IIC 驱动SSD1306 OLED(0.96寸) 硬件资源介绍 F411-WeAct开发板 OLED STM32初始化 初始化时钟 外设初始化 正式开始 下载源代码 硬件资 ...

  6. WeMos TTGO WiFi + 蓝牙电池 ESP32 0.96 英寸 OLED点亮屏幕

    我为什么要写这篇文章呢,因为就光光点亮这块屏幕花了我整整2天时间,其实我知道不难,但是我买到的时候问店家要资料,除了宝贝详情里的除外一点资料都没有,我连屏幕的引脚怎么连接的,ESP32的引脚是如何布局 ...

  7. oled屏0.96寸如何配置中文大小

    oled如何配置中文大小 插入链接与图片 链接: link. 图片: 带尺寸的图片: 居中的图片: 居中并且带尺寸的图片: 当然,我们为了让用户更加便捷,我们增加了图片拖拽功能. 如何插入一段漂亮的代 ...

  8. 使用ssd1306驱动,来驱动0.96寸中景园oled屏幕

    硬件 nucleo-f411RE, 中景园oled屏幕(0.96寸,七线) 驱动文件地址 stm32-ssd1306 驱动文件说明 使用的库: H A L HAL HAL 支持的通信协议: S P I ...

  9. 0.96寸IIC接口ssd1306和ssd1315驱动oled12864屏幕介绍

    0.96寸IIC接口ssd1306和ssd1315驱动oled12864屏幕介绍 图为中景园的0.96寸ssd1306屏幕,适合于PCB一体化设计.如果想分开,可以直接购买带焊接好转接的OLED屏幕. ...

  10. 0.96寸 4针OLED屏模块功能实现(STM32)

    认识模块 0.96寸4针OLED屏模块是一种显示屏模块,它包括一个0.96英寸的OLED显示屏和4个引脚.这种OLED屏幕模块通常用于嵌入式系统和小型电子设备中,可以显示文本.图像和其他类型的信息.由 ...

最新文章

  1. LinkedIn工程经理眼中的数据世界格局
  2. java 判断二叉树是否平衡_剑指Offer - 判断二叉树是否是平衡二叉树
  3. Tenka1 Programmer Contest C - Align
  4. Linux字符界面操作进阶
  5. mysql 烂泥_烂泥:学习mysql的binlog配置
  6. mysql修改密码的注意点
  7. mysql redis教程_MySQL redis学习与应用
  8. 上海特斯拉自燃事件终于有结果了:没有系统缺陷 单个电池模组故障
  9. birt中文手册在线_QGIS简体中文翻译现状
  10. 【渝粤教育】国家开放大学2018年秋季 0242-21T机械制图 参考试题
  11. 【逗老师带你学IT】Amazing啊,Zoom落地企业内网IPPBX解决方案,ZOOM可以打国内电话了
  12. 全球与中国高炉系统(钢铁厂)市场深度研究分析报告
  13. Feign出现The bean ‘seckill.FeignClientSpecification‘, defined in null, could not be registered. A be
  14. 软件公司使用XPlanner进行敏捷项目计划和进度跟踪管理
  15. VMware:在部分链上无法执行所调用的函数,请打开父虚拟磁
  16. Spring Security登录用户数据获取(4)
  17. setsockopt()函数和getsockopt()函数
  18. 学生管理系统V1.0
  19. handwrite-1
  20. VB.NET 获取主板和CPU序列号

热门文章

  1. 记录因安装npcap带来的无线连接上不了网的问题
  2. 遥感导论(梅安新版)知识点概括
  3. 阿特拉斯开发协议--与ATLAS 扭力控制器交互
  4. 数分下(第2讲):二阶线性微分方程的解法
  5. 五子棋ai:极大极小搜索和α-β剪枝算法的思想和实现(qt和c++)(三)极大极小搜索和α-β剪枝算法
  6. CSDN 编辑器使用方法
  7. C语言 简单的文件下载器
  8. 基于STC89C52单片机的多功能智能清洁小车设计
  9. 低代码平台开发 python_低组词_低的多音字组词,低是多音字吗,低组词有哪些
  10. SPSS统计分析常用知识点