找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 15500|回复: 12
收起左侧

SSD1306-0.96寸oled屏-滚动指令介绍

  [复制链接]
ID:207882 发表于 2020-2-20 12:17 | 显示全部楼层 |阅读模式
           ,工作老是延迟,0收入,,无聊想起之前的OLED液晶屏,,所以重新玩起来,,这里只针对滚动指令进行说明,,大家一起学习。通讯方式IIC,我用的是页寻址模式显示,,程序网上很多,,这里就不进行介绍,进入正题!!!!        

                                   2滚动命令表

D/C
Hex
D7
D6
D5
D4
D3
D2
D1
D0
命令
描述
0
0
0
0
0
0
0
26/27
A[7:0]
B[2:0]
C[2:0]
D[2:0]
E[7:0]
F[7:0]
0
0
*
*
*
0
1
0
0
*
*
*
0
1
1
0
*
*
*
0
1
0
0
*
*
*
0
1
0
0
*
*
*
0
1
1
0
B2
C2
D2
0
1
1
0
B1
C1
D1
0
1
X0
0
B0
C0
D0
0
1
连续水平滚动设置
26小时,X[0]= 0,右向水平滚动
27 h,X[0]= 1,左向水平滚动
(水平滚动1列)
[7:0]:虚拟字节(设置为00 h)
B(2:0):定义开始页面地址
0~7   PAGE0 PAGE7
C(2:0):设置每个滚动步骤之间的时间间隔的帧频
000 b - 5帧100 b - 3帧
001 b - 64帧101 b - 4帧
010 b - 128帧110 b - 25帧
011 b - 256帧111 b - 2帧
D(2:0):定义最终页面地址
0~7   PAGE0 PAGE7
D(2:0)的值必须大于或等于B(2:0)
E[7:0]:虚拟字节(设置为00 h)
F[7:0]:虚拟字节(设置为FFh)
0
0
0
0
0
0

29/2A
A[2:0]
B[2:0]
C[2:0]
D[2:0]
E[5:0]
0
0
*
*
*
0
0
0
*
*
*
0
1
0
*
*
*
E5
0
0
*
*
*
E4
1
0
*
*
*
E3
0
0
B2
C2
D2
E2
X1
0
B1
C1
D1
E1
X0
0
B0
C0
D0
E0
连续垂直和水平滚动
设置

29H,X1X0 = 01 :垂直和水平滚动
2AH,X1X0 = 10 :垂直和水平滚动
(水平滚动1列)
[7:0]:虚拟字节
B(2:0):定义开始页面地址
0~7   PAGE0 PAGE7
C(2:0):设置每个滚动步骤之间的时间间隔的帧频
000 b - 5帧100 b - 3帧
001 b - 64帧101 b - 4帧
010 b - 128帧110 b - 25帧
011 b - 256帧111 b - 2帧
D(2:0):定义最终页面地址
0~7   PAGE0 PAGE7
D(2:0)的值必须大于或等于B(2:0)
E[5:0]:垂直滚动偏移量
例如E[5:0]= 01 h指抵消= 1行
E(5:0)= 3跳频是指抵消= 63行
请注意(1)没有可用连续垂直滚动。
0
2E
0
0
1
0
1
1
1
0
禁用滚动
停止由命令配置的滚动
26 h / 27 h / 29 h / 2A。
请注意
(1)
发送了2Eh命令来禁用滚动操作之后,需要重写ram数据。
0
2F
0
0
1
0
1
1
1
1
激活滚动
通过滚动设置命令配置的开始滚动:26h/27h/29h/2Ah,有效序列如下:
有效命令序列1:26h;2Fh
有效命令序列2:27h;2Fh
有效命令序列3:29h;2Fh
有效的命令序列4:2Ah;2Fh
例如,如果“26h;2a;2F。发出命令后,将执行最后一个滚动设置命令中的设置,即本例中的2Ah。换句话说,上一个滚动设置命令中的设置将覆盖前一个滚动设置命令中的设置。
0
0
0
A3
A[5:0]
B[6:0]
1
*
0
0
*
B5
1
A5B5
0
A4B4
0
A3B3
0
A2
B2
1A1
B1
1A0
B0
设置垂直滚动
区域
A(5:0):没有。的行固定区域。没有。的行固定区域引用的GDDRAM(重置= 0)(即行。0]
B[6:0]:没有。在滚动的行。这是一个用于垂直的行数滚动。滚动区域开始在第一行下面的顶部固定区域。(重置= 64)
请注意
(1)A[5:0]+[6:0]< = MUX比率
(2)B(6:0)< = MUX比率
(3)垂直滚动抵消(E(5:0)h / 2啊29日)<B[6:0]
(3 b)设置显示线(X5X4X3X2X1X0开始40 h ~ 7跳频)< B[6:0]
(4)最后一行滚动区域的转移到第一行滚动的区域。
(5)对64 d MUX显示(5:0)= 0,B[6:0]= 64:整个区域卷轴
(5:0)= 0,B[6:0]< 64:高级卷轴
A[5:0]+[6:0]< 64:中心区卷轴
A[5:0]+[6:0]= 64:底部区域卷轴


3  设置水平左右移步骤:
        OLED_WR_Byte(0x2E,OLED_CMD);        //关闭滚动
        OLED_WR_Byte(0x26,OLED_CMD);        //水平向左或者右滚动 26/27
        OLED_WR_Byte(0x00,OLED_CMD);        //虚拟字节
        OLED_WR_Byte(0x00,OLED_CMD);        //起始页 0
        OLED_WR_Byte(0x07,OLED_CMD);        //滚动时间间隔
        OLED_WR_Byte(0x07,OLED_CMD);        //终止页 7
        OLED_WR_Byte(0x00,OLED_CMD);        //虚拟字节
        OLED_WR_Byte(0xFF,OLED_CMD);        //虚拟字节
        OLED_WR_Byte(0x2F,OLED_CMD);        //开启滚动

这里需要注意的是  设置前要先关闭 滚动   还有的是在写入终止页后需要写入  两个虚拟字节,,刚开始老是不成功,弄了好久,找了网上资料,有些居然没有说明这这步骤,,,最终找了英文的手册里面是有提及到说要这一步的(见附件),网上说有些是不需要写入这两个虚拟字节,可能厂家不同吧,,所以设置不成功的小伙伴可以试试是不是这里出了问题!!!


3  设置垂直和水平滚动的(没有可用连续垂直滚动)步骤:
        OLED_WR_Byte(0x2e,OLED_CMD);        //关闭滚动
        OLED_WR_Byte(0x29,OLED_CMD);        //水平垂直和水平滚动左右 29/2a
        OLED_WR_Byte(0x00,OLED_CMD);        //虚拟字节
        OLED_WR_Byte(0x00,OLED_CMD);        //起始页 0
        OLED_WR_Byte(0x07,OLED_CMD);        //滚动时间间隔
        OLED_WR_Byte(0x07,OLED_CMD);        //终止页 1
        OLED_WR_Byte(0x01,OLED_CMD);        //垂直滚动偏移量
        OLED_WR_Byte(0x2F,OLED_CMD);        //开启滚动



注意:垂直滚动偏移量=0时,就只有水平左右移了。
         通过设置起始页  终止页  被设置的区域就垂直和水平滚动,,其余的区域就只有垂直滚动
         手册说没有可用连续垂直滚动,,我理解是如果你的图案是占page0-page7,最多有7页的区域是可以单单连续垂直滚动,没有办做到全部连续处置滚动,不知道这样对不对????

3  设置滚动区域:
        OLED_WR_Byte(0x2e,OLED_CMD);        //关闭滚动
        OLED_WR_Byte(0x29,OLED_CMD);        //水平垂直和水平滚动左右 29/2a
        OLED_WR_Byte(0x00,OLED_CMD);        //虚拟字节
        OLED_WR_Byte(0x00,OLED_CMD);        //起始页 0
        OLED_WR_Byte(0x07,OLED_CMD);        //滚动时间间隔
        OLED_WR_Byte(0x07,OLED_CMD);        //终止页 1
        OLED_WR_Byte(0x01,OLED_CMD);        //垂直滚动偏移量
        
      以上跟上面一样


        OLED_WR_Byte(0xA3,OLED_CMD);        //开启滚动
        OLED_WR_Byte(16,OLED_CMD);        //开启滚动
        OLED_WR_Byte(8,OLED_CMD);        //开启滚动


      OLED_WR_Byte(0x2F,OLED_CMD);        //开启滚动



注意:上面内容用翻译器编译,可能描述不是很多,具体操作就是,比如上面本来是page0-7  实现垂直+水平滚动,,加入了下面3条指令后,,那么能垂直+水平滚动的区域就是cow16-cow24(16+8),,也就是page2,其他的页区域就只有水平滚动的功能,,我debug,,出来的现象也是这样的,,,


      上传几张照片和文档,一起加油

左移

左移

右移

右移

垂直加水平

垂直加水平

垂直加水平-局部

垂直加水平-局部

垂直

垂直

加油

加油

内部SSD1306驱动芯片手册.pdf

1.11 MB, 下载次数: 132, 下载积分: 黑币 -5

英文官网手册

SSD1306命令.doc

155.5 KB, 下载次数: 193, 下载积分: 黑币 -5

中文命令介绍

评分

参与人数 2黑币 +60 收起 理由
王者不可阻挡 + 10 绝世好帖!
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:702522 发表于 2020-3-4 22:30 | 显示全部楼层
楼主,我的oled用了滚动命令后卡着不动,有时还会卡死,只有较小几率卡了十几秒后能顺利滚动,但字体的位置出现了少量偏移,是什么原因呢
回复

使用道具 举报

ID:710838 发表于 2020-3-18 14:00 | 显示全部楼层
测试了下真的可以
回复

使用道具 举报

ID:710838 发表于 2020-3-25 14:50 | 显示全部楼层
垂直滚动是怎么实现的呢,这个屏不支持垂直滚动,但是看你发的图是可以垂直滚动的,我试了很多种方法都不行
回复

使用道具 举报

ID:119642 发表于 2020-5-4 17:47 | 显示全部楼层
那两个虚拟字节还必须要加入。否则就是不动~
回复

使用道具 举报

ID:119642 发表于 2020-5-4 18:41 | 显示全部楼层
水平那个滚动。最后那两个虚拟字节必须写上。手册都写了。
回复

使用道具 举报

ID:418587 发表于 2020-6-3 11:48 | 显示全部楼层
这个只能一张图滚动吗,要衔接另一张图滚动该怎么搞啊
回复

使用道具 举报

ID:331469 发表于 2020-9-30 10:12 | 显示全部楼层
只要垂直的命令设置是怎么样的代码,楼主可以分享一下吗
回复

使用道具 举报

ID:748788 发表于 2020-10-1 15:35 | 显示全部楼层
jore06 发表于 2020-9-30 10:12
只要垂直的命令设置是怎么样的代码,楼主可以分享一下吗

楼主的最后一段就是垂直滚屏,刚测试成功。反倒是第二段搞不定
回复

使用道具 举报

ID:735365 发表于 2020-12-12 15:23 | 显示全部楼层
jore06 发表于 2020-9-30 10:12
只要垂直的命令设置是怎么样的代码,楼主可以分享一下吗

起始页和结束页设置的超过范围,就不会有水平滚动了。
回复

使用道具 举报

ID:884042 发表于 2021-8-15 11:38 | 显示全部楼层
tyyyy00 发表于 2020-3-4 22:30
楼主,我的oled用了滚动命令后卡着不动,有时还会卡死,只有较小几率卡了十几秒后能顺利滚动,但字体的位置 ...

这个滚屏初始化要在while外面执行
回复

使用道具 举报

ID:505918 发表于 2021-10-13 15:03 | 显示全部楼层
试了很多次,终于滚动起来了,就是少了前面的一个2E停止命令,感谢楼主!
回复

使用道具 举报

ID:144936 发表于 2021-10-13 15:40 | 显示全部楼层
不错,改天试试。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表