<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 一種PC鍵盤的革命性設(shè)計(jì)

          一種PC鍵盤的革命性設(shè)計(jì)

          作者: 時(shí)間:2012-01-09 來源:網(wǎng)絡(luò) 收藏

          1 引言

          當(dāng)電腦上別的配件都跟著摩爾定律越來越時(shí)髦的時(shí)候,鍵盤總是顯得比較落寞,而“掌心鍵”的問世則將傳統(tǒng)PC鍵盤的設(shè)計(jì)引領(lǐng)至一個(gè)全新的領(lǐng)域。掌心鍵,是放在單手掌中使用,對(duì)應(yīng)于五個(gè)手指各有一個(gè)多功能按鍵,并通過五指同時(shí)組合操作,從而實(shí)現(xiàn)字符的輸入;自帶有點(diǎn)陣顯示屏,通過其指示各種操作狀態(tài),考慮到用戶使用習(xí)慣和人體特征,掌心鍵的外形設(shè)計(jì)大小適中,適合大眾人群的手形,不論男女,皆可輕松的一手掌握,獨(dú)特的按鍵凹槽設(shè)計(jì)將使手指的放位倍感舒適,而且降低了對(duì)坐姿的要求,同時(shí)支持左右手互換使用,且保證長時(shí)間使用也不易感到疲勞。

          2 系統(tǒng)結(jié)構(gòu)及工作原理

          掌心鍵是通過五指組合方式進(jìn)行輸入,共有25=32種組合,其中包括一種無任何鍵按下的組合,實(shí)際可用組合則為31種。為了設(shè)計(jì)中描述、編程方便,將五指對(duì)應(yīng)一個(gè)5位二進(jìn)制數(shù)的5個(gè)位,D4D3D2D1D0,母指對(duì)應(yīng)D4位,食指對(duì)應(yīng)D3位,中指對(duì)應(yīng)D2位,無名指對(duì)應(yīng)D1位,小指對(duì)應(yīng)D0位,按下手指的位值為1,不按的位值為0,這樣每次組合按鍵時(shí)產(chǎn)生了一個(gè)按鍵值n,將32種組合定義為Km(m=0…31)。

          為了單手能方便輸入PC鍵盤的所有按鍵,首先要將PC按鍵分集,分為數(shù)字集、小寫字母集、大寫字母集、標(biāo)點(diǎn)符集、編輯鍵集、功能鍵集等,表2-1列出了部分鍵集詳細(xì)說明;輸入時(shí)先選鍵集,再輸入字符。在任何狀態(tài)下都將K31定義為集切換,然后按Kn(n=1…30)可選30種鍵集,再按鍵集下相應(yīng)字符對(duì)應(yīng)的Kn即可完成一個(gè)字符的輸入。如果接下來的字符是同一個(gè)鍵集的,就不必再切換鍵集,直接輸入即可,這樣可提高輸入速度。輸入任一個(gè)字符最多按3次鍵,即先按集轉(zhuǎn)換,再選子集,然后輸入指定字符,大部分時(shí)間都只需一次按鍵即可。

          子集中以字母集用鍵值KN最多,從K1到K26,所有子集中的K27、K28、K29、K30很少用到,當(dāng)前統(tǒng)一定義成最常用的全局通用功能鍵,就如集切換K31;分別定義為K27:空格,K28:回刪,K29:后移,K30:回車。為了方便使用,用戶可以自己配置,重新定義以上鍵值的功能。

          鍵集分類

          子集說明

          01:

          K1CapsLock K2NumLock K3ScrollLock K4KeepStart K5KeepRep K6KeepEnd

          K7ShiftL K8CtrlL K9GuiL K10AltL K11ShiftR K12CtrlR K13GuiR K14AltR

          K15Apps K16ESC K17PrScrn K18PauseBreak

          02:數(shù)字

          K1 1 K2 2 K3 3 K4 4 K5 5 K6 6 K7 7 K8 8 K9 9 K10 0

          03:字母

          K1到K26分別對(duì)應(yīng) A 到 Z

          04:功能鍵

          K1到K12分別對(duì)應(yīng) F1 到 F12

          05:移動(dòng)

          K1ArrowU、K2ArrowD、K3ArrowL、K4ArrowR、K5Home、K6End、K7PgUp、K8PgDn、K9Tab、K10Insert

          06:運(yùn)算符

          K1 + K2 - K3 * K4 / K5 = K6 K7 | K8 ~ K9 ! K10 %

          K11 ^ K12 ` K13 @ K14 # K15 $ K15

          07:標(biāo)點(diǎn)符號(hào)

          K1 , K2 . K3 ; K4 : K5 ? K6 ’ K7 ” K8( K9 ) K10 [

          K11 ] K12 { K13 } K14 K15 >

          表2-1:鍵集分類表

          對(duì)于PC鍵上多個(gè)鍵組合操作的情況,這里設(shè)置一個(gè)本地KeepLock狀態(tài),有三個(gè)鍵處理該狀態(tài),KeepStart是進(jìn)入KeepLock,KeepRep是保持此前按的所有鍵不松開,稱為重復(fù)鍵組KeepGroup,其后每按一次鍵與KeepGroup組合一起發(fā)給PC,直到KeepEnd結(jié)束KeepLock狀態(tài)。比如在文本編輯時(shí),要選擇光標(biāo)后的兩個(gè)字符,在PC上應(yīng)按兩次Shift+ArrowR,操作過程是:KeepStart、ShiftL、KeepRep、ArrowR、ArrowR、KeepEnd;如果要輸入兩次Ctrl+Alt+Del,過程是:KeepStart、CtrlL、AltL、KeepRep、Del、Del、KeepEnd。

          3 硬件設(shè)計(jì)

          掌心鍵系統(tǒng)硬件結(jié)構(gòu)如圖3-1所示。硬件以PHILIPS公司含ARM7核的LPC2114為中心,具有背光、黑白128X64點(diǎn)陣LCD屏,五個(gè)獨(dú)立式多功能按鍵,配有PS2接口。

          圖3-1系統(tǒng)硬件結(jié)構(gòu)圖

          電源來自PS2鍵盤接口,或電池,5V電源經(jīng)過LM1117-3.3和LM1117-1.8穩(wěn)壓后供給各部分電路。顯示部分選用COG的128X64點(diǎn)陣黑白LCD液晶,以I/O方式接入LPC2114,LCD用來提示各種狀態(tài),以及輸入的信息,亦用于脫機(jī)錄入的信息顯示。MAX3232構(gòu)成RS-232串行通信接口,實(shí)現(xiàn)掌心鍵與PC機(jī)之間資料相互傳送。五個(gè)獨(dú)立按鍵都以外部電平中斷方式輸入,沒有按鍵時(shí),系統(tǒng)進(jìn)入節(jié)電狀態(tài),只有按鍵時(shí)系統(tǒng)才短時(shí)工作,在脫機(jī)狀態(tài)下工作時(shí),電池供電的節(jié)電問題顯得非常重要。設(shè)置蜂鳴器是為了協(xié)助提示按鍵操作。而JTAG接口是保留給軟件開發(fā)和升級(jí)時(shí)使用。

          正確檢測掌心鍵的按鍵操作是硬件設(shè)計(jì)的重點(diǎn)。普通按鍵檢測時(shí),可以用軟件方法處理按鍵機(jī)械抖動(dòng)問題,程序過濾按鍵前后20ms時(shí)間即可解決抖動(dòng)。而掌心鍵是多個(gè)鍵組合按下實(shí)現(xiàn)單PC鍵,不但要對(duì)每個(gè)按鍵去抖動(dòng),還要解決多鍵同時(shí)按下的時(shí)間差問題。剛開始使用掌心鍵時(shí),操作速度較慢,隨著使用時(shí)間的延長,按鍵速度越來越快,這樣就有一個(gè)熟練的過程。為此,將去抖動(dòng)的時(shí)間設(shè)成可配置的,設(shè)為JitterTime,當(dāng)有操作時(shí),保持JitterTime時(shí)間鍵Kn沒有變化,即認(rèn)為是Kn,從一個(gè)Kn變?yōu)镵m,也是用JitterTime時(shí)間去抖動(dòng),當(dāng)Km=0時(shí)就表明沒有任按鍵操作。JitterTime的范圍從20ms到2000ms。

          4 軟件設(shè)計(jì)

          軟件以u(píng)Cos實(shí)時(shí)嵌入式操作為核心,按功能分為多個(gè)任務(wù),軟件采用C語言編寫,主要完成兩部分功能,其一是本地按鍵和顯示,其二是將按鍵變?yōu)镻C鍵掃描碼通過PS2接口送給PC機(jī)。軟件結(jié)構(gòu)如圖4-1所示。


          圖4-1 系統(tǒng)軟件結(jié)構(gòu)

          算法的關(guān)鍵是對(duì)按鍵值的處理。由于PC鍵盤中的每個(gè)鍵都具有通碼(接下)和斷碼(松開),產(chǎn)生的鍵盤掃描碼由多個(gè)字節(jié)組成,而掌心鍵是多次操作才能構(gòu)成PC鍵盤的單次操作,所以在算法中要設(shè)置很多狀態(tài)變量來記憶操作過程,在完成一個(gè)PC鍵操作后才通過PS2接口輸出通碼或斷碼。下面給出了詳細(xì)的原碼程序和注釋。

          首先說明以下重要的全局變量:

          char KeySet; //存入子鍵集號(hào),因?yàn)椴煌蛹腒n值代表不同的鍵

          char KeyStatus; //記憶處理狀態(tài),在不同階段Kn有不同的意義

          char …….

          函數(shù)KeyMessage( )將按鍵原始值分集處理,分集后的值調(diào)用函數(shù)KeySend( )保存或發(fā)送,函數(shù)KeySendOn( )發(fā)送通碼的掃描碼,而函數(shù)KeySendOff( )發(fā)送斷碼的掃描碼。

          void KeySend( unsigned char OnCode ) //發(fā)送通碼

          { if( KeepLock==1){ //保存組合通碼KeepGroup

          KeepGroup[KeepPtr++] = OnCode;

          return; //只保存,不發(fā)送

          }

          If(KeepLock==2)……..

          KeySendOn( OnCode ); //發(fā)送通碼的掃描碼

          }

          void KeySendOn( unsigned char OnCode )

          { KeyOnCodeOff = 0; //設(shè)標(biāo)志,要求發(fā)斷碼

          KeyOnCode = OnCode; //記憶通碼,以便發(fā)相應(yīng)斷碼

          switch( KeyOnCode ){ //根據(jù)KeyOnCode發(fā)送通碼

          OnCode_A: Ps2Out(0x1C); break;

          OnCode_ArrowR: Ps2Out(0xE0); Ps2Out(0x74); break;

          ……..}}

          void KeySendOff( void ) //發(fā)送斷碼的掃描碼

          { if( KeyOnCodeOff ) return; //沒發(fā)過通碼,所有沒有斷碼

          KeyOnCodeOff = 1; //防止連續(xù)發(fā)斷碼

          switch( KeyOnCode){ //根據(jù)最后發(fā)送的通碼KeyOnCode補(bǔ)發(fā)斷碼

          OnCode_A: Ps2Out(0xF0); Ps2Out(0x1C);

          ………}}

          void KeyMessage( unsigned char Kn) //Kn是原始按鍵值

          { if( Kn==31){ KeyStatus=1; return; }

          if( KeyStatus==1){ if(Kn != 0 ){ KeySet=Kn; KeyStatus=2; } return; }

          if( KeyStatus==2){

          if( Kn==0){ KeySendOff(); return; }

          if( KeySet==1){

          switch( Kn ){

          1: CapsLock =! CapsLock; KeySend(OnCapsLock); break;

          2: NumLock=! NumLock; KeySend(OnNumLock); break;

          3: ScrollLock=!ScrollLock; KeySend(OnScrollLock); break;

          ………… //其它情況處理同上

          }

          return;

          }

          if(KeySet==2){ //處理數(shù)字 }

          if(KeySet==3){ //處理字母 }

          …………}}

          5 結(jié)束語

          以目前PC鍵盤設(shè)計(jì)中比較突出的布局設(shè)計(jì),反手操作,坐姿,坐高等問題為中心,以模擬試驗(yàn)的方法獲得掌心鍵設(shè)計(jì)的基本原則,它非常適用于現(xiàn)代的青少年人群,在部分學(xué)生用戶中實(shí)際測試,結(jié)果一周左右的時(shí)間,他們就能熟練操作掌心鍵,實(shí)現(xiàn)單手快速輸入。此外,該方案還可以用到大部分的掌上移動(dòng)設(shè)備中,比如PDA和手機(jī)。掌心鍵的進(jìn)一步完善,是增加按鍵的上推下?lián)芄δ埽@樣將一個(gè)鍵變?yōu)槿齻€(gè)鍵,具有45=1024種組合值,選擇其中部分容易操作的組合,即可實(shí)現(xiàn)更快的輸入速度;配合拇指的軌跡球使用,單手即可實(shí)現(xiàn)鼠標(biāo)和鍵盤雙操作。

          本文作者的創(chuàng)新點(diǎn):掌心鍵設(shè)計(jì)充分體現(xiàn)了后PC時(shí)代“功能主導(dǎo)型”這一特質(zhì),它不僅具備傳統(tǒng)鍵盤的所有功能,且可將其置于手掌中,單手五鍵組合操作,并具有脫機(jī)輸入文本文件,聯(lián)機(jī)拷貝文件的功能,該設(shè)計(jì)具有良好的市場前景和推廣應(yīng)用價(jià)值。掌心鍵不再受到傳統(tǒng)PC鍵盤置放位置的約束,而成為真正的可隨意移動(dòng)的掌中鍵盤,相信在不久的將來,掌心鍵必將成為PC用戶的“掌中乾坤”。

          參考文獻(xiàn)

          [1] Amorim ,Vitor,andJSimoes,"ADCcircuitoptimizeskeyencoding,"EDN,Feb4,1999,pg101,www.edn.com/article/CA56657

          [2] 張普,《字符編碼鍵盤輸入文集》 北京:中國標(biāo)準(zhǔn)出版社,1997

          [3] 劉勇 王玉晶.一種嵌入式PC非標(biāo)準(zhǔn)鍵盤的設(shè)計(jì).微計(jì)算機(jī)信息,2007,1-2:87-88

          [4] 鄭煒,系統(tǒng)中PS/2鍵盤驅(qū)動(dòng)程序設(shè)計(jì),《單片機(jī)與嵌入式系統(tǒng)應(yīng)用》,2005.04

          蜂鳴器相關(guān)文章:蜂鳴器原理


          評(píng)論


          相關(guān)推薦

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

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();