采用布爾處理的鍵盤矩陣解讀方法分析_第1頁
采用布爾處理的鍵盤矩陣解讀方法分析_第2頁
采用布爾處理的鍵盤矩陣解讀方法分析_第3頁
采用布爾處理的鍵盤矩陣解讀方法分析_第4頁
采用布爾處理的鍵盤矩陣解讀方法分析_第5頁
已閱讀5頁,還剩1頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、    采用布爾處理的鍵盤矩陣解讀方法分析采用布爾處理的鍵盤矩陣解讀方法分析運(yùn)用布爾處理技術(shù)對(duì)鍵盤矩陣進(jìn)行掃描解讀:運(yùn)用“位”操作方式將整個(gè)鍵盤矩陣的掃描解讀過程歸結(jié)為一系列的“位”的操作;掃描解讀過程沒有鍵值計(jì)算、沒有鍵對(duì)應(yīng)的特征值返回;為便于電路板的設(shè)計(jì)布線,構(gòu)成鍵盤矩陣的輸入口線可以是集中在同一P口的,也可以是隨意分散在不同P口中的。整個(gè)鍵盤矩陣的掃描簡捷、高效,解讀更為明快準(zhǔn)確。關(guān)鍵詞鍵盤矩陣布爾處理MCU位操作掃描解讀引言傳統(tǒng)的各類采用布爾處理的鍵盤矩陣解讀方法分析運(yùn)用布爾處理技術(shù)對(duì)鍵盤矩陣進(jìn)行掃描解讀: 運(yùn)用“位”操作方式將整個(gè)鍵盤矩陣的掃描

2、解讀過程歸結(jié)為一系列的“位”的操作;掃描解讀過程沒有鍵值計(jì)算、沒有鍵對(duì)應(yīng)的特征值返回;為便于電路板的設(shè)計(jì)布線,構(gòu)成鍵盤矩陣的輸入口線可以是集中在同一P口的,也可以是隨意分散在不同P口中的。整個(gè)鍵盤矩陣的掃描簡捷、高效,解讀更為明快準(zhǔn)確。關(guān)鍵詞 鍵盤矩陣 布爾處理MCU位操作 掃描解讀引言傳統(tǒng)的各類電子專業(yè)的教科書上以及可查閱的文獻(xiàn)資料中,有關(guān)MCU做鍵盤矩陣的掃描解讀,大都是通過逐行逐列掃描、鍵值計(jì)算、鍵對(duì)應(yīng)特征量返回、查表等數(shù)據(jù)處理的方式來進(jìn)行掃描解讀的。為此還得設(shè)定在求鍵值時(shí)以輔助保存原值的行值、列值緩沖寄存器等,有的為了保證鍵每閉合一次MCU只作一次處理,往往會(huì)在程序運(yùn)行中等閉合鍵釋放后

3、才對(duì)其進(jìn)行鍵解釋處理。這樣鍵盤的掃描解讀頗占CPU時(shí)間,降低了CPU的工作效率。本文揭示的是一種基于布爾處理的新穎的鍵盤矩陣解讀方法。下面結(jié)合圖示并以6×5鍵盤矩陣解讀為例進(jìn)行描述。1  程序結(jié)構(gòu)基于布爾處理的鍵盤矩陣解讀方法,也就是使整個(gè)鍵盤矩陣的掃描解讀過程都能歸結(jié)為系列的布爾“位”的操作。掃描解讀過程主要包括如下步驟:定義各標(biāo)志位;鍵盤矩陣輸出線掃描;查詢有無鍵按下;查詢鍵解讀標(biāo)志位;消抖動(dòng)延時(shí);查詢相對(duì)應(yīng)的哪個(gè)輸示端口電平有變化;查詢相對(duì)應(yīng)的哪個(gè)輸出端口輸出掃描電平;相對(duì)應(yīng)的哪個(gè)鍵作具體的解釋處理;置位鍵解讀標(biāo)志位,流程如圖1所示。2  步驟闡述2.1&#

4、160; 定義各標(biāo)志位充分利用現(xiàn)行MCU內(nèi)部能進(jìn)行位操作的RAM資源,運(yùn)用偽指令來定義系統(tǒng)中所牽涉的各標(biāo)志位。由于偽指令所揭示的定義只寫在源程序的頭文件上,是不會(huì)產(chǎn)生可執(zhí)行目標(biāo)代碼的,因而對(duì)標(biāo)志位定義的“操作”在圖1的程序流程簡圖中就沒有表述。圖1  鍵盤矩陣掃描程序流程簡圖2.2  鍵盤矩陣輸出線掃描輸出線掃描過程也是通過逐個(gè)改變輸出行線端口的電平來實(shí)現(xiàn)的,如圖2所示。輸入口線平常所有端口都處于高電平狀態(tài);輸出口線是逐個(gè)循環(huán)的輸出低電平,也就是任何時(shí)候只有一個(gè)口線輸出低電平;通過鍵的按下接通,才有可能拉低相對(duì)應(yīng)輸入口線的端口電平。圖2  鍵盤矩陣電路結(jié)構(gòu)如果系統(tǒng)

5、中配置有數(shù)碼顯示電路,則電路結(jié)構(gòu)如圖3所示。輸入口線平常也都處于高電平狀態(tài);輸出口線卻是逐個(gè)循環(huán)的輸出高電平,通過反相組件后掃描線才成為低電平;通過鍵的按下接通,同樣拉低相對(duì)應(yīng)輸入口線的端口電平。這樣將鍵盤輸出線掃描能與數(shù)碼顯示的位掃描程序合二為一了,也就能省卻了鍵盤掃描的單獨(dú)執(zhí)行,把鍵盤掃描納入到系統(tǒng)掃描顯示的大循環(huán)中。圖3  帶數(shù)碼位矩陣電路結(jié)構(gòu)2.3  查詢有無鍵按下有無鍵按下自然是通過對(duì)鍵盤掃描輸入口狀況的查詢來確定的。有鍵按下,鍵盤掃描輸入端口也就相應(yīng)有所改變了。如果輸入端口如圖2所示,是集中在同一個(gè)Pn口的(其中,n=0,1,2,),那么可以用對(duì)整個(gè)Pn口的字節(jié)

6、數(shù)據(jù)的判別來確定鍵有否按動(dòng);也可運(yùn)用依次對(duì)Pn口的幾個(gè)端口Pn.y進(jìn)行位的查詢來確定有無鍵按下,其中,y=0、1、2、3、4。如果輸入口不是集中的,為了設(shè)計(jì)布線的方便而零亂分散于P0口、P2口Pn口等不同的P口上,那么只能通過依次地對(duì)輸入各端口的位狀態(tài)變化的查詢來確定有否鍵按下。若檢查到有鍵按下,就轉(zhuǎn)入到鍵盤矩陣掃描解讀程序;若沒有鍵按下,則清一次鍵解讀標(biāo)志位為邏輯0,為下次按鍵解讀作好準(zhǔn)備。2.4  查詢鍵解讀標(biāo)志位檢查有鍵按下后首先查詢鍵解讀標(biāo)志位的狀態(tài)是處于邏輯0還是邏輯1;若是邏輯0說明本次按鍵尚未解讀過,經(jīng)消抖動(dòng)延時(shí)后需進(jìn)一步對(duì)鍵盤矩陣的輸出、輸入口線進(jìn)行查詢來確定是哪一個(gè)

7、鍵,并作相應(yīng)處理。若鍵解讀標(biāo)志位是邏輯1,則表明本次按鍵已解讀過了,沒必要浪費(fèi)CPU時(shí)間,可直接從鍵掃描處理程序中返回。這就實(shí)現(xiàn)了鍵每閉合一次,MCU只作一次處理的效果。改變了傳統(tǒng)的為了保證鍵每閉合一次,MCU只作一次處理,程序中需等待鍵釋放后才對(duì)其進(jìn)行解釋的弊病。2.5  消抖動(dòng)延時(shí)當(dāng)覺察有鍵按下、查詢鍵解讀標(biāo)志位為0時(shí),就置位消抖動(dòng)延時(shí)標(biāo)志位及其輔助位進(jìn)入消抖動(dòng)延時(shí)處理。消抖動(dòng)延時(shí)的具體進(jìn)行可調(diào)備用的消抖動(dòng)延時(shí)程序;也可借助對(duì)系統(tǒng)大循環(huán)次數(shù)的計(jì)數(shù)或動(dòng)用MCU內(nèi)部定時(shí)器的中斷來實(shí)現(xiàn)消抖動(dòng)延時(shí),這樣就不必設(shè)置專門的延時(shí)程序而占用CPU的時(shí)間了。消抖動(dòng)延時(shí)結(jié)束時(shí)清零消抖動(dòng)延時(shí)標(biāo)志位及其

8、輔助位。2.6  查詢哪個(gè)輸入口線電平有變化平常所有輸入端口都處于高電平,經(jīng)消抖動(dòng)延時(shí)后就查詢鍵盤矩陣各輸入口線的電平是否有被拉低。若一個(gè)端口也沒被拉低,則說明本次按鍵無效(可能是某種干擾引起的“抖動(dòng)”),于是直接返回。若依次查詢作為輸入的Pn.y各端口的其中某個(gè)端口電平被拉低,則表明本次按鍵是有效的,將跳轉(zhuǎn)至查詢與該口線交叉相關(guān)的那個(gè)輸出口線。2.7  掃描哪個(gè)輸出口線輸出有效電平若運(yùn)用典型的51系列MCU的指令去寫匯編程序來解讀矩陣的具體鍵時(shí),則有:Key_scan:JNB Pn.y,Key_matrix_j;當(dāng)輸入端口Pn.y(y=0,1,2,3,4)被拉低時(shí),跳轉(zhuǎn)至

9、Key_matrix_j(j=y)LJMPReturn;若端口Pn.y一個(gè)也沒被拉低,則返回Key_matrix_j: JNBPm.x,Key_gloze_i;當(dāng)知曉Pn.y的某個(gè)端口被拉低,則再查詢Pm.x(x=0,1,2,3,4,5)的哪個(gè)端口掃描輸出低電平來確定具體是i號(hào)按鍵,則跳轉(zhuǎn)至Key_gloze_i(i=1,2,3,29,30)以對(duì)i號(hào)鍵作相應(yīng)的解釋處理LJMPReturnKey_gloze_1:;1號(hào)鍵解釋處理LJMPReturnKey_gloze_2:;2號(hào)鍵解釋處理LJMPReturnKey_gloze_29:;29號(hào)鍵解釋處理LJMPReturnKey_gloze_30:

10、;30號(hào)鍵解釋處理Return:RET;鍵盤矩陣掃描解讀返回圖4  鍵盤矩陣掃描倒樹形結(jié)構(gòu)圖2所示電路結(jié)構(gòu)查詢的是哪個(gè)端口掃描輸出低電平,有:JNBPm.x,Key_gloze_i;圖3所示電路結(jié)構(gòu)查詢的卻是哪個(gè)端口掃描輸出高電平,則:JBPm.x,Key_gloze_i;由圖4可知,若輸入端口Pn.2被拉低,且是端口Pm.3有效掃描輸出高電平,則有先查詢到Pn.2被拉低再查詢到Pm.3掃描輸出高電平揭出是18號(hào)鍵按下并賦予其相應(yīng)的解釋處理。依此類推。具體的程序跳轉(zhuǎn)如圖5所示,可見其過程都是位的查詢跳轉(zhuǎn)。圖5  鍵盤矩陣掃描程序跳轉(zhuǎn)結(jié)構(gòu)圖2.8  執(zhí)行各對(duì)應(yīng)鍵具體

11、處理因?yàn)檩敵隹诰€為行線,與輸入口線為列線的交叉點(diǎn)是唯一的,故確定了輸出哪一端口與輸入哪一端口,也就確定了具體哪一個(gè)鍵(i號(hào)鍵)按下了,就能賦予該鍵相應(yīng)的解釋處理。整個(gè)過程中,沒必要區(qū)別哪個(gè)是數(shù)字鍵、哪個(gè)是功能鍵。每一個(gè)鍵的解讀都是等價(jià)的,是數(shù)字鍵就直接賦予其相應(yīng)的數(shù)值處理,是功能鍵就直接賦予其具體的功能解釋。2.9  置位鍵解讀標(biāo)志位為保證鍵每閉合一次MCU只作一次處理,每一次鍵解讀后都將置鍵解讀標(biāo)志位為邏輯1。對(duì)于鍵解讀標(biāo)志位的置位,可以在每一個(gè)鍵解釋處理完畢后進(jìn)行,也可在消抖動(dòng)延時(shí)后就進(jìn)行一次總置。不管鍵有多少個(gè),鍵解讀標(biāo)志位用的卻是同一個(gè)。其實(shí),引入了鍵解讀標(biāo)志位,不只是控制鍵

12、每閉合一次MCU只作一次處理,還可對(duì)那些持久按著的鍵有控地進(jìn)行多次處理(如用于對(duì)一些數(shù)據(jù)遞進(jìn)、或遞減的連續(xù)設(shè)置等)。3  原理綜述本文提出基于布爾處理的鍵盤矩陣解讀方法。其原理如下:在鍵盤矩陣掃描時(shí),首先檢查有否鍵按動(dòng)。若無鍵按動(dòng),則清零一次鍵解讀標(biāo)志位就返回;若有鍵按下,則再查詢鍵解讀標(biāo)志位是邏輯0還是邏輯1。如果是邏輯1,表明本次按鍵已解讀過,可直接從鍵掃描處理程序中返回;如果是邏輯0,說明本次按鍵尚未解讀過,則啟用消抖動(dòng)延時(shí)。經(jīng)消抖動(dòng)延時(shí)后即查詢鍵盤矩陣輸入口線的各端口是否有拉低。若一個(gè)端口也沒被拉低,則說明本次按鍵無效,那可能是某種干擾引起的“抖動(dòng)”,立即從鍵掃描處理程序中返

13、回;若查詢到其中之一端口的電平被拉低了,則表明本次按鍵盤是有效的,將跳轉(zhuǎn)查詢與之相交的那個(gè)掃描有效輸出口線,進(jìn)而確定具體是哪一個(gè)鍵按下,并跳轉(zhuǎn)賦予其相應(yīng)的解釋處理。解釋處理后,置鍵解讀標(biāo)志位為邏輯1再返回,即完成一次鍵盤矩陣的掃描解讀。不管鍵盤矩陣有多少個(gè)鍵,其掃描確定一個(gè)具體鍵所需位查詢的總次數(shù)S不會(huì)大于行數(shù)x與列數(shù)y之和;但也不少于2次,即2Sx+y。如上述的6×5矩陣,最多所需位查詢總次數(shù)S=5+6=11。當(dāng)?shù)?0號(hào)鍵按下,查詢到最后一列Pn.4端口電平被拉低,繼而跳轉(zhuǎn)查詢到有效掃描輸出是最后一行Pm.5端口;但至少所需位查詢總次數(shù)S=1+1=2。當(dāng)1號(hào)鍵按下,先查詢到第1列Pn.0端口電平被拉低,繼而跳轉(zhuǎn)查詢到有效掃描輸出是第1行Pm.0端口。結(jié)語運(yùn)用布爾位操作處理進(jìn)行鍵盤矩陣的解讀,可適用于所有基于MCU的智能化儀器儀表中鍵盤矩陣的解讀。運(yùn)用布爾位操作方式,改變了傳統(tǒng)的用數(shù)據(jù)字節(jié)處理方式。掃描解讀過程中,沒有鍵值計(jì)算,沒有鍵對(duì)應(yīng)的特征值返回,同時(shí)也省去了求鍵值時(shí)以輔助保存

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論