今天在老譚的幫助下,操作了一下oled,以前對於液晶顯示不是很重視,特別是對於這種oled的顯示,更是沒怎麼好好的熟悉過,今天被老譚逼著,好好的練習了一下對於oled的操作。
先來一些oled的介紹。
oled,即有機發光二極體,又稱為有機電雷射顯示。oled由於具備自發光,不需要光源、對比度高、厚度薄、視角廣、反應速度快、可用於扭曲性面板、使用溫度範圍廣、構造及製作簡單等優異性特點。
以現在的技術,oled尺寸很難做到大型化,但是解析度卻而已做到很高。這次我使用的oled尺寸為0.96寸,但是解析度達到了128*64。
這附圖是視訊記憶體和螢幕對應關係表,從上表上可以發現,螢幕每頁包含128列,總共8頁,每頁總共8行。正好就是128*64的點陣大小。
該oled提供多種介面方式:6800、8080、4線spi、iic介面,方式的選擇主要是通過晶元引腳bs1和bs2設定的,bs1和bs2的設定方法與模組的介面模式的關係如下表:
關於6800和8080、iic方式的介面和電路連線就不介紹了。我主要使用的是spi介面,在這裡主要介紹一下關於spi的引腳連線。
cs:oled的片選訊號。
rst(res):硬復位oled
dc:命令/資料標誌 (0:讀寫命令,1:讀寫資料)
sclk:序列時鐘線。在4線序列模式下,d0訊號線作為序列時鐘線sclk。
sdin:序列資料線。在4線序列模式下,d1訊號線作為序列資料線sdin。
其餘引腳的連線檢視資料手冊就可以進行自行設計。
這裡,我使用的mcu是stm32f103zet6,本來在電路板上設計的時候,想著是使用硬體spi,所以除了sclk、sdin之外,其餘引腳也是連線的硬體spi的i/o引腳,但是後來想到,自己不知道在使能spi引腳時鐘之後,我只使用了其中兩個引腳,怎麼將其餘兩個引腳作為普通gpio使用,所以最後直接使用的是模擬spi方式。
其實,只要是編寫了模擬spi部分的程式之後,就可以完全操作這個液晶屏了。我的學習過程是參照正點原子的例程了pdf文件進行學習的。這裡,前面的程式部分都是參考正點原子的程式編寫的,但是,後面關於顯示部分,個人感覺正點原子對於oled的操作方式有點像對於tft彩色液晶屏的操作,感覺不是很適合oled的操作方式,所以,自己重新編寫了這部分的程式。
今天在自己編寫和除錯過程中,主要問題是集中在關於字模取模和關於顯示部分的理解,所以,今天晚上的總結主要是對於這部分只是的總結。
字模取模軟體使用的是pctolcd2002軟體,感覺這個軟體還是使用起來比較的順手的。下面,先來乙個軟體介面的截圖,然後再說明一下操作需要注意的事項。
第一張是軟體的介面,在這個介面中,我們可以進行以下操作:①字型大小設定;②點陣大小設定;③字模輸入;④生成字模編碼;⑤儲存字模編碼為txt文字。
第二張是軟體取模方式設定介面,在這個介面中,我們可以進行以下操作:①點陣格式選擇,這個根據你使用的點陣的實際情況進行選擇。②取模方式選擇,這個是比較重要的,如果取模方式設定不正確,那麼取模的編碼是沒有任何意義的;③取模走向:這個也是關係到字模編碼正確與否的關鍵,需要認真選擇;④自定義格式,可以選擇你需要的字模編碼輸出格式,可以選擇c51模式,輸出的是十六進製制資料,方便我們使用;⑤每行顯示的資料:這個選項是關係到你最後生成的字模編碼的陣列大小,可以根據自己的實際情況進行選擇,然後在程式中進行運用。
關於取模方式,我使用的oled支援的是列行式,即先顯示每列,然後再一行一行的增加,直至顯示完我們的資料。
然後,還有一點需要注意的就是,使用這個軟體生成的字模編碼,我們可以有兩種儲存方式:①使用二維陣列;②使用一維陣列。陣列使用的不同,也就造成了我們在程式中應用時候的不同。
如果我們要顯示的字元比較的小,即16*8,或者12*8,也就是不牽扯到多頁的話,我們的程式就比較的簡單,因為在程式設計的過程中,我們不需要增加頁的位址,但是,如果我們顯示的字元是多頁的話,這樣就牽扯到了多頁的處理。下面附上我自己編寫的程式:
上面的程式中,主要使用的一維陣列儲存的字模編碼。而且字模的大小是32*16大小的字元,即需要占用4頁。使用offset變數實現了 初始列 位置的設定,通過num來查詢資料,確定了我們字模編碼。
如果在使用過程中,使用的字模大小不一樣的話,如果不牽扯到多頁,就可以取消掉k變數,使用k變數實現了多頁的顯示。
如果我們使用的字模的大小不一樣的話,即不是 16的大小,我們只需要修改 for(j=k*16;j
如果我們使用的字模陣列不是二維陣列的話,只需要修改lcdwritebyte 函式中的第乙個引數,這個引數 就是 編碼資料值。比如修改為二維陣列 numeric[x1][x2],其中x1代表的是索引值,即我們需要顯示的資料。x2代表的是 整個字模大小,一般,二維陣列中的陣列大小都是一樣的,即x2為固定值。所以,這個程式中,我們就修改為
numeric[num+j][64];
從上面的分析中,我才漸漸的明白了關於多頁顯示部分的原理。可能是有點笨吧。呵呵
下面實際說明乙個自己的取模畫面:
通過例項說明一下自己對oled上面的字元顯示的理解,和對取模方式的選擇。
好了,到這裡,就將自己今天比較疑惑的地方總結完成了。今天的問題還是主要在多頁字元顯示方式的不理解方面,經過這個之後,對於多頁顯示終於有了清晰的認識了。
對於oled的操作也是有些認知了。但是沒有做字串和點的顯示實驗,以後在補上。
關於oled操作函式補充:
//oled資料顯示函式
void lcd_disnumline(uint8 offset, uint8 num)}}
//oled寫資料函式
void oled_wr_byte(u8 dat,u8 cmd)
oled_cs=1;
oled_rs=1;
}
液晶屏按鍵處理
在主函式內檢測是否按下 原口令 按鍵 if chx dat 152 chx dat 262 chy dat 98 chy dat 140 if receive length key input 10,receive 0 while pint 0 等待pint為高電平。即放開按鈕。按鍵處理 unsig...
解讀LED液晶屏
首先,大家熟悉的 lcd 是液晶顯示器 liquid crystal display 的英文縮寫。市場上不論台式電腦還是筆記本 電腦的顯示器都是 lcd 但是 lcd 的背光技術卻大有不同 目前市面上大部分lcd 是採用 ccfl 背光技術的lcd 而 led 屏採用的是 led 背光技術!led ...
TFT STN液晶屏區別
2.什麼是tft?tft thinfilmtransistor 是指薄膜電晶體,意即每個液晶畫素點都是由整合在畫素點後面的薄膜電晶體來驅動,從而可以做到高速度 高亮度 高對比度顯示螢幕資訊,是目前最好的lcd彩色顯示裝置之一 其效果接近crt顯示器,是現在膝上型電腦和台式電腦上的主流顯示裝置。tft...