OLED 0.96+STM32+51+万年历
一、效果演示
最近刚好接触到OLED0.96,感觉还是挺有意思的,空闲时间就玩了玩,话不多说,先上视频
目前做了两版本,一个是基于STC89C52RC单片机,另一个是基于STM32F103C8T6,接线请看代码引脚定义。
二、驱动IC和模组
OLED 0.96是比较常用的显示屏,主要优点就是小巧,全方位可视(自发光),可自定义图文,价格低灯优点。目前常用驱动IC是SSD1306,不过没单独见过这种IC,一般都是以模组形似出现,类似于这种 模组是有SPI和IIC通信的接口,不过设计底板时候只能选一种设计,如果要自己设计外围电路,参考手册就好。
三、模块基本参数
这里以IIC通信模块为例 模块兼容5V和3.3V,接线切记不可把电源线接反,接反了大概率会烧掉。接线注意线不要太长,否则可能通信异常。
四、IIC通信简介
常见通信协议有4针IIC,7针SPI通信,这里只讲下IIC通信,一般也不用自己去写,IIC通信代码需要移植的话理解下代码就好,最多改下延时。以下是模块IIC协议时序和时间要求: 起始和停止时序 发送一个字节后有个等待应答信号。 SCL先上升沿采样,下降沿SDA电平可改变,下降沿不采样,给SDA时间去改变电平 这个是每种时序状态下需要保持的时间,不同工作频率单片机移植要注意下这个时间是否在范围内。 IIC通信学习可以找个标准IIC程序,对着时序图去学习会更容易理解,主要理解为主,后期写代码大多时候都直接移植,大多时候也只是改下延时。
五、常用寄存器及简介
WriteCmd(0xAE);
WriteCmd(0x20);
WriteCmd(0x10);
WriteCmd(0xB0);
WriteCmd(0xC8);
WriteCmd(0x00);
WriteCmd(0x10);
WriteCmd(0x40);
WriteCmd(0x81);
WriteCmd(0xFF);
WriteCmd(0xA1);
WriteCmd(0xA6);
WriteCmd(0xA8);
WriteCmd(0x3F);
WriteCmd(0xA4);
WriteCmd(0xD3);
WriteCmd(0x00);
WriteCmd(0xD5);
WriteCmd(0xF0);
WriteCmd(0xD9);
WriteCmd(0x22);
WriteCmd(0xDA);
WriteCmd(0x12);
WriteCmd(0xDB);
WriteCmd(0x20);
WriteCmd(0x8D);
WriteCmd(0x14);
WriteCmd(0xAF);
配置前先关闭屏幕显示再配置,一般没有特殊用途不需要改这些寄存器,常用的可能是亮度配置寄存器,调整下亮度,其他的需要调整直接参考下文档调整就好,反正只要电源不反接,指令随便试。
WriteCmd(0x81);
WriteCmd(0xFF);
亮度调节上一条是命令,紧跟的就是亮度值了,00-FF,根据需要调整就好。
六、字库,图形提取
字模提取
图片提取
七、常用函数说明与使用
代码在例程里,为了方便存放资源和共享就放群里了,需要加群获取,这里只大概介绍下。//资源获取与交流 群号:982260346 设置起始点坐标。
void OLED_SetPos(unsigned char x, unsigned char y)
全屏填充,写入0x00全灭,写入0XFF全量
void OLED_Fill(unsigned char fill_Data)
这个是填充函数打包,内容填0x00,一般切换画面前要调用一次
void OLED_CLS(void)
一般低功耗项目采用,不过单纯玩可以忽视这两条,有兴趣可以调用玩玩。
void OLED_ON(void)
void OLED_OFF(void)
显示字符串函数,知道参数直接用就好
void OLED_ShowStr(unsigned char x, unsigned char y, unsigned char ch[], unsigned char TextSize)
显示中文函数,这个中文字库需要自己提取,这里索引是直接填中文在数组的第几个中文范围0-x(X是中文个数-1)
void OLED_ShowCN(unsigned char x, unsigned char y, unsigned char N)
图片显示函数,前面四个参数是两个坐标点X,Y轴位置,最后一个是图片数组,用两个坐标点主要方便当图片小于128X64的时候也可以正常显示,只要输入图片像素点实际大小即可。
void OLED_DrawBMP(unsigned char x0,unsigned char y0,unsigned char x1,unsigned char y1,unsigned char BMP[])
|