基于AT89C52的液晶顯示的實(shí)現(xiàn)
此種方法實(shí)現(xiàn)起來簡單明了,不需額外的硬件,缺點(diǎn)是占用MPU的IO資源較多,適用于IO資源有富余的情況。在筆者的應(yīng)用中,MPU的IO需要余留給其他應(yīng)用,不能分配這么多的IO來,故采用另外一種方法,由硬件邏輯實(shí)現(xiàn),見圖3:
本例中的頁大小為32KB。AT27C020的片選信號CS1由地址線A15產(chǎn)生(即A15連到片選信號CE上),如要讀38400H單元的內(nèi)容,先由程序產(chǎn)生高位地址AA17、AA16、AA15。對字庫芯片尋址時,先產(chǎn)生頁地址,再進(jìn)行頁內(nèi)尋址,利用此種方法可進(jìn)行多位地址的擴(kuò)展。舉例如下:
4 軟件的實(shí)現(xiàn)與控制
VPG12864T液晶模塊的系統(tǒng)指令集其實(shí)就是T6963C控制器的指令集,模塊的初始化設(shè)置一般都由管腳設(shè)置完成。T6963C的指令可帶一個或兩個參數(shù),或無參數(shù)。每條指令的執(zhí)行都是先送入?yún)?shù),再送入指令代碼,且每次操作之前要進(jìn)行狀態(tài)字檢測。T6963C的狀態(tài)字如下說明。在處理顯示操作時,首先要指定字符串、文字段的有效顯示位置。
STA0:指令讀寫狀態(tài)
STA1:數(shù)據(jù)讀寫狀態(tài)
STA2:數(shù)據(jù)自動寫狀態(tài)
STA3:數(shù)據(jù)自動讀狀態(tài)
STA5:讀/寫出錯狀態(tài)
STA6:運(yùn)行控制器檢測
STA7:閃爍狀態(tài)檢測
另外STA4保留.
4.1 顯示字符
VPG12864T液晶模塊字符的顯示有兩種實(shí)現(xiàn)方式,一是利用T6963C提供的字符集,另一種方法是將字符的點(diǎn)陣數(shù)據(jù)存放在ROM內(nèi),需要時以圖形方式顯示。當(dāng)電路驅(qū)動能力不夠時,可以采用第二種方式。字符顯示相對比較簡單,在這里不做詳細(xì)描敘。
4.2 顯示漢字
處理漢字顯示時,由于VPG12864T液晶模塊是128×64點(diǎn)陣的,所以顯示16×16點(diǎn)陣的漢字一行最多顯示8個,且最多顯示4行。對于每一個漢字的顯示,首先應(yīng)該計(jì)算該漢字在字庫中的地址,然后讀出該漢字的點(diǎn)陣排列。當(dāng)顯示至一行的末尾時要換行顯示。在處理漢字顯示時有兩種方法:一是一次只顯示一個漢字,即對于每一個漢字,先計(jì)算出此漢字地址,讀出其點(diǎn)陣數(shù)據(jù),顯示完畢再處理下一個漢字,直到處理完所有的漢字;第二種方法是將所要顯示的所有漢字的點(diǎn)陣數(shù)據(jù)從字庫中讀出存放外部RAM中,再集中處理顯示的問題。本文討論的是后一種方法。
字符半角碼與全角碼有如下的對應(yīng)關(guān)系:
半角字符對應(yīng)的全角字符的起始地址的計(jì)算公式:
起始地址=[(2×94+(ASCII-0x21))×32
漢字顯示處理的流程如下(用“#”作為顯示漢字段的結(jié)束標(biāo)志):
在處理漢字顯示時,如果要實(shí)現(xiàn)漢字的反顯(例如實(shí)現(xiàn)菜單操作),將漢字的32字節(jié)字模數(shù)據(jù)分別與0xFF異或(XRL)運(yùn)算,或者取反(CPL)運(yùn)算后再顯示即可。
評論