音影先锋亚洲天堂网|电影世界尽头的爱完整版播放|国产 熟女 91|高清无码免费观看欧美日韩|韩国一区二区三区黄色录像|美女亚洲加勒比在线|亚洲综合网 开心五月|7x成人在线入口|成人网站免费日韩毛片区|国产黄片?一级?二级?三级

基于布爾處理的鍵盤矩陣解讀方法探討

出處:crazyeda 發(fā)布于:2010-06-09 16:58:43

  摘要 運用布爾處理技術對鍵盤矩陣進行掃描解讀: 運用“位”操作方式將整個鍵盤矩陣的掃描解讀過程歸結為一系列的“位”的操作;掃描解讀過程沒有鍵值計算、沒有鍵對應的特征值返回;為便于電路板的設計布線,構成鍵盤矩陣的輸入口線可以是集中在同一P口的,也可以是隨意分散在不同P口中的。整個鍵盤矩陣的掃描簡捷、高效,解讀更為明快準確。

  引言

  傳統(tǒng)的各類電子的教科書上以及可查閱的文獻資料中,有關MCU做鍵盤矩陣的掃描解讀,大都是通過逐行逐列掃描、鍵值計算、鍵對應特征量返回、查表等數(shù)據處理的方式來進行掃描解讀的。為此還得設定在求鍵值時以輔助保存原值的行值、列值緩沖寄存器等,有的為了保證鍵每閉合MCU只作處理,往往會在程序運行中等閉合鍵釋放后才對其進行鍵解釋處理。這樣鍵盤的掃描解讀頗占CPU時間,降低了CPU的工作效率。本文揭示的是一種基于布爾處理的新穎的鍵盤矩陣解讀方法。下面結合圖示并以6×5鍵盤矩陣解讀為例進行描述。

  1  程序結構

  基于布爾處理的鍵盤矩陣解讀方法,也就是使整個鍵盤矩陣的掃描解讀過程都能歸結為系列的布爾“位”的操作。掃描解讀過程主要包括如下步驟:定義各標志位;鍵盤矩陣輸出線掃描;查詢有無鍵按下;查詢鍵解讀標志位;消抖動延時;查詢相對應的哪個輸示端口電平有變化;查詢相對應的哪個輸出端口輸出掃描電平;相對應的哪個鍵作具體的解釋處理;置位鍵解讀標志位,流程如圖1所示。

  2  步驟闡述

  2.1  定義各標志位

  充分利用現(xiàn)行MCU內部能進行位操作的RAM資源,運用偽指令來定義系統(tǒng)中所牽涉的各標志位。由于偽指令所揭示的定義只寫在源程序的頭文件上,是不會產生可執(zhí)行目標代碼的,因而對標志位定義的“操作”在圖1的程序流程簡圖中就沒有表述。

  圖1  鍵盤矩陣掃描程序流程簡圖

  2.2  鍵盤矩陣輸出線掃描

  輸出線掃描過程也是通過逐個改變輸出行線端口的電平來實現(xiàn)的,如圖2所示。輸入口線平常所有端口都處于高電平狀態(tài);輸出口線是逐個循環(huán)的輸出低電平,也就是任何時候只有一個口線輸出低電平;通過鍵的按下接通,才有可能拉低相對應輸入口線的端口電平。

  圖2  鍵盤矩陣電路結構

  如果系統(tǒng)中配置有數(shù)碼顯示電路,則電路結構如圖3所示。輸入口線平常也都處于高電平狀態(tài);輸出口線卻是逐個循環(huán)的輸出高電平,通過反相組件后掃描線才成為低電平;通過鍵的按下接通,同樣拉低相對應輸入口線的端口電平。這樣將鍵盤輸出線掃描能與數(shù)碼顯示的位掃描程序合二為一了,也就能省卻了鍵盤掃描的單獨執(zhí)行,把鍵盤掃描納入到系統(tǒng)掃描顯示的大循環(huán)中。

  圖3  帶數(shù)碼位矩陣電路結構

  2.3  查詢有無鍵按下

  有無鍵按下自然是通過對鍵盤掃描輸入口狀況的查詢來確定的。有鍵按下,鍵盤掃描輸入端口也就相應有所改變了。如果輸入端口如圖2所示,是集中在同一個Pn口的(其中,n=0,1,2,…),那么可以用對整個Pn口的字節(jié)數(shù)據的判別來確定鍵有否按動;也可運用依次對Pn口的幾個端口Pn.y進行位的查詢來確定有無鍵按下,其中,y=0、1、2、3、4。

  如果輸入口不是集中的,為了設計布線的方便而零亂分散于P0口、P2口……Pn口等不同的P口上,那么只能通過依次地對輸入各端口的位狀態(tài)變化的查詢來確定有否鍵按下。若檢查到有鍵按下,就轉入到鍵盤矩陣掃描解讀程序;若沒有鍵按下,則清鍵解讀標志位為邏輯0,為下次按鍵解讀作好準備。

  2.4  查詢鍵解讀標志位

  檢查有鍵按下后首先查詢鍵解讀標志位的狀態(tài)是處于邏輯0還是邏輯1;若是邏輯0說明本次按鍵尚未解讀過,經消抖動延時后需進一步對鍵盤矩陣的輸出、輸入口線進行查詢來確定是哪一個鍵,并作相應處理。

  若鍵解讀標志位是邏輯1,則表明本次按鍵已解讀過了,沒必要浪費CPU時間,可直接從鍵掃描處理程序中返回。這就實現(xiàn)了鍵每閉合,MCU只作處理的效果。改變了傳統(tǒng)的為了保證鍵每閉合,MCU只作處理,程序中需等待鍵釋放后才對其進行解釋的弊病。

  2.5  消抖動延時

  當覺察有鍵按下、查詢鍵解讀標志位為0時,就置位消抖動延時標志位及其輔助位進入消抖動延時處理。消抖動延時的具體進行可調備用的消抖動延時程序;也可借助對系統(tǒng)大循環(huán)次數(shù)的計數(shù)或動用MCU內部定時器的中斷來實現(xiàn)消抖動延時,這樣就不必設置專門的延時程序而占用CPU的時間了。消抖動延時結束時清零消抖動延時標志位及其輔助位。

  2.6  查詢哪個輸入口線電平有變化

  平常所有輸入端口都處于高電平,經消抖動延時后就查詢鍵盤矩陣各輸入口線的電平是否有被拉低。若一個端口也沒被拉低,則說明本次按鍵無效(可能是某種干擾引起的“抖動”),于是直接返回。

  若依次查詢作為輸入的Pn.y各端口的其中某個端口電平被拉低,則表明本次按鍵是有效的,將跳轉至查詢與該口線交叉相關的那個輸出口線。

  2.7  掃描哪個輸出口線輸出有效電平

  圖2所示的鍵盤矩陣電路結構中,輸出端口Pm.x與輸入端口Pn.y是直接由鍵連接交叉的。當鍵按下時哪一個輸入端口的電平被拉低確定后,則跳轉到查詢Pm.x(Pm.0、Pm.1、Pm.2、Pm.3、Pm.4、Pm.5)六個端口中是哪個端口輸出低電平,進而確定具體哪一個鍵按下,跳轉至幾號鍵進行解釋處理。任何時候掃描輸出低電平的端口是的,也只有行掃描輸出低電平的那個Pm.x口,才會將列輸入Pn.y口的電平拉低。這時,鍵按下有效交叉的行、列相應端口都處于低電平。

  若運用典型的51系列MCU的指令去寫匯編程序來解讀矩陣的具體鍵時,則有:

  Key_scan:JNB Pn.y,Key_matrix_j

 ??;當輸入端口Pn.y(y=0,1,2,3,4)被拉低時,跳轉至Key_matrix_j(j=y)

  LJMPReturn

  ;若端口Pn.y一個也沒被拉低,則返回

  Key_matrix_j: JNBPm.x,Key_gloze_i

 ?。划斨獣訮n.y的某個端口被拉低,則再查詢Pm.x(x=0,1,2,3,4,5)的哪個端口掃描輸出低電平來確定具體是i號按鍵,則跳轉至Key_gloze_i(i=1,2,3,…,29,30)以對i號鍵作相應的解釋處理

  LJMPReturn

  Key_gloze_1:…;1號鍵解釋處理

  LJMPReturn

  Key_gloze_2:…;2號鍵解釋處理

  LJMPReturn

  …

  Key_gloze_29:…;29號鍵解釋處理

  LJMPReturn

  Key_gloze_30:…;30號鍵解釋處理

  Return:RET;鍵盤矩陣掃描解讀返回

  圖4  鍵盤矩陣掃描倒樹形結構

  以上匯編語言所述的鍵盤矩陣掃描解讀過程,可借助圖4來較形象化地解釋。由圖4可見,每一Pn.y(y=0,1,2,3,4)口都與Pm.x(x=0,1,2,3,4,5)的6個口有關聯(lián),而每一Pn.y口線與Pm.x的6個口線中任一口線相交都揭出一個鍵(i號),結合以上程序,若輸入端口Pn.0被拉低,且是端口Pm.1有效掃描輸出低電平,則有(JNBPn.0,Key_matrix_0)指令跳轉至Key_matrix_0,繼而查詢輸出端口(JNBPm.1,Key_gloze_6)跳轉至Key_gloze_6,也就是先查詢到Pn.0被拉低跳轉至Key_matrix_0→再查詢到Pm.1掃描輸出低電平跳轉至Key_gloze_6→揭出是6號鍵按下并賦予其相應的解釋處理。以此類推。

  如果鍵盤矩陣的電路結構如圖3所示,其掃描輸出端口Pm.x不是直接與輸入端口Pn.y交叉的,而是經過用于數(shù)碼顯示位驅動的反相組件后再與入端口Pn.y交叉的。為此,其掃描輸出有效端口不是低電平了,而是輸出高電平經反相組件后再成為低電平,通過按鍵同樣將與之交叉的輸入端口線拉低。所以,在查詢輸入端口時與圖2所示的是相同的,而在查詢掃描輸出有效端口時與圖2的就有所不同了。

  圖2所示電路結構查詢的是哪個端口掃描輸出低電平,有:

  JNBPm.x,Key_gloze_i;

  圖3所示電路結構查詢的卻是哪個端口掃描輸出高電平,則:

  JBPm.x,Key_gloze_i;

  由圖4可知,若輸入端口Pn.2被拉低,且是端口Pm.3有效掃描輸出高電平,則有先查詢到Pn.2被拉低→再查詢到Pm.3掃描輸出高電平→揭出是18號鍵按下并賦予其相應的解釋處理。依此類推。具體的程序跳轉如圖5所示,可見其過程都是位的查詢跳轉。

  圖5  鍵盤矩陣掃描程序跳轉結構圖

  2.8  執(zhí)行各對應鍵具體處理

  因為輸出口線為行線,與輸入口線為列線的交叉點是的,故確定了輸出哪一端口與輸入哪一端口,也就確定了具體哪一個鍵(i號鍵)按下了,就能賦予該鍵相應的解釋處理。整個過程中,沒必要區(qū)別哪個是數(shù)字鍵、哪個是功能鍵。每一個鍵的解讀都是等價的,是數(shù)字鍵就直接賦予其相應的數(shù)值處理,是功能鍵就直接賦予其具體的功能解釋。

  2.9  置位鍵解讀標志位

  為保證鍵每閉合MCU只作處理,每鍵解讀后都將置鍵解讀標志位為邏輯1。對于鍵解讀標志位的置位,可以在每一個鍵解釋處理完畢后進行,也可在消抖動延時后就進行總置。不管鍵有多少個,鍵解讀標志位用的卻是同一個。

  其實,引入了鍵解讀標志位,不只是控制鍵每閉合MCU只作處理,還可對那些持久按著的鍵有控地進行多次處理(如用于對一些數(shù)據遞進、或遞減的連續(xù)設置等)。

  3  原理綜述

  本文提出基于布爾處理的鍵盤矩陣解讀方法。其原理如下:

  在鍵盤矩陣掃描時,首先檢查有否鍵按動。若無鍵按動,則清零鍵解讀標志位就返回;若有鍵按下,則再查詢鍵解讀標志位是邏輯0還是邏輯1。如果是邏輯1,表明本次按鍵已解讀過,可直接從鍵掃描處理程序中返回;如果是邏輯0,說明本次按鍵尚未解讀過,則啟用消抖動延時。經消抖動延時后即查詢鍵盤矩陣輸入口線的各端口是否有拉低。若一個端口也沒被拉低,則說明本次按鍵無效,那可能是某種干擾引起的“抖動”,立即從鍵掃描處理程序中返回;若查詢到其中之一端口的電平被拉低了,則表明本次按鍵盤是有效的,將跳轉查詢與之相交的那個掃描有效輸出口線,進而確定具體是哪一個鍵按下,并跳轉賦予其相應的解釋處理。解釋處理后,置鍵解讀標志位為邏輯1再返回,即完成鍵盤矩陣的掃描解讀。

  不管鍵盤矩陣有多少個鍵,其掃描確定一個具體鍵所需位查詢的總次數(shù)S不會大于行數(shù)x與列數(shù)y之和;但也不少于2次,即2≤S≤x+y。如上述的6×5矩陣,多所需位查詢總次數(shù)S=5+6=11。當?shù)?0號鍵按下,查詢到一列Pn.4端口電平被拉低,繼而跳轉查詢到有效掃描輸出是一行Pm.5端口;但至少所需位查詢總次數(shù)S=1+1=2。當1號鍵按下,先查詢到第1列Pn.0端口電平被拉低,繼而跳轉查詢到有效掃描輸出是第1行Pm.0端口。

  結語

  運用布爾位操作處理進行鍵盤矩陣的解讀,可適用于所有基于MCU的智能化儀器儀表中鍵盤矩陣的解讀。運用布爾位操作方式,改變了傳統(tǒng)的用數(shù)據字節(jié)處理方式。掃描解讀過程中,沒有鍵值計算,沒有鍵對應的特征值返回,同時也省去了求鍵值時以輔助保存原值的行值、列值緩沖寄存器等,有的只是位的操作查詢。構成鍵盤矩陣的輸入口線可以是連續(xù)的,也可以是不連續(xù)的。在電路設計布線時,哪一個端口方便就用哪個端口作鍵盤矩陣輸入線。換言之,輸入口線可隨意分散在不同P口中,這種靈活、便捷的方式是傳統(tǒng)的用鍵值處理的方式所不及的;同時也改變了傳統(tǒng)的為了保證鍵每閉合MCU只作處理,需等待鍵釋放后才對其進行鍵解釋處理的做法。整個鍵盤矩陣的掃描顯得簡捷、高效,鍵盤矩陣的解讀更為明快、準確。


  
關鍵詞:基于布爾處理的鍵盤矩陣解讀方法探討

版權與免責聲明

凡本網注明“出處:維庫電子市場網”的所有作品,版權均屬于維庫電子市場網,轉載請必須注明維庫電子市場網,http://m.58mhw.cn,違反者本網將追究相關法律責任。

本網轉載并注明自其它出處的作品,目的在于傳遞更多信息,并不代表本網贊同其觀點或證實其內容的真實性,不承擔此類作品侵權行為的直接責任及連帶責任。其他媒體、網站或個人從本網轉載時,必須保留本網注明的作品出處,并自負版權等法律責任。

如涉及作品內容、版權等問題,請在作品發(fā)表之日起一周內與本網聯(lián)系,否則視為放棄相關權利。

OEM清單文件: OEM清單文件
*公司名:
*聯(lián)系人:
*手機號碼:
QQ:
有效期:

掃碼下載APP,
一鍵連接廣大的電子世界。

在線人工客服

買家服務:
賣家服務:
技術客服:

0571-85317607

網站技術支持

13606545031

客服在線時間周一至周五
9:00-17:30

關注官方微信號,
第一時間獲取資訊。

建議反饋

聯(lián)系人:

聯(lián)系方式:

按住滑塊,拖拽到最右邊
>>
感謝您向阿庫提出的寶貴意見,您的參與是維庫提升服務的動力!意見一經采納,將有感恩紅包奉上哦!