圖形LCD模塊的菜單方式人機交互界面
摘要:在以單片機為核心的嵌入式應用中,友好的人機互界面起著(zhù)十分重要的作用。筆者在設計中使用WGM-12864B圖形LCD模塊實(shí)現一種中文窗口菜單界面,設計中使用的方法具有普遍性意義。 關(guān)鍵詞:人機交互界面 圖形LCD模塊 數據結構 窗口 菜單 隨著(zhù)液晶顯示技術(shù)的進(jìn)步,高質(zhì)量的液晶顯示模塊會(huì )被日趨廣泛地應用于各種嵌入式系統中。在系統整體設計中,人機交互界面的設計往往占據著(zhù)很大一部分工作,現以某嵌入式系統的人機交互部分為例,介紹一種使用WGA-12864B圖形LCD模塊實(shí)現中文窗口菜單界面的方法。 WGM-12864B模塊是單色圖形點(diǎn)陣液晶顯示模塊,點(diǎn)陣數為64128,其點(diǎn)陣存儲區如圖1所示。 模塊點(diǎn)陣分為左右兩邊,左右兩邊的結構是完全一樣的。對模塊的點(diǎn)陣存儲區進(jìn)行讀寫(xiě)操作時(shí),由CS1、CS2進(jìn)行片選,高電平有效。模塊中每8行為1頁(yè),頁(yè)地址由X確定;Y確定點(diǎn)陣的列號,點(diǎn)陣數據的每一個(gè)字節所在的位置由(CSi,X,Y)唯一確定。字節中的每一位對應著(zhù)相應的像素,為1顯示該像素;為0則不顯示。液晶顯示模塊工作時(shí),逐行掃描點(diǎn)陣存儲區。首先被掃描的行顯示在LCD屏幕的第1行上,其余行則依次順序顯示?!皰呙杵鹗夹小笨梢酝ㄟ^(guò)Z地址寄存器來(lái)設置。Z可以是0~63的任意一行,如Z=56時(shí),則顯示在LCD屏幕上的次序從上到下分別為: 56,57,…,62,63,0,1,2,…,54,55 該模塊的這一功能為窗口的滾屏提供了便利。 系統擴展了1片8255A作為人機界面的接口,硬件接口電路如圖2所示。8255A的A口連接圖形LCD的8位數據線(xiàn),B口低6位連接相應的控制線(xiàn),D/I表示數據總線(xiàn)上的信號是點(diǎn)陣數據還是控制命令字,R/W表示當前操作是讀或寫(xiě)操作,E是使能控制端,RST是復位端,CS1、CS2是左右點(diǎn)陣區選端。以行掃描方式擴展鍵盤(pán)接口,C口高半字節接行線(xiàn),低半字節接列線(xiàn)。8255A初始化時(shí),定義A、B口為方式0輸出;C口高半字節為方式0輸出,低半字節為方式0輸入。請注意,大多數類(lèi)型的8255芯片在對其方式控制寄存器進(jìn)行初始化時(shí),會(huì )引起A、B、C口清零,故不要在程序中動(dòng)態(tài)改變8255端口的輸入輸出方式,以免影響LCD和鍵盤(pán)。 3 用戶(hù)界面的軟件設計 人機交互界面設計的目標是實(shí)現中文窗口界面,用戶(hù)可以在菜單方式下進(jìn)行交互。窗口分為兩類(lèi):對話(huà)框和菜單,也包括對話(huà)框和菜單的混合。對話(huà)框用于參數的輸入輸出顯示;菜單用于響應用戶(hù)的選擇,根據用戶(hù)的選擇運行程序。 首先,應當確定系統需要多少個(gè)窗口,每個(gè)窗口有多少個(gè)菜單,畫(huà)出窗口之間的變遷圖,可以知道所有的窗口應當組成一個(gè)樹(shù)形結構。菜單中的漢字大小為1616的點(diǎn)陣,數字和符號的大小為168的點(diǎn)陣。這些點(diǎn)陣數據可以由點(diǎn)陣提取程序獲得。點(diǎn)陣數為64128的LCD模塊只能同時(shí)顯示4個(gè)菜單項,每個(gè)菜單項點(diǎn)據256個(gè)字節的點(diǎn)陣存儲空間。窗口多于4個(gè)菜單項時(shí),應當使用滾屏功能。為方便數據的安排,系統規定了參數、菜單、窗口及LCD緩沖區的數據結構。 (1)數據結構 為方便參數的顯示和處理,參數的輸入輸出格式用類(lèi)似于分離BCD碼來(lái)表示,數據結構如圖3所示。數據長(cháng)度表示數據區的字節數。正負標志,為1表示負數,為0表示正數,負數在輸入都要在數據前面加上負號“-”。數據區的每一字節對應于參數的每一位數。數字用分離BCD碼表示,小數點(diǎn)用ASCII碼表示?!皵祿L(cháng)度”域占1個(gè)字節時(shí),此數據結構可以表示最多255位的數據。 菜單點(diǎn)陣的數據結構如圖4所示。菜單序號表示該菜單在該窗口所有菜單中的次序;菜單長(cháng)度表示該菜單項中漢字的個(gè)數,菜單點(diǎn)陣數據區存放的是菜單中漢字的點(diǎn)陣,每一個(gè)漢字都是1616的點(diǎn)陣;參數標志為0表示沒(méi)有參數,為1表示此菜單項是對話(huà)框,后面跟著(zhù)參數。參數存放在參數指針域指向的內存中,若是系統參數,則要預先從E2PROM讀到內存中。由于系統是16位尋址的存儲空間,所以用2個(gè)字節存放指針。參數存放格式如圖3所示。 窗口點(diǎn)陣的數據結構如圖5所示,其中用到了菜單數據結構,窗口中使用到的菜單項依著(zhù)菜單序號順次存放,各域的含義是顯而易見(jiàn)的。注意,窗口的點(diǎn)陣數據是事先按照此格式建立的,系統中所有窗口以此格式存放非易失存儲介質(zhì)中,如ROM。以此格式,系統可以有255個(gè)窗口,每一個(gè)窗口可以多達255個(gè)菜單項。 系統在內存中特定區域開(kāi)壁了1個(gè)LCD顯示緩沖區,將要顯示的整個(gè)窗口的點(diǎn)陣數據按下列格式拼裝好以后存放在此區間。LCD的顯示程序從此區間中讀取數據到LCD點(diǎn)陣數據存儲區,LCD顯示程序正是憑借此數據結構管理用戶(hù)交互界面。每個(gè)菜單項除了漢字和參數的點(diǎn)陣外,其余的空間用00H補齊為256字節。對話(huà)框中顯示的參數,可以依據菜單數據結構中的參數指針域檢索到數據,然后把它譯碼成為可以顯示的168的點(diǎn)陣數據。LCD緩沖區數據結構如圖6所示。當前菜單域指的是當有獲得焦點(diǎn)的菜單序號,需要反顯,主要用于光標管理。顯示中的菜單項序號分別對應著(zhù)當前LCD點(diǎn)陣存儲區中的4個(gè)菜單項,這些數據主要用于滾屏操作。其余各域和上述類(lèi)似。 (2)人機交互設計 人機交互設計的重點(diǎn)在于窗口界面的顯示、滾屏、光標的管理及參數的顯示、修改和保存?,F在只介紹窗口的滾虐和參數的輸入輸出顯示。僅當窗口的菜單數大于4的時(shí)候,才用到滾屏操作。為提高系統響應的速度,窗口在滾屏時(shí)只將新的菜單點(diǎn)陣數據讀入LCD點(diǎn)陣存儲 ,其余3個(gè)菜單的點(diǎn)陣數據保持不變。圖7所示的窗口滾屏過(guò)程中LCD點(diǎn)陣存儲區的快照以及LCD屏上顯示的菜單次序,從A到E的滾屏每一步都是可逆的??梢园l(fā)現,每一步相鄰的操作,只要將1個(gè)即將顯示的菜單項點(diǎn)陣數據寫(xiě)入LCD點(diǎn)陣存儲區,圖中加黑框的菜單項就是新寫(xiě)入的。當向下滾屏時(shí),從LCD顯示緩沖區中“顯示中的菜單項”域檢索出菜單序號最小的項,把新的菜單序號插入此位置,從顯示緩沖區的“菜單點(diǎn)陣數據”域把菜單的點(diǎn)陣數據讀到LCD點(diǎn)陣存儲區中相應位置。然后再檢索更新后的“顯示中的菜單項”域,找出最小菜單項所在的行號,設置掃描起始行Z為此行號,圖中箭頭指向的位置即為掃描起始行。最后要更新的域是“當前菜單項”,用于光標顯示管理。當向上滾屏時(shí),操作是類(lèi)似的,不同的是要替換出“顯示中的菜單項”域中序號最大的菜單項。 參數的輸入輸出顯示是人機交互界面中的重要環(huán)節。顯示的參數來(lái)自鍵盤(pán)輸入或系統內部,數據的流向如圖8所示。參數依據圖3對應的數據格式存放到參數指地所指的內存中,然后啟動(dòng)窗口更新即可。若該參數需要保存,則存入對應的E2PROM地址中。本系統使用X5045作為E2PROM,同時(shí)兼作看門(mén)狗。 本文主要從數據結構的角度出發(fā),結合器件的特片,提出了圖形LCD在嵌入式應用中解決人機交互問(wèn)題的一般方法,實(shí)現了中文窗口菜單,解決了參數的輸入、顯示、修改和保存。文中的方法具有非常好的靈活性和良好的可維護性,程序員可以在需要的時(shí)候方便地修改原有窗口或者加入新的窗口,而不至于影響系統軟件原有的結構。這些便利都得益于系統定義了合理的數據結構。 |
評論