新聞中心

EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 基于MSP430F149單片機(jī)的人機(jī)界面設(shè)計(jì)

基于MSP430F149單片機(jī)的人機(jī)界面設(shè)計(jì)

作者: 時(shí)間:2010-01-11 來(lái)源:網(wǎng)絡(luò) 收藏

菜單一般由西文字符和中文漢字組合而成,每一條菜單項(xiàng)定義一個(gè)數(shù)組Menu_string,格式如下:{菜單項(xiàng)字符數(shù),第一個(gè)字符在字庫(kù)中的序號(hào),第二個(gè)字符,....}。需要注意的是, 在自建西文字庫(kù)NUM_TAB 和小漢字庫(kù)HZ_TAB 時(shí),每個(gè)中西文字符都是各自編號(hào)的。由于中西文顯示調(diào)用同一個(gè)函數(shù),為區(qū)別中西文字符,在菜單數(shù)組編號(hào)時(shí)可以在漢字在HZ_TAB庫(kù)中的編碼前加128(0X80)作為標(biāo)識(shí), LCD在顯示內(nèi)容時(shí),需要判斷編號(hào)的值, 確定當(dāng)前位內(nèi)容是漢字還是西文,然后做調(diào)用相應(yīng)的處理。菜單項(xiàng)的反亮顯示采取的辦法是將顯示內(nèi)容的所有字模數(shù)據(jù)按字節(jié)取反后再進(jìn)行常規(guī)顯示即可。圖3為某一項(xiàng)中西文菜單混合顯示流程,其中m=1表示該位為漢字, m=0表示該位為ASCII字符.

本文引用地址:http://m.butianyuan.cn/article/173476.htm


2.2.3數(shù)據(jù)結(jié)構(gòu)
本系統(tǒng)采用8個(gè)按鈕來(lái)接受用戶輸入,8個(gè)按鈕為上、下、左、右、回車(chē)、退回、加、減。為方便數(shù)據(jù)顯示和處理。需要首先建立一個(gè)菜單窗口結(jié)構(gòu)體并定義一個(gè)結(jié)構(gòu)變量WinStruct,該結(jié)構(gòu)中共有11個(gè)結(jié)構(gòu)元素,分別是10個(gè)字符型和1個(gè)指針變量,指針變量指向需執(zhí)行函數(shù)。 Typedef struct{ uchar Menulndex;//當(dāng)前菜單索引號(hào) uchar BackWinlndex;//當(dāng)前窗口的上一窗口索引號(hào) uchar NextDnlndex;//下一個(gè)菜單索引號(hào),按下“上,下”鍵時(shí)當(dāng)前菜單項(xiàng)上下移動(dòng) uchar NextUplndex;//或可修改參數(shù)數(shù)值向上下循環(huán)變化 uchar NextLIndex; //下一個(gè)菜單索引號(hào),按下“左,右”鍵時(shí)當(dāng)前菜單項(xiàng)左右移動(dòng) uchar NextRtlndex;//或在可修改參數(shù)位置上左右移動(dòng) uchar Key CrState; //按下“回車(chē)”鍵時(shí)用戶選擇確認(rèn)或參數(shù)輸入確定 uchar KeyBackState; //按下“退回”鍵時(shí)用戶退出當(dāng)前窗口,返回上一窗口 uchar KeyPlus; / / 按下“加”鍵,可修改參數(shù)加1;uchar KeyMinus; / / 按下“減”鍵,可修改參數(shù)減1;void( CurrentOperate)();//當(dāng)前狀態(tài)應(yīng)該執(zhí)行的功能操作 }WinStruct; 菜單項(xiàng)在LCD上顯示,通過(guò)建立菜單項(xiàng)結(jié)構(gòu)體,定義一個(gè)結(jié)構(gòu)變量 MenuStruct。如下: Typedef struct{ uchar Menulndex; //當(dāng)前菜單索引號(hào) uchar NextWinlndex;//下一窗口索引號(hào) uchar cursor_page ://菜單項(xiàng)起始頁(yè)位置 uchar cursor_col; / / 菜單項(xiàng)起始行位置 uchar type ; / / 菜單項(xiàng)顯示的數(shù)據(jù)類(lèi)型,16x16或16x8點(diǎn)陣等 uchar *data; / / 指向顯示數(shù)據(jù)區(qū) uchar dataNum;/ / 需要顯示的數(shù)據(jù)的個(gè)數(shù) uchar black; / / 是否反顯菜單項(xiàng) uchar modify ; / / 數(shù)據(jù)是否需要修改 } MenuStruct;
2.3
交互設(shè)計(jì)的重點(diǎn)在于界面的顯示、滾屏、光標(biāo)的管理及參數(shù)的顯示、修改和保存。系統(tǒng)在內(nèi)存中特定區(qū)域開(kāi)辟了1個(gè)LCD顯示緩沖區(qū),將要顯示的整個(gè)窗口的點(diǎn)陣數(shù)據(jù)存放在此區(qū)間。LCD的顯示程序從此區(qū)間中讀取數(shù)據(jù)到LCD點(diǎn)陣數(shù)據(jù)存儲(chǔ)區(qū),借此,LCD顯示程序可管理用戶交互界面。用戶可以用8個(gè)按鍵(向上、向下、向左、向右、確定、返回、加、減)在菜單方式下實(shí)現(xiàn)交互。
參數(shù)的輸入、輸出顯示和保存是人機(jī)交互的重要環(huán)節(jié)。
下面以第二級(jí)菜單中的參數(shù)設(shè)置為例,進(jìn)行詳細(xì)介紹。在主菜單下,將光標(biāo)移到“參數(shù)設(shè)置”,按下“確定”鍵,進(jìn)入“參數(shù)設(shè)置”菜單。顯示的內(nèi)容有:設(shè)備參數(shù),投切條件,保護(hù)定值,電容參數(shù),時(shí)鐘校準(zhǔn),通訊參數(shù),等等。
裝置出廠前已經(jīng)對(duì)各參數(shù)進(jìn)行初始化,存儲(chǔ)在二維數(shù)組Array[19][5]中,每個(gè)參數(shù)一行,參數(shù)每一位的值都對(duì)應(yīng)存儲(chǔ)在數(shù)組中的相應(yīng)位置。定義一個(gè)指針P指向Array,表示光標(biāo)的位置,當(dāng)然,進(jìn)入“參數(shù)設(shè)置”菜單時(shí)P=Array[0][0],光標(biāo)在首行的第一個(gè)X的位置,表示選中該參數(shù)位。按下“向上”、“向下”、“向左”、“向右”四個(gè)方向鍵來(lái)移動(dòng)光標(biāo)到待修改的那一位數(shù)字上時(shí),P=Array[i][j]則根據(jù)按下的鍵不同而作相應(yīng)的修改,一般如下:向上,i-1;向下,i +1;向左,j-1;向右,j+1。當(dāng)然,首先要對(duì)原來(lái)的i,進(jìn)行判斷。遇到特殊情況要特殊處理。如光標(biāo)原在某行的第一個(gè)參數(shù)位上,j= 0,按下向左的鍵則不改變光標(biāo)。
選定待修改的那一位參數(shù)后,按“修改”鍵進(jìn)行參數(shù)值的修改。過(guò)程如下:讀取光標(biāo)所在的那一位數(shù)字的值,每按一次加鍵,該值加1(在0―9之間循環(huán)),每按一次減鍵,該值減1(在0―9之間循環(huán))。修改完一位后,把改值寫(xiě)入Array[i][j],移動(dòng)光標(biāo)繼續(xù)修改其他的參數(shù)。一行參數(shù)修改完,經(jīng)核對(duì)無(wú)誤后按“確定”鍵(每按一次“確定”確認(rèn)一行),新的參數(shù)值被修改存入機(jī)內(nèi)對(duì)應(yīng)的EEPROM 地址中。參數(shù)全部修改完后需要重新開(kāi)機(jī),否則修改無(wú)效。3 結(jié)束語(yǔ)
本文構(gòu)建了、OCM12864圖形點(diǎn)陣液晶模塊和鍵盤(pán)的中文人機(jī)交互界面,實(shí)現(xiàn)了中文菜單顯示及參數(shù)的輸入、顯示、修改和保存等功能,完成了系統(tǒng)所要求的顯示任務(wù)。此方法也同樣適應(yīng)用于ARM7與DSP其他微控制器LCD液晶人機(jī)界面上。
本文創(chuàng)新點(diǎn):充分利用了OCM12864的硬件資源,實(shí)現(xiàn)了友好的人機(jī)界面,并且文中介紹的方法具有非常好的靈活性和良好的可維護(hù)性,程序員可以在需要的時(shí)候很方便地修改菜單和增加子菜單,而不至于影響系統(tǒng)軟件原有的結(jié)構(gòu),而且在此菜單編程方法基礎(chǔ)上進(jìn)行改進(jìn),還可增加滾屏,自動(dòng)翻頁(yè)等功能。


上一頁(yè) 1 2 下一頁(yè)

評(píng)論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉