最開始使用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 的朋友,商家提供了模塊的程序實例應該對上面的幾個函數比較熟悉。
希望可以幫到你。如有不妥請大家及時指出,謝謝。