專利名稱:一種手持機(jī)按鍵設(shè)計(jì)及動態(tài)更改按鍵的方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種手持機(jī)按鍵設(shè)計(jì)方法,具體地說是一種手持機(jī)按鍵設(shè)計(jì)及動態(tài)更
改按鍵的方法。 手持機(jī)的功能鍵,一般是電腦88個(gè)按鍵中選取某幾個(gè)按鍵。目前大多數(shù)的方案, 是采用廠家成熟含程序的鍵盤芯片,或在電路設(shè)計(jì)時(shí)根據(jù)客戶要求定好按鍵。但有時(shí)候客 戶的功能按鍵不確定,使得在開發(fā)前期不能開始電路設(shè)計(jì)工作。另外,機(jī)器做好后無法根據(jù) 客戶需求做出按鍵調(diào)整。 本發(fā)明的技術(shù)任務(wù)是提供一種按鍵設(shè)計(jì)方案,電路設(shè)計(jì)完成后可以根據(jù)客戶需求
進(jìn)行按鍵功能動態(tài)更改的一種手持機(jī)按鍵設(shè)計(jì)及動態(tài)更改按鍵的方法。 本發(fā)明的技術(shù)任務(wù)是按以下方式實(shí)現(xiàn)的,手持機(jī)的按鍵信號傳給單片機(jī),單片機(jī)
通過總線與上位機(jī)通信,按鍵輸入矩陣信號接到單片機(jī)上,這些按鍵的定義可以通過上位
機(jī)接口軟件進(jìn)行設(shè)置,根據(jù)用戶需要任意定義; 單片機(jī)中有電腦鍵盤的按鍵的鍵值表,將相關(guān)程序封裝成*. lab庫,上位機(jī)接口 軟件是按鍵設(shè)置的接口軟件,手持機(jī)需要的的按鍵可以通過該軟件進(jìn)行按鍵動態(tài)設(shè)置和 更改,它把鍵值傳送給相關(guān)的函數(shù),與手持機(jī)CPU進(jìn)行通訊,調(diào)用所設(shè)定或更改的按鍵的鍵 值。
鍵盤掃描部分的代碼為 void ScanKey(void) /*掃描鍵盤*/
背景技術(shù):
發(fā)明內(nèi)容
UINT i, j, LINE ; UINT Row, SecondRow ; SetActiveListKeyToOld(); for(i = 0 ;i < LINENUM ;i++)
LINESING( LINEMASK(i)); KeyDelay(50); Row = R0WP0RT2 ; Row < < = 8 ; Row| = R0WP0RT1 ;
for(j = 0 ;j < R0WNUM ;j++)
if ((Row&0x0001)
{ SecondRow = 1 ; SecondRow < < = j ; SecondRow = SecondRow ; LINE = ReadLine (SecondRow); if (((LINE > > i) &0x0001) = = 0) InsertActiveKey (i, j); } Row > > = 1 ; } } Remove01dKey(); 以下是根據(jù)按鍵名得到掃描碼的代碼 } C0DEDATA GetScanCode (BYTE type, char *keyName) /*根據(jù)按鍵名得 到掃描碼*/ { BYTE i, size ; C0DEDATA ScanCode ; ScanCode. len = 0 ; size = keyBoardConfig. Scan—Code—Size ; for(i = 0 ;i < size ;i++) { if (strcmp (keyBoardConf ig. Scan—Code [i]. KeyName, keyName) = = 0) break ; } if (i == size) return ScanCode ; if (type = = MAKE_C0DE) return keyBoardConfig. Scan—Code[i]. Mask 5 else if (type == BREAK_C0DE)
return keyBoardConfig. Scan—Code[i]. Break 5 else return ScanCode ; }。 單片機(jī)采用C8051F021單片機(jī),與手持機(jī)CPU通過PS2總線進(jìn)行通訊。 本發(fā)明的一種手持機(jī)按鍵設(shè)計(jì)及動態(tài)更改按鍵的方法和現(xiàn)有技術(shù)相比具有以下
優(yōu)點(diǎn)可以在開發(fā)前期進(jìn)行電路設(shè)計(jì),后期根據(jù)客戶的需求用軟件更改和動態(tài)設(shè)置,實(shí)現(xiàn)不
同的按鍵功能,而且不需要再更改底層的單片機(jī)程序;設(shè)計(jì)人員只需要上位機(jī)軟件即可根據(jù)需求設(shè)置按鍵,不必修改底層的單片機(jī)程序,縮短了設(shè)計(jì)時(shí)間;因而,具有很好的推廣使用價(jià)值。
下面結(jié)合附圖對本發(fā)明進(jìn)一步說明。 附圖1為一種手持機(jī)按鍵設(shè)計(jì)及動態(tài)更改按鍵的方法的手持機(jī)按鍵與單片機(jī)的硬件電路連接框圖; 附圖2為一種手持機(jī)按鍵設(shè)計(jì)及動態(tài)更改按鍵的方法的設(shè)置按鍵的軟件流程圖。
具體實(shí)施例方式
參照說明書附圖和具體實(shí)施例對本發(fā)明的一種手持機(jī)按鍵設(shè)計(jì)及動態(tài)更改按鍵
的方法作以下詳細(xì)地說明。
實(shí)施例 本發(fā)明的一種手持機(jī)按鍵設(shè)計(jì)及動態(tài)更改按鍵的方法,手持機(jī)的按鍵信號傳給單片機(jī),單片機(jī)通過總線與上位機(jī)通信,按鍵輸入矩陣信號接到單片機(jī)上,這些按鍵的定義可以通過上位機(jī)接口軟件進(jìn)行設(shè)置,根據(jù)用戶需要任意定義; 單片機(jī)中有電腦鍵盤的按鍵的鍵值表,將相關(guān)程序封裝成*. lab庫,上位機(jī)接口軟件是按鍵設(shè)置的接口軟件,手持機(jī)需要的的按鍵可以通過該軟件進(jìn)行按鍵動態(tài)設(shè)置和更改,它把鍵值傳送給相關(guān)的函數(shù),與手持機(jī)CPU進(jìn)行通訊,調(diào)用所設(shè)定或更改的按鍵的鍵值。設(shè)計(jì)人員只需要上位機(jī)軟件即可根據(jù)需求設(shè)置按鍵,不必修改底層的單片機(jī)程序,縮短了設(shè)計(jì)時(shí)間。 鍵盤掃描部分的代碼為 void ScanKey(void) /*掃描鍵盤*/ {UINT i,j,LINE;
UINT Row, SecondRow ;
SetActiveListKeyTo01d();
for(i = 0 ;i < LINENUM ;i++)
{ LINESING ( LINEMASK (i)); KeyDelay(50); Row = R0WP0RT2 ; Row < < = 8 ; Row I = R0WP0RT1 ; for(j = 0 ;j < R0WNUM ;j++) { if ((Row&0x0001) == 0) { SecondRow = 1 ;
SecondRow < < = j ; SecondRow = SecondRow ; LINE = ReadLine (SecondRow); if (((LINE > > i) &0x0001) = = 0) InsertActiveKey (i, j); } Row > > = 1 ; } } Remove01dKey();
:0094] 以下是根據(jù)按鍵名得到掃描碼的代碼
:0095] }
:0096] C0DEDATA GetScanCode (BYTE type, char *keyName) /*根據(jù)按鍵名得
:0097] 到掃描碼*/
:0098] {
:0099] BYTE i, size ;
:0100] C0DEDATA ScanCode ;
:0101] ScanCode. len = 0 ;
.0102] size = keyBoardConf ig. Scan—Code—Size ;
:0103] for(i = 0 ;i < size ;i++)
:0104] {
:0105] if (strcmp (keyBoardConf ig. Scan—Code [i]. KeyN咖e, keyN咖e) ==0)
:0106] break;
:0107] }
:0108] if (i == size)
:0109] return ScanCode 5
:0110] if (type == MAKE—CODE)
:O川] return keyBoardConfig. Scan—Code [i]. Mask 5
:0112] else if (type == BREAK_C0DE)
:0113] return keyBoardConfig. Scan—Code [i]. Break 5
:0114] else
:0115] return ScanCode 5
:0116] }。
:0117] 單片機(jī)采用C8051F021單片機(jī),與手持機(jī)CPU通過PS2總線進(jìn)行通訊。單片機(jī)
C8051F021中有電腦鍵盤的88個(gè)按鍵的鍵值表。 本發(fā)明已經(jīng)成功應(yīng)用于6. 4寸手持機(jī)的項(xiàng)目中,并適用于帶有普通功能按鍵的手
持機(jī)便攜設(shè)備,對于縮短產(chǎn)品開發(fā)周期有較大的應(yīng)用價(jià)值。 除說明書所述的技術(shù)特征外,均為本專業(yè)技術(shù)人員的已知技術(shù)。
權(quán)利要求
一種手持機(jī)按鍵設(shè)計(jì)及動態(tài)更改按鍵的方法,其特征在于手持機(jī)的按鍵信號傳給單片機(jī),單片機(jī)通過總線與上位機(jī)通信,按鍵輸入矩陣信號接到單片機(jī)上,這些按鍵的定義可以通過上位機(jī)接口軟件進(jìn)行設(shè)置,根據(jù)用戶需要任意定義;單片機(jī)中有電腦鍵盤的按鍵的鍵值表,將相關(guān)程序封裝成*.lab庫,上位機(jī)接口軟件是按鍵設(shè)置的接口軟件,手持機(jī)需要的的按鍵可以通過該軟件進(jìn)行按鍵動態(tài)設(shè)置和更改,它把鍵值傳送給相關(guān)的函數(shù),與手持機(jī)CPU進(jìn)行通訊,調(diào)用所設(shè)定或更改的按鍵的鍵值。
2. 根據(jù)權(quán)利要求1所述的一種手持機(jī)按鍵設(shè)計(jì)及動態(tài)更改按鍵的方法,其特征在于鍵 盤掃描部分的代碼為vo id ScanKey(vo id) /*掃描鍵盤*/LINESING( LINEMASK(i)); KeyDelay(50); Row = R0WP0RT2 ; Row < < = 8 ; Row I = R0WP0RT1 ;for(j = 0 ;j < ROWNUM ;j++)SecondRow = 1 ; SecondRow < < = j ; SecondRow = SecondRow ; LINE = ReadLine(SecondRow);if (((LINE >> i)&0x0001) = = 0) InsertActiveKey(i, j);CODEDATA GetScanCode (BYTE type, char*keyName) /*根據(jù)按鍵名得 到掃描碼*/UINT i, j, LINE ; UINT Row, SecondRow ; SetActiveListKeyToOld(); for(i = 0 ;i < LINENUM ;i++)if ((Row&0x0001)Row > > = 1 ;RemoveOldKey0 ; 以下是根據(jù)按鍵名得到掃描碼的代碼BYTE i, size ; CODEDATA ScanCode ; ScanCode. len = 0 ;size = keyBoardConfig. Scan—Code—Size ;for(i = 0 ;i < size ;i++)if (strcmp (keyBoardConf ig. Scan—Code [i]. KeyName, keyName) == 0)if (i = = size) return Sc肌Code ^ if (type == MAKE—CODE)return keyBoardConf ig. Sc肌Code [i]. Mask ; else if (type == BREAK—CODE)return keyBoardConf ig. Sc肌Code [i]. Break ^
3.根據(jù)權(quán)利要求1所述的一種手持機(jī)按鍵設(shè)計(jì)及動態(tài)更改按鍵的方法,其特征在于單 片機(jī)采用C8051F021單片機(jī),與手持機(jī)CPU通過PS2總線進(jìn)行通訊。break j6ls全文摘要
本發(fā)明公開了一種手持機(jī)按鍵設(shè)計(jì)及動態(tài)更改按鍵的方法,屬于一種手持機(jī)按鍵設(shè)計(jì)方法,手持機(jī)的按鍵信號傳給單片機(jī),單片機(jī)通過總線與上位機(jī)通信,按鍵輸入矩陣信號接到單片機(jī)上,這些按鍵的定義可以通過上位機(jī)接口軟件進(jìn)行設(shè)置,根據(jù)用戶需要任意定義;單片機(jī)中有電腦鍵盤的按鍵的鍵值表,將相關(guān)程序封裝成*.lab庫,上位機(jī)接口軟件是按鍵設(shè)置的接口軟件,手持機(jī)需要的的按鍵可以通過該軟件進(jìn)行按鍵動態(tài)設(shè)置和更改,它把鍵值傳送給相關(guān)的函數(shù),與手持機(jī)CPU進(jìn)行通訊,調(diào)用所設(shè)定或更改的按鍵的鍵值。本發(fā)明和現(xiàn)有技術(shù)相比,設(shè)計(jì)人員只需要上位機(jī)軟件即可根據(jù)需求設(shè)置按鍵,不必修改底層的單片機(jī)程序,縮短了設(shè)計(jì)時(shí)間。
文檔編號H04M1/23GK101795308SQ20101012905
公開日2010年8月4日 申請日期2010年3月22日 優(yōu)先權(quán)日2010年3月22日
發(fā)明者李童, 耿士華, 馬麗麗 申請人:山東超越數(shù)控電子有限公司