一、引言
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。