SSD1306 OLED显示屏:智能精致的视觉体验

SSD1306 – OLED显示屏

芯片介绍\引脚介绍

SSD1306是一款带控制器的用于OLED点阵图形显示系统的单片CMOS OLED/PLED驱动器。它由128个SEG(列输出)和64个COM(行输出)组成。该芯片专为共阴极OLED面板设计。

SSD1306内置对比度控制器、显示RAM(GDDRAM)和振荡器,以此减少了外部元件的数量和功耗。该芯片有256级亮度控制。数据或命令由通用微控制器通过硬件选择的6800/8000系通用并行接口、I2C接口或串行外围接口发送。该芯片适用于许多小型便携式应用,如手机副显示屏、MP3播放器和计算器等。

使用该芯片可通过硬件电阻连接选中使用三线SPI、四线SPI或IIC,如下图所示,在 SPI 接口中 R1,R2,R8 三个电阻是不焊接的,如果想使用IIC 接口的话需要将 R3 换到 R1 上,R8 可以焊接也可不焊接。

SSD1306接线方式

本笔记使用该芯片以SPI通信方式

  • D0 OLED 的 D0 脚,在 SPI 和 IIC 通信中为时钟管脚

  • D1 OLED 的 D1 脚,在 SPI 和 IIC 通信中为数据管脚

  • RES OLED 的 RES#脚,用来复位(低电平复位)

  • DC OLED 的 D/C#E 脚,数据和命令控制管脚

  • CS OLED 的 CS#脚,也就是片选管脚

  • 关于SPI通信相关内容,详见协议使用笔记SPI章节。

    GDDRAM寻址模式

    一般我们不修改其寻址模式,使用默认的页寻址,但当有数据更合适其它寻址方式时,可以更换寻址方式。

    页寻址

    页寻址模式是器件默认选择的GDDRAM寻址模式,通过“20H,02H”命令可以设置寻址模式为页寻址。
    在页寻址模式下,寻址只在一页(PAGEn)内进行,地址指针不会跳到其他页。每次向GDDRAM写入1byte显示数据后,列指针会自动+1。当128列都寻址完之后,列指针会重新指向SEG0而页指针仍然保持不变。通过页寻址模式我们可以方便地对一个小区域内数据进行修改。

    ssd1306 页寻址

    水平寻址

    水平寻址模式可以通过指令“20H,00H”来设置。
    水平寻址模式下,每次向GDDRAM写入1byte数据后,列地址指针自动+1。列指针到达结束列之后会被重置到起始列,而页指针将会+1。页地址指针达到结束页之后,将会自动重置到起始页。水平寻址模式适用于大面积数据写入,例如一帧画面刷新。

    ssd1306 水平寻址

    垂直寻址

    垂直寻址模式可以通过指令“20H,01H”来设置。
    垂直寻址模式下,每次向GDDRAM写入1byte数据之后,页地址指针将会自动+1。页指针到达结束页之后会被重置到0,而列指针将会+1。列地址指针达到结束页之后,将会自动重置到起始列。

    ssd1306 垂直寻址

    部分命令

    设置对比度

    双字节指令:81H + A[7:0]

    A[7:0]为设置对比度的级数,共0~255级,输出电流随设置数值增加。

    设置正常/反转显示

    单字节指令:A6H / A7H (正常/反转)

    正常为1亮0灭,反转为1灭0亮

    设置寻址方式

    单字节指令:20H + A[1:0]

    A[1:0]为寻址方式,00为水平寻址,01为垂直寻址,02为页寻址。默认为02。

    设置起始/终止列地址

    三字节指令:21H+A[6:0]+B[6:0] (起始 + 终止)

    A、B为需要设置的起始和终止坐标,最高位为无效位,即最高设置坐标为127。

    注意:该指令仅在设置为水平和垂直的寻址模式下才有效

    设置起始/终止页地址

    三字节指令:22H+A[2:0]+B[2:0](起始 + 终止)

    A、B为需要设置的起始和终止坐标,仅低三位有效,即最高设置页为7。

    注意:该指令仅在设置页寻址模式下才有效

    设置起始列地址低位/高位

    单字节指令:00H / 10H (低/高)+ A[3:0]

    A为需要设置页的坐标的低/高四位。

    注意:该指令仅在设置页寻址模式下才有效

    设置页地址

    单字节指令: B0H + A[3:0]

    A为需要设置的页,最高为7。

    注意:该指令仅在设置页寻址模式下才有效

    代码示例

    变量介绍

    #define OLED_DAT 1	//写数据
    #define OLED_CMD 0	//写命令
    
    #define OLED_CS 	//片选
    #define OLED_DC 	//数据命令
    #define OLED_RES 	//硬件重置
    #define OLED_MOSI 	//SPI主出从入
    #define OLED_SCK 	//时钟
    
    u8 SPI_SendReceive_Byte(u8 tdata) //SPI发送接收函数
    //关于SSD1306相关初始化命令,详见相关手册,此处由于篇幅不做展示
    

    发送数据、命令

    void OLED_Send_Byte(u8 tdata,u8 mode)
    {
        OLED_DC = mode;//确定模式
        SPI_SendReceive_Byte(tdata);
    }
    

    设置写入坐标

    //页寻址设置坐标
    void OLED_SetAxis(u8 page, u8 col)
    {
        OLED_Send_Byte(0xB0+page,OLED_CMD);			//第几页
        OLED_Send_Byte(0x10+(col >> 4),OLED_CMD);	//该页高四位
        OLED_Send_Byte(0x00+(col & 0x0f),OLED_CMD);	//该页低四位
    }
    
    物联沃分享整理
    物联沃-IOTWORD物联网 » SSD1306 OLED显示屏:智能精致的视觉体验

    发表评论