基于T6963C控制器的液晶模塊顯示技術(shù)
2 液晶模塊的軟件設(shè)計
2.1 T6963C的狀態(tài)字和指令集
由于T6963C為可編程芯片,因此要求編程控制LCM2401286顯示器正常顯示,首先需掌握T6963C的狀態(tài)字和指令集。由于T6963C控制器指令集模塊的初始化通常由硬件設(shè)置完成,因此其指令系統(tǒng)將集中于顯示功能的設(shè)置上。T6963C的指令可帶一個或兩送入指令代碼,每次操作前先檢測狀態(tài)字,以確保指令的正確執(zhí)行。T6963C的狀態(tài)字如表4所示,其中,STA0為指令讀寫狀態(tài),STA1為數(shù)據(jù)讀寫狀態(tài),STA2為數(shù)據(jù)自動讀狀態(tài),STA3為數(shù)據(jù)自動寫狀態(tài)。由于各狀態(tài)位的作用不同,所以執(zhí)行不同指令時必須檢測不同的狀態(tài)位。在MPU每次讀寫指令和數(shù)據(jù)時,STA0和STA1要同時有效。當(dāng)MPU讀寫數(shù)組時,需判斷STA2或STA3狀態(tài)。屏讀、屏拷貝指令應(yīng)使用STA6。而STA5和STA7則反映T6963C內(nèi)部運(yùn)行狀態(tài)。本文引用地址:http://butianyuan.cn/article/159292.htm
T6963C的指令包括指針設(shè)置指令、顯示區(qū)域設(shè)置指令、顯示開關(guān)指令、光標(biāo)形狀選擇指令、數(shù)據(jù)自動讀/寫方式設(shè)置指令、數(shù)據(jù)一次讀/寫方式指令和位操作指令等。指針設(shè)置指令主要用于設(shè)置光標(biāo)指針、CGRAM偏置地址和地址指針。顯示區(qū)域設(shè)置指令主要用于設(shè)置文本區(qū)和圖形區(qū)首地址以及文本區(qū)和圖形區(qū)的寬度。文本區(qū)和圖形區(qū)首地址對應(yīng)顯示屏左上角字符位或字節(jié)位,修改該地址可產(chǎn)生卷動效果。文本區(qū)寬度設(shè)置和圖形區(qū)寬度設(shè)置用于調(diào)整一行顯示所占顯示RAM的字節(jié)數(shù),從而確定顯示屏與顯示RAM單元的對應(yīng)關(guān)系。顯示開關(guān)指令主要用于設(shè)置光標(biāo)閃爍、光標(biāo)顯示、文本顯示及圖形顯示的開啟。正確使用上述指令可保證顯示正常進(jìn)行。
2.2 圖形方式下字符、漢字顯示技術(shù)
在編寫顯示程序時,首先要編寫一些預(yù)處理程序和液晶顯示器的初始化程序。預(yù)處理程序包括:狀態(tài)字中的狀態(tài)位判斷程序、寫無參數(shù)指令程序、寫雙參數(shù)指令程序、寫數(shù)據(jù)指令程序、設(shè)置當(dāng)前地址程序和設(shè)置當(dāng)前顯示行列程序。液晶顯示器初始化程序包括:工作狀態(tài)初始化程序和清屏程序。工作狀態(tài)初始化程序即設(shè)置顯示器為圖形顯示方式,同時關(guān)閉文本顯示,設(shè)置圖形顯示區(qū)首地址為00H,設(shè)置圖形顯示區(qū)寬度為20 H(即32 Byte),設(shè)置光標(biāo)的形狀為8點(diǎn)1行。顯示器清屏程序是通過程序?qū)︼@示緩沖區(qū)寫零來達(dá)到清屏目的。
上述工作完成后便可編寫字符、漢字顯示程序。字符、漢字顯示程序流程如圖3所示。為適應(yīng)顯示內(nèi)容長度不固定的情況,可設(shè)置和使用可變長參數(shù)。使用可變參數(shù)步驟如下:(1)為了訪問變長參數(shù)列表中的參數(shù),必須聲明va_list類型的一個對象,首先在函數(shù)里定義一個va_li st型的變量,即arg_ptr,這一變量是指向參數(shù)的指針。(2)用va_start宏初始化這一變量arg_ptr,這個宏的第2個參數(shù)是第一個可變參數(shù)的前一個參數(shù),是一個固定參數(shù),使arg_ptr指向第一個可選參數(shù),以固定參數(shù)的地址為起點(diǎn)確定變參的內(nèi)存起始地址。va_start是訪問變長參數(shù)列表中的參數(shù)前所使用的宏,其初始化用va_list聲明的對象,初始化結(jié)果供宏va_arg和va_end使用;va_arg:展開成一個表達(dá)式的宏,該表達(dá)式具有變長參數(shù)列表中下一個參數(shù)的值和類型。每次調(diào)用va_arg均會修改用va_list聲明的對象,從而使該對象指向參數(shù)列表中的下一個參數(shù);然后用va_arg返回可變的參數(shù),并賦值給整數(shù)變量。va_arg的第2個參數(shù)是要返回參數(shù)的類型。(3)va_end將arg_ptr指針清為NULL,函數(shù)體內(nèi)可多次遍歷這些參數(shù),但必須以va_start開始,并以va_end結(jié)尾。va_end宏使程序能夠從變長參數(shù)列表用宏va_start引用的函數(shù)中正常返回。va在此是vairable argument(可變參數(shù))的意思。
為確保輸出顯示的內(nèi)容尤其是數(shù)字能按照格式化方式顯示,可采用函數(shù)vsprintf()將格式化字符串和數(shù)字值輸出到指定的內(nèi)存緩沖區(qū)內(nèi),該函數(shù)類似于sprintf()函數(shù),但其只接受一個指向變量表的指針而不是一個變量表。返回值為實(shí)際寫入到輸出字符串中的字符數(shù)。
字符、漢字顯示程序又分成字符部分和漢字部分,其流程圖如圖3所示。由標(biāo)準(zhǔn)的ASCII字符表可知,字符的ASCII值在0~127范圍內(nèi),而漢字內(nèi)碼的ASCII值均處于128以上。因此可通過判斷要顯示內(nèi)容的ASCII值是否128來區(qū)分要顯示的內(nèi)容是字符或是漢字。
若要顯示的內(nèi)容是字符(ASCII值≤128),則又分為非顯示字符和顯示字符。非顯示字符包括控制字符和通訊專用字符。顯示字符包括符號、字母和數(shù)字。
由標(biāo)準(zhǔn)ASCII字符表可看出,非顯示字符的ASCII值在0~31范圍內(nèi),因此可通過判斷顯示內(nèi)容的ASCII值是否32來區(qū)分非顯示字符和顯示字符。
若是非顯示字符(ASCII值32),則執(zhí)行相應(yīng)的控制功能,若是顯示字符(ASCII值≥32)則送顯相應(yīng)的字符。顯示字符按16×8點(diǎn)陣顯示,即一個可顯示字符占16個點(diǎn)陣行,每行1 Byte,每個可顯示字符的字模為16 Byte。
若要顯示的內(nèi)容是漢字(ASCII值>128),則按16×16點(diǎn)陣顯示,即一個漢字占16個點(diǎn)陣行,每行2 Byte,每個漢字字模為32 Byte。字符、漢字的字體及大小是由其字模決定的,其字模由專門的字模生成軟件生成。字符和漢字的字庫分開造,無論字符或漢字,若其字體或大小不同,則字庫需分開造,顯示時分別調(diào)用。
3 結(jié)束語
文中介紹的基于T6963C控制器的液晶顯示模塊圖形方式下的字符漢字顯示技術(shù),具有通用性和普遍性,適于所有采用T6963C控制器的液晶顯示模塊,其基本思想也適合于采用其他控制器的液晶顯示模塊。
led顯示器相關(guān)文章:led顯示器原理
評論