CC2530使用OLED實現自動換行垂直滾動顯示

2021-10-05 01:40:25 字數 1413 閱讀 1367

實驗平台:cc2350

螢幕引數:128*64

驅動晶元: ssd1306

使用oled時,想要重定向printf輸出到oled螢幕上,並實現橫向128列輸出完畢後或者遇到 『\n』 時自動換行顯示,並且將已輸入內容向上移動一行,類似win的命令列視窗。實現的主要思路為ssd1306的設定顯示偏移量( set display offset (d3h) )

基於這種辦法,我們只要將偏移量移動字型的高度值,然後清空移動後行,指定新的輸入點即可,比如我使用8*16的字型,那麼我只要將偏移位址移動16即可,即從com0移動到com16,數值為從0x40到0x50。下面是我的實現辦法,**的適應性為0,後續繼續改進。

實現偏移

uint8 oled_verticalscrolling(uint8 addr)

else if(addr >= 0x50 && addr < 0x60)//第二行

else if(addr >= 0x60 && addr < 0x70)//第三行

else

oled_wr_byte(0xd3,oled_cmd); //設定起始位

oled_wr_byte(addr,oled_cmd); //起始位移動16位

return addr;

}

實現清空移動後的行

void oled_clearforprintf(uint8 addr)

else if(addr >= 0x50 && addr < 0x60)//第二行

else if(addr >= 0x60 && addr < 0x70)//第三行

else

for(y=i;y重定向printf

__near_func int putchar(int c)//printf輸出重定向

else if(addr_now >= 0x50 && addr_now < 0x60)//第二行

else if(addr_now >= 0x60 && addr_now < 0x70)//第三行

else

return c;

}else

}oled_showchar(x, y, (uint8_t)c ,16); //列印字元ch

x += 8; //跳轉到下乙個位置, 是否越界有上面函式判斷

return c;

}

CC2530之OLED12864程式詳解

include code tab.h define lcd scl p0 4 序列時鐘輸入 define lcd sda p0 5 序列資料輸入 define lcd rst p0 6 復位輸入端 define lcd dc p0 7 資料 命令控制 define xlevell 0x00 defi...

外部中斷 CC2530

中斷在計算機組成中都有詳細介紹。中斷分為外部中斷和內部中斷。對於cc2530片上系統來說,通用i o引腳設定為輸出時候,可以用於產生中斷,可以設定為外部訊號的上公升或下降沿出發。p0,p1,p2都有中斷使能位。對於ien1 2暫存器內的埠所有的位都是公共的。此外還包括其他很多態別的中斷 除了公共中斷...

CC2530學習筆記

第四單元 定時器計數器應用 1 定時器 計數器的分類 cc2530中共包括5個定時器 計數器,分別是定時器1 定時器2 定時器3 定時器4和睡眠定時器。2 定時器 計數器的作用 1 計數器功能 對任意時間間隔的輸入訊號的個數進行計數,一般用來對外界事件進行 計數。其輸入訊號一般來自微控制器外部開關型...