采用C8051F023單片機的OLED顯示方案設計
2.3 各種控制信號
再就是關(guān)于如何用MCU控制,MCU通過(guò)RES#、CS#、D/C、WR#、RD#和D0~D7共13個(gè)接口控制SSD1303驅動(dòng)IC,從而控制OLED顯示屏。CS#為片選信號,當CS#接低電平時(shí)MCU才能與驅動(dòng)IC通信;RES#是復位使能端,當接低電平時(shí),所有控制寄存器均被設定為出廠(chǎng)時(shí)的默認狀態(tài),同時(shí)圖像寄存器清零;D/C為數據/命令選擇信號;WR#和RD#分別為寫(xiě)和讀選擇信號,當CS#為低時(shí),在其下降沿讀寫(xiě)有效。通過(guò)改變D/C、WR#和RD#三個(gè)接口的高低,單片機對OLED的控制有四種狀態(tài),可由表1顯示出來(lái)。
表1 讀寫(xiě)狀態(tài)一覽表
D/C | WR# | RD# | 狀態(tài) |
0 | 0 | 1 | 寫(xiě)命令 |
0 | 1 | 0 | 讀命令(“忙”檢測) |
1 | 0 | 1 | 寫(xiě)數據 |
1 | 1 | 0 | 讀數據 |
2.4 讀寫(xiě)的時(shí)序
只要按照VGG12864G的時(shí)序波形圖進(jìn)行讀和寫(xiě),即可完成OLED的顯示。但是,通過(guò)軟件編程拼時(shí)序的話(huà),要考慮到許多時(shí)間參數,有一定的難度。為了使得數據和命令能夠更容易的順利讀寫(xiě),我們采用另外一種辦法。如圖1所示,將WR#和RD#分別接C8051F023的/WR和/RD,即P0.7和P0.6。在C語(yǔ)言編程時(shí)定義指針類(lèi)型為xdata型,它是指向片外存儲器的,通過(guò)給指針的賦值訪(fǎng)問(wèn)片外的數據存儲區,當訪(fǎng)問(wèn)片外存儲器時(shí),/RD和/WR會(huì )在讀和寫(xiě)時(shí)自動(dòng)變低,同時(shí)P3端口為數據總線(xiàn),非復用方式下,地址總線(xiàn)的高8位使用P1口,低8位使用P2口;復用方式下,地址總線(xiàn)高8位仍使用P1口,低8位和數據總線(xiàn)復用P3口,P2口就不會(huì )受到影響。所以最好設置成復用方式(EMIOCF.4=0),P2口就可以用來(lái)作別的輸出端口,自由地控制RES#、CS#、DC。雖然不需要地址總線(xiàn),但訪(fǎng)問(wèn)片外存儲器時(shí)地址線(xiàn)會(huì )被使用,所以仍要避開(kāi)。實(shí)驗結果的時(shí)序波形圖如圖3所示。只要CS#為低時(shí),在WR#(RD#)的下降沿寫(xiě)入(讀出)數據或命令,即可有效地完成讀寫(xiě)的工作。

圖3 時(shí)序波形圖
3 軟件程序的設計
整個(gè)單片機控制OLED的顯示程序用C語(yǔ)言編寫(xiě),主要程序流程圖如圖4所示。單片機初始化包括關(guān)閉看門(mén)狗、時(shí)鐘初始化、端口初始化,以及定時(shí)器和中斷的初始化。OLED初始化包括開(kāi)顯示、設置顯示模式、設置對比度控制器、對比度設置(1~256)、設置行列起始地址、設置具體位置顏色、設置串口管腳配置。清OLED屏和OLED顯示都是往GDDRAM里寫(xiě)數據,包括讀狀態(tài)、寫(xiě)命令、寫(xiě)數據子程序,清OLED屏就全寫(xiě)“0”,OLED顯示只要寫(xiě)入所要顯示的文字或圖片的字符代碼即可。每次寫(xiě)(命令或數據)之前都要讀狀態(tài),看最高位D7是否為“0”,也稱(chēng)之為“忙”檢測,如果為“1”,表示“忙”;反之為“閑”,在“閑”的狀況下才可以寫(xiě)操作。

圖4 程序流程圖
4 文字和圖片的顯示
VGG12864G內置128×64 bits的顯示存儲器,用于存儲顯示數據,圖5為RAM的地址結構。RAM容量為128×64=8192 bits,它被分成8頁(yè)(page0-page7),每頁(yè)8行,每頁(yè)的第一列剛好是一個(gè)字節,低位在上,高位在下;顯示屏上各像素點(diǎn)的顯示狀態(tài)與顯示存儲器的各位二進(jìn)制數據一一對應,顯示存儲器的數據直接作為圖形顯示的驅動(dòng)信號。數據顯示為“1”,相應的像素點(diǎn)顯示;數據顯示為“0”,相應的像素點(diǎn)不顯示。
所顯示文字或圖片的字符庫,需要自己造,但人工的幾乎不可能,可以選用字模提取軟件——“字模提取 V2.2 ”,該軟件提供兩種取模方式:橫向和縱向。再根據OLED顯示數據的RAM地址結構,選縱向的取模方式,由于OLED模組的字節結構是高位在下低位在上,所以要設置成字節倒序,字符的字體、字形、大小和顯示效果(下劃線(xiàn)和刪除線(xiàn))可根據需要進(jìn)行調整,然后采取C51格式(若用匯編語(yǔ)言編程可采取A51格式)取模生成單個(gè)字符的點(diǎn)陣顯示代碼,最后根據需要在OLED屏上的顯示效果,對代碼進(jìn)行相應調整即可得到所需字符庫。

圖5 顯示數據RAM的地址結構
評論