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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 一種頻率編碼鍵盤的設(shè)計與實現(xiàn)

          一種頻率編碼鍵盤的設(shè)計與實現(xiàn)

          作者: 時間:2009-03-11 來源:網(wǎng)絡(luò) 收藏

          在消費電子、自動化儀表、工業(yè)控制等領(lǐng)域已得到廣泛的應(yīng)用,它以靈活的、低廉的成本、微小的功耗在電子器件市場中占有十分重要的地位。今天越來越多的芯片廠商在不遺余力地競爭這個應(yīng)用空間,如INTEL、NEC、MICROCHIP等公司都已形成了自己強大的產(chǎn)品線,給產(chǎn)品的帶來了越來越多的選擇。

          本文引用地址:http://www.ex-cimer.com/article/173872.htm

            幾乎在每一個應(yīng)用系統(tǒng)中,都是必備的人機交互的主要輸入設(shè)備。傳統(tǒng)的按鍵識別方法是采用芯片,如8279;或采用軟件控制多條I/O線掃描的方法。這種方法用到的I/O引腳數(shù)常常在4條以上。然而I/O引腳資源有限,特別是在引腳數(shù)少、功耗低、系統(tǒng)成本敏感的場合,成本和功耗決定了人員不可能另外擴充I/O空間,如采用ATMEL公司的AT89C1051/AT89C2051及AT90SXX系列、MICROCHIP公司的PIC16CXX系列的單片機時就是這樣。如何利用有限的I/O資源多個按鍵的識別是經(jīng)常遇到的問題。作者根據(jù)實際的開發(fā)經(jīng)驗,結(jié)合單片機自身的特點,提出一種利用單片機的定時器/計數(shù)器和測頻原理、用一個I/O引腳多個按鍵識別的方法,并給出了 MCS-51單片機的匯編源程序。由于在各種型號的單片機中,定時器/計數(shù)器幾乎是一種必備的配置資源,因此其原理很容易移植到其它型號的單片機應(yīng)用系統(tǒng)中。

          1 硬件電路的分析

            的硬件電路如圖1所示。由NE555定時器組成的多諧振蕩器產(chǎn)生一定的方波[1],單片機利用其定時器/計數(shù)器對這個方波的進行測量。NE555定時器組成的多諧振蕩器的放電時間常數(shù)為:τ放=RS?C1,而充電時間常數(shù)為:τ充=(Ri+RS)C1,(i=1,2,???,n),n為按鍵的數(shù)目。

          當(dāng)不同的按鍵按下時,NE555定時器組成的多諧振蕩器的充電時間常數(shù)不同,放電時間常數(shù)不變,因而輸出方波的頻率也不同,使得不同的鍵按下時對應(yīng)不同的輸出頻率。只要準(zhǔn)確地測量出NE555定時器的輸出頻率,就可以精確地識別出被按下的按鍵號,這就是頻率式鍵盤設(shè)計的理論依據(jù)。

            在實際應(yīng)用中,考慮到電阻阻值和電容容量的分散性以及電路的時間穩(wěn)定性和溫度穩(wěn)定性,在滿足單片機測量頻率的分辨率和量程的基礎(chǔ)上,應(yīng)盡量將各個鍵之間的頻率間隔拉大。這樣即使每一按鍵輸出的頻率有一定的誤差,但只要保證輸出的各個頻率互不相同,就可以通過軟件去判斷被測的頻率究竟落在了哪一個范圍,而不是判斷落在了哪一個頻點上。這樣使設(shè)計的軟件對電路產(chǎn)生的誤差具有一定的適應(yīng)性,從而擺脫了本電路對元器件參數(shù)的高度敏感性,大大加快了電路調(diào)試和批量生產(chǎn)的速度。

          2 匯編程序的設(shè)計

            在作者設(shè)計的系統(tǒng)中,采用AT89C2051單片機,外接晶振頻率為12MHz。單片機僅具有15個I/O線,由于系統(tǒng)采用電池供電,需要進行低功耗設(shè)計。而采用本電路后,簡化了系統(tǒng)的硬件,滿足了低功耗的要求,另外的14 個I/O線能滿足一般的便攜式應(yīng)用。本系統(tǒng)用到8個按鍵,鍵盤電路的中C1=C2=0.01μF,RS=150Ω,其余的阻容值和設(shè)計的中心頻率如表1所示。其中,中心頻率是指在電路參數(shù)誤差為零時對應(yīng)的頻率。由于實際電路中誤差總是存在的,所以頻率就落在此中心頻率附近。

          在軟件設(shè)計上要以下三個功能:(1)判斷有無鍵按下;(2)有鍵按下時,進行按鍵消抖;(3)正確識別被按下的按鍵編號。首先設(shè)置單片機定時器/計數(shù)器的工作方式,讓定時器/計數(shù)器T0設(shè)為外部計數(shù)方式,允許T0中斷;并給TL0、TH0賦初值FFH,一旦有鍵按下時,T0便產(chǎn)生中斷,由此可以判斷是否有鍵按下;然后延時8ms實現(xiàn)按鍵抖動的消除;接著將T1設(shè)為內(nèi)部定時方式,定時時間為50ms,T0在這50ms的時間里對NE555輸出頻率信號進行計數(shù),通過對計數(shù)值的大小范圍的判斷就可以識別按鍵的編號。有關(guān)延時和測頻的程序很常見,讀者可以參考有關(guān)資料。按鍵識別這部分的匯編程序如下文?眼2?演。程序入口參數(shù)FRQH、FRQL分別是50ms定時時間內(nèi)對外部頻率計數(shù)的高位和低位,判斷結(jié)果放在KEYCODE中。

            KEYCODE EQU 30H ;存放鍵值(1-8 )有效;

          ;0FFH無鍵按下,0EEH出錯

            FRQH EQU 32H ;頻率測量值高位

            FRQL EQU 31H ;頻率測量值低位

            ORG 0000H

            MOV DPTR,#TABLE

            MOV R0,#0

            MOV KEYCODE,#0

          NEXT:MOV A,R0

            MOVC A,@A+DPTR

            INC R0

            CJNE A,F(xiàn)RQH,J1

            MOV A,R0

            INC R0

            MOVC A,@A+DPTR

            CJNE A,F(xiàn)RQL,J2

            MOV KEYCODE,#0EEH  ?。活l率在邊界上出錯

            LJMP WAIT

          J1:JNC WAIT

            INC R0

            NNT:INC KEYCODE

            LJMP NEXT

          J2:JNC WAIT

          JMP NNT

          WAIT:MOV A,KEYCODE

          ??; ...

          ??; ... 添加用戶應(yīng)用程序

           ; 判斷頻率區(qū)間上下限的數(shù)據(jù)表:

          TABLE: DB 00H,0FAH,01H,5EH,01H,0C2H

          DB 02H,26H,02H,8AH,02H,0EEH

          DB 03H,52H,03H,0B6H,04H,1AH

          DB 04H,7EH,0FFH,0FFH

          3 特點及注意事項

            采用具有抗干擾力強、接口簡單的優(yōu)點,并且易于實現(xiàn)光電隔離。在鍵盤與主機分離的場合,還可以大大簡化二者互連的電纜。另外,若將此信號去調(diào)制紅外發(fā)射組件,也可以實現(xiàn)遙控鍵盤而無需額外的編碼邏輯。但是它對多鍵的同時按下和單鍵的連擊檢測能力較差,在與實際應(yīng)用結(jié)合的時候,應(yīng)盡量避免這兩種情況的出現(xiàn)并恰當(dāng)?shù)剡M行處理。同時NE555的上限工作頻率是500kHz,采用傳統(tǒng)的MCS-51單片機測量外部頻率時,最高可測的頻率為晶振頻率的24分頻,設(shè)計中應(yīng)考慮可用的頻率范圍。采用其它型號的單片機時,也應(yī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); })();