STM32实现软件IIC协议操作OLED显示屏(2)

欢迎入群共同学习交流
时间记录:2024/1/27

一、OLED相关介绍

(1)显示分辨率128*64点阵
(2)IIC作为从机的地址0x78
(3)操作步骤:主机先发送IIC起始信号S,然后发送OLED的地址0x78,然后获取校验位ACK,接着发送控制字节,告诉OLED接下来发送的一个字节数据是指令字节还是数据字节,Co=0,接下来只包含数据,D/C=0时,接下来的是指令字节,D/C=1时,接下来的是数据字节,最后发送一个IIC结束信号
OLED操作步骤
1.3.1 写指令代码

static void vOledWriteCmd(u8 cmd)
{
   
   
    vIICStart();
    vIICSendByte(0x78);
    vIICCheckAck();
    vIICSendByte(0x00);
    vIICCheckAck();
    vIICSendByte(cmd);
    vIICCheckAck();
    vIICStop();
}

1.3.2 写数据代码

static void vOledWriteData(u8 data)
{
   
   
    vIICStart();
    vIICSendByte(0x78);
    vIICCheckAck();
    vIICSendByte(0x40);
    vIICCheckAck();
    vIICSendByte(data);
    vIICCheckAck();
    vIICStop();
}

(4)显存GDDRAM大小为128*64
(5)每8COM组成一个Page,共有8Page,即64行
(6)每一个COM中有128个Segment,即128列
(7)在一个Segment中,发送的显示数据,数据高位在下,数据低位在上
Seg中数据显示

二、OLED指令+数据结合使用,先发送命令指令然后发送数据指令

(1)设置对比度,即屏幕亮度

命令 数据
0x81 对比度(0-255)0x00-0xFF,默认值0x7F(127)

实际是设置OLED的驱动电流,对比度设置越大,驱动电流越大,显示亮度就越高。
(2)OLED显示跟随GDDRAM,即向GDDRAM写入显示数据后是否立马改变显示

命令 数据
0xA4:OLED跟随,0xA5:OLED显示固定,不跟随,默认值0xA4

(3)设置反色,即GDDRAM中0还是1表示显示

命令 数据
0xA6:正常显示,1表示显示,0表示不显示,0xA7:反转显示,1表示不显示,0表示显示,默认值0xA6

(4)开启/关闭显示

命令 数据
0xAE:关闭显示,进入睡眠模式,0xAF:开启显示,默认值0xAE

(5)设置显示列地址

命令 数据
0x00-0x0F:设置列地址的低四位,默认值0x00,0x10-0x17:设置列地址的高四位,默认值0x10

此设置仅在页寻址模式下有效,两个设置共同决定了显示列的起始地址
(6)设置寻址模式

命令 数据
0x20 0x00:行寻址模式,0x01:列寻址模式,0x02:页寻址模式,默认值0x02

2.6.1 页寻址模式,一行写入完毕向第1列覆盖显示
页寻址模式
2.6.2 水平/行寻址模式,一行写入完毕向下一行的第一列覆盖显示
行寻址模式
2.6.3 垂直/列寻址模式
列寻址模式
(7)设置列地址

命令 数据
0x21 0-127,默认为0,0-127,默认为127

此设置仅在行/列寻址模式下有效,两个数据用于设置列起始地址和结束地址
(8)设置页地址

命令 数据
0x22 0-7,默认0,0-7,默认7

此设置仅在行/列寻址模式下有效,两个数据用于设置页的起始地址和结束地址
(9)设置显示页的起始地址

命令 数据
0xB0-0xB7,默认值0xB0

此设置仅在页寻址模式下有效,用于设置显示页的起始页地址
(10)设置显示开始行

命令 数据
0x40-0x7F:对应64-0行,默认0x40

(11)设置列对于Segment的映射

命令 数据
0xA0:Column0映射到Seg0,0xA1:Column127映射到Seg0,默认值0xA0

(12)设置通道数(分辨率)

命令 数据
0xA8 0x01-0x3F,对应1-63,默认63

(13)设置COM Driver的扫描方向

命令 数据
0xC0:从COM0扫描到COMN,0xC8:从COMN扫描到COM0,默认值0xC0

(14)设置COM的偏移值,一般设置为0,保证屏幕的完整显示

命令 数据
0xD3 0x00-0x3F,默认0

(15)设置时钟分频比和时钟频率

命令 数据
0xDA [3:0]:设置时钟分频比,[7:4]:设置时钟频率,0x12:128x64OLED,0x02:128x32OLED

(16)操作充电泵

命令 数据
0x8D 0x10:关闭充电泵,0x14:打开充电泵

(17)设置预充电时间

命令 数据
0xD9 0x00-0xFF

(18)设置电压级别

命令 数据
0xDB 默认值0x20,0.77xVCC

三、OLED函数实现

(1)初始化函数

void vOledInit(void)
{
   
   
    vIICInit();
    Delay_Ms(100);
    
    vOledWriteCmd(0xA8);//设置分辨率
    vOledWriteCmd(0x3F);//0x3f : 128*64  0x1f  128
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值