最开始使用OLED 是开发一个小项目,用于显示各种数据,使用的控制芯片是STC8A系列的单片机,这个芯片相对于传统的51单片机还是有点区别,另外还有一些外设。具体可以下载官方资料查看。本文主要是讲解OLED。
首先是接口使用的是IIC,STC8A有自带的IIC,但我没有使用,使用普通IO口模拟IIC。IIC协议的时序这里不做详解。这里主要注意是由于发送数据到屏时SCL脚和SDA脚的速度太快导致显示不正常,所以我在操作时序那增加了适当的延时就可以了,但是不能延时过长,太长影响其他程序的实时性。
举个例子:
void IIC_Start()
{
_nop_();
_nop_();
_nop_();
_nop_();
OLED_SCLK_Set();
_nop_();
_nop_();
_nop_();
_nop_();
OLED_SDIN_Set();
_nop_();
_nop_();
_nop_();
_nop_();
OLED_SDIN_Clr();
_nop_();
_nop_();
_nop_();
_nop_();
OLED_SCLK_Clr();
_nop_();
_nop_();
_nop_();
_nop_();
}加了几个空指令。
另外,看过别人的显示觉得不太合理,首先是每次改变显示是都要进行刷屏,这样让人觉得屏幕有闪动的感觉。使用体验不好。所以我做了一些小改动,就是再要显示的区域先写入空白,相当于在指定区域进行刷新,再在那个区域写入想要的数据。这样的话就不用每次都进行刷屏。
例如我写的几行代码: OLED_ShowString(86,0," ",16);
OLED_ShowNum(86,0,Power_Number * 50 + 50,4,16);
如果有从网上买过OLED 的朋友,商家提供了模块的程序实例应该对上面的几个函数比较熟悉。
希望可以帮到你。如有不妥请大家及时指出,谢谢。