【瑞康原创,转载需说明】
//方式一:这种容易阅读,适合初学者。
void SSD1306_init(void)
{
SSD1306_Rst(); //显示屏复位,这个函数要自已写,就是拉低RST脚(如果有,有的在模块上自带硬件复位)10ms左右拉高到高电平。
Write_byte(0xAE,SSD1306_CMD); //关闭显示 //1010111X //AE:关闭 AF:打开
Write_byte(0xD5,SSD1306_CMD); //设置显示器时钟【双字节指令】 //11010101
Write_byte(0x80,SSD1306_CMD); //低4位A3-A0表示分频比,0000=1 -- 1111= 16//高4位A7-A4表示频率,值越大频率越高 0000=-25% -- 1111=50%//0X80=10000000 表示 频率+15%,不分频
Write_byte(0xAD,SSD1306_CMD); //电荷泵调节器//DC-DC模式设置【双字节指令】//1010101101
Write_byte(0x8B,SSD1306_CMD); //内置DC-DC开关//101000101X//8A:关 8B:开
Write_byte(0x32,SSD1306_CMD); //设置电荷泵电压值,可以从6.4V到9.0V //001100XX //30:6.4V 31:7.4V 32:8.0V 33:9.0V
Write_byte(0xDB,SSD1306_CMD); //对比度控制【双字节指令】【可选】 //10000001
Write_byte(0x33,SSD1306_CMD); //0X30-0X33
Write_byte(0x81,SSD1306_CMD); //对比度控制【双字节指令】【可选】 //10000001
Write_byte(0xff,SSD1306_CMD); //配合DB使用
Write_byte(0xDA,SSD1306_CMD); //设置通用PADS硬件配置,以匹配SSD1306面板【双字节指令】//11011010
Write_byte(0x12,SSD1306_CMD); //000X0010 取值02或12H//02: 12://实际中错了显示花屏
Write_byte(0x8D,SSD1306_CMD); //充电泵打开/关闭,实验证明1106可以不要这句,1306,必须要才能有显示。
//AB CD 可以同时使用或同时不使用,AB可以单独使用(CD不同),CD不可以单独使用(CD使用必须使用AB)
Write_byte(0xA8,SSD1306_CMD); //A 多路分配模式【可选】
Write_byte(0x3F,SSD1306_CMD); //B
Write_byte(0x20,SSD1306_CMD); //C -Set Page Addressing Mode (0x00/0x01/0x02) 【可选】
Write_byte(0x02,SSD1306_CMD); //D
Write_byte(0xD9,SSD1306_CMD); //设置充电前的持续时间【双字节指令】【可选】 //11011001
Write_byte(0x1F,SSD1306_CMD); //低四位A3-A0表示预充电期调整 0000:不调整 -- 1111:15DCLK
//高四位A7-A4表示充电期调整 0000:不调整 -- 1111:15DCLK//1F=00011111 表示预充电1个DCLK调整,充电15个DCLK调整
Write_byte(0x40,SSD1306_CMD); //设置开始显示行【可选】
Write_byte(0x14,SSD1306_CMD); //--set(0x10) disable
Write_byte(0xA4,SSD1306_CMD); //全屏显示开/关【可选】//101010010X//A4:正常 A5:全屏显示//经实践A4有显示,A5无显示
Write_byte(0xD3,SSD1306_CMD); //设置垂直显示偏移,可以实现图像垂直方向上的移动【双字节指令】//1011010011
Write_byte(0x00,SSD1306_CMD); //偏移量在00H-3FH之间(就是0-63)
Write_byte(0xA1,SSD1306_CMD); //图像水平镜像 //A0:从右向左扫描 A1:从左向右扫描(默认值)
Write_byte(0xC8,SSD1306_CMD); //图像垂直镜像 //C0:从上至下显示,最上面为低位 //C8:从下至上显示,最下面为低位
Write_byte(0xA6,SSD1306_CMD); //正常/反相显示 //101010011X //A6:正常(默认值) A7:反相
Write_byte(0xAF,SSD1306_CMD); //打开/关闭显示器 //1010111X //AE:关闭 AF:打开
SSD1306_Clear_Screen(); //清屏,这个函数要自已写
}
//方式二:程序清爽,适合学会后复制使用即可。
unsigned char code init_Value[]={0xAE,0xD5,0x80,0xAD,0x8B,0x32,0xDB,0x33,0x81,0xFF,0xDA,0x12,0x8D,0xA8,0x3F,
0x20,0x02,0xD9,0x1F,0x40,0x14,0xA4,0xD3,0x00,0xA1,0xC8,0xA6,0xAF}; //复位数据
void SSD1306_init(void)
{
unsigned char i;
SSD1306_Rst(); //复位
for (i=0;i<28;i++)
Write_byte(init_Value[i],SSD1306_CMD); // 写配置
SSD1306_Clear_Screen(); //清屏
}