0.96oled屏,驱动ssd1306 一些不常用的命令用法和效果

  • Post author:
  • Post category:其他


一、引言

0.96oled一般用ssd1306驱动,ssd1306的指令丰富,但是在平常显示使用默认的初始化命令,之后就是读写显示数据了,网上的例程很多,除了常用的命令,有些命令在一些场合也有用。

初始化函数例子:

//OLED显示模块初始化
void Oled_Init(void)
{
    WriteCmd(0xae);	//关显示

    WriteCmd(0xd5);	//设置显示时钟分频率、振荡器频率
    WriteCmd(0x80);//A[3:0]:分频频率1到16,A[7:4]频率

    WriteCmd(0xa8);	//duty设置
    WriteCmd(0x3f);	//duty=1/64

    WriteCmd(0xd3);	//显示偏移
    WriteCmd(0x00);//不偏移

    WriteCmd(0x40);	//起始行 40~7F

    WriteCmd(0x8d);	//升压允许
    WriteCmd(0x14);

    WriteCmd(0x20);	//设置内存地址模式
    WriteCmd(0x02);//00水平地址模式,01垂直模式,02页地址模式,

    WriteCmd(0xc8); //行扫描顺序:从上到下c8	//上下颠倒c0
    WriteCmd(0xa1); //列扫描顺序:从左到右a1	//左右翻转a0

    WriteCmd(0xda); //sequential configuration
    WriteCmd(0x12);

    WriteCmd(0x81); //微调对比度,本指令的0x81不要改动,改下面的值
    WriteCmd(0xcf); //微调对比度的值,可设置范围0x00~0xff

    WriteCmd(0xd9); //Set Pre-Charge Period
    WriteCmd(0xf1);

    WriteCmd(0xdb); //Set VCOMH Deselect Level
    WriteCmd(0x40);

    WriteCmd(0xaf); //开显示
}

正常显示效果图例子:

//行扫描顺序:从上到下,列扫描顺序:从左到右

二、其他效果

因为网上屏幕驱动例程太多就不发了,只介绍命令和对应的效果。

(1)上下颠倒

初始化函数里行扫描顺序C8改成C0:

WriteCmd(0xc0); //行扫描顺序:上下颠倒

(2)左右翻转

初始化函数里列扫描顺序a1改成a0:

WriteCmd(0xa0); //列扫描顺序:左右翻转

(3)屏幕旋转180°显示

组合命令

WriteCmd(0xc0); //行扫描顺序: 上下颠倒

WriteCmd(0xa0); //列扫描顺序:左右翻转

就能将屏幕倒过来显示,而且不影响数据取模和传输。

(4)持续垂直和水平滚屏



SSD1306命令里有持续水平滚屏(26/27),但是试了一下没有成功。好在试了垂直和水平滚屏命令(29/2A)有用,能够实现水平滚动的效果。

设置前需要先发关闭滚动的指令2e,接着发滚动指令29(向右)或2a(向左)。

紧接着发5条参数设置指令,用来设置持续水平滚动参数和决定滚动开始页,结束页,滚动速度和垂直滚动偏移的,最后才发开始滚屏指令2f。


注意:发送开始滚屏(2f)前要先传输好显示数据,如果在滚屏的时候传输显示数据RAM中的内容可能被损坏。

    WriteCmd(0x2e);//关滚动
    WriteCmd(0x2A);//29向右,2a向左
    WriteCmd(0x00);//A:空字节
    WriteCmd(0x00);//B:水平起始页
    WriteCmd(0x00);//C:水平滚动速度
    WriteCmd(0x01);//D:水平结束页
    WriteCmd(0x00);//E:每次垂直滚动位移
	WriteCmd(0x2f);//开滚动

单水平滚动效果,0-1页向左滚动:

加点垂直位移的效果:

效果一般般,而且手册里说了没有单垂直滚动的指令,所以垂直滚动一定要带一点水平滚动,即使水平滚动的开始页和结束页都设置为0x00。

三、SSD1306-OLED驱动中文手册




点击下载





版权声明:本文为yxy244原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。