任務十 鍵盤 (2)課件_第1頁
任務十 鍵盤 (2)課件_第2頁
任務十 鍵盤 (2)課件_第3頁
任務十 鍵盤 (2)課件_第4頁
任務十 鍵盤 (2)課件_第5頁
已閱讀5頁,還剩12頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

任務十鍵盤接口擴展任務分析:實現(xiàn)鍵盤接口擴展硬件獨立式鍵盤的結構和原理矩陣式鍵盤的結構和原理

軟件鍵盤驅動編譯、下載、調試按鍵及鍵盤鍵盤:由若干個按鍵組成的開關矩陣,是實現(xiàn)人機對話或人機通信的常用工具。根據(jù)按鍵的識別方式分:編碼鍵盤

鍵的識別由專用的硬件譯碼器實現(xiàn),并產(chǎn)生鍵編號或鍵值,如BCD碼鍵盤、ASCII碼鍵盤,非編碼鍵盤只提供按鍵開關的行列矩陣,按鍵的識別、鍵碼的確定以及去抖動等功能由軟件完成按鍵開關:機械彈性開關,機械開關在閉合及斷開瞬間均伴隨有一連串的抖動

,時間一般為

5~10ms。鍵盤掃描控制方式

程序控制方式:鍵盤處理程序固定在主程序的某個程序段。特點:對CPU工作影響小應考慮鍵盤處理程序運行間隔周期不能太長,否則影響對鍵盤輸入響應的及時性。

定時控制掃描方式:利用定時/計數(shù)器每隔一段時間產(chǎn)生定時中斷,CPU響應中斷后對鍵盤進行掃描。特點:采用定時/計數(shù)器定時控制掃描間隔。定時時間不能太長,否則影響對鍵盤輸入響應的及時性。

中斷控制方式:利用外部中斷源,響應鍵盤輸入信號。特點:能及時處理鍵盤輸入,又能提高CPU運行效率要占用一個中斷資源。獨立式未編碼鍵盤接口

獨立式鍵盤:各按鍵相互獨立地接通一條輸入數(shù)據(jù)線。

圖中采用中斷響應、軟件查詢方式:輸入線平時為高電平;若有任意鍵按下時,輸入線為低電平。優(yōu)點:電路、編程簡單

缺點:按鍵較多時,占用較多I/O口線。K0K1K2例、用查詢方式編寫獨立式按鍵程序#include<reg51.h>unsignedcharkey_value;voidmain(void){while(1){

key_value=P1&0x07; //讀P1.0-P1.2的狀態(tài) switch(key_value) {

case0x06:…;break; //K0按下

case0x05:…;break; //K1按下

case0x03:…;break; //K2按下

default:;break; }}}按鍵識別按鍵的識別:采用掃描法(1)第一步,判斷有無鍵按下?從列線輸出口輸出全掃描字0000,讀入行線輸入口的狀態(tài)。沒鍵按下,行線全為1有鍵按下,行線必有一根為0若有鍵按下,進行列掃描,判斷是那一列發(fā)生,輸出列掃描字。列掃描是對要掃描的列送0,其它列送1,依次為0111、1011、1101、1110。每掃描一列讀入行線狀態(tài),全1則不在該列,有0則必在該列。(2)第二步,判斷哪列鍵按下?(3)逐行檢查是哪根行線為0,即可查出是哪個鍵按下,按鍵出現(xiàn)在哪行哪列。(4)按鍵編碼每個按鍵要給一個編號,例如4×4鍵盤的16個鍵編號為0~15,對按鍵進行的編碼稱為鍵值。

有許多按鍵編碼方法,如高4位為行號,低4位為列號,合成為一個字節(jié)。例如:第2行第0列的鍵,編碼為20H(00100000B)--我們不用。

也可以采用順序編號的方法,使鍵值與鍵號一致,其計算公式:

鍵值=行首值+列號(5)判斷按鍵釋放得到鍵值后應判斷按鍵是否釋放,否則有可能識別為兩次按鍵,引起誤操作。如右圖4×4鍵盤:行首值為0、4、8、12

列號為0,1,2,3即:第0行行首值為0第1行行首值為4第2行行首值為8第3行行首值為12例:若第2行第1列發(fā)生按鍵則鍵值為:8+1=9LAB6000實驗箱怎樣呢?注意:該圖4條行線實際對應D3~D0,圖示為D5~D2觀察上面電路,LAB6000也是矩陣鍵盤,4X6結構,行讀入地址為KEY_IN(0x001h)列輸出地址與LED數(shù)碼管公用,為OUTBIT(0x002h)

所以仿照上面原理,可以對其進行鍵盤掃描。#include<reg51.h>#defineLEDLen6unsignedcharxdataOUTBIT_at_0x8002;//顯示的位碼地址;鍵盤的列線地址;unsignedcharxdataOUTSEG_at_0x8004;//顯示的段碼地址;unsignedcharxdataIN_at_0x8001;//鍵盤讀入口unsignedchardis_buf[LEDLen];//顯示緩沖unsignedcharconstdis_tab[]={//八段管顯示碼0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};voidmDelay(unsignedintDelay){unsignedinti;for(;Delay>0;Delay--){for(i=0;i<114;i++){;}}}voidDisplayLED(){unsignedchardatai;unsignedchardataPos;unsignedchardataLED;Pos=0x20;//從左邊開始顯示for(i=0;i<LEDLen;i++){OUTBIT=0;//關所有八段管LED=dis_tab[dis_buf[i]];OUTSEG=LED;OUTBIT=Pos;//顯示一位八段管mDelay(1);Pos>>=1;//顯示下一位}}unsignedcharconstKeyTable[]={//鍵碼定義0x16,0x15,0x14,0xff,0x13,0x12,0x11,0x10,0x0d,0x0c,0x0b,0x0a,0x0e,0x03,0x06,0x09,0x0f,0x02,0x05,0x08,0x00,0x01,0x04,0x07};unsignedcharTestKey(){OUTBIT=0;//輸出線置為0return(~IN&0x0f);//讀入鍵狀態(tài)(高四位不用)}unsignedcharGetKey(){unsignedcharPos;unsignedchardatai;unsignedchardatak;i=6;Pos=0x20;//找出鍵所在列do{OUTBIT=~Pos;Pos>>=1;k=~IN&0x0f;}while((--i!=0)&&(k==0));//鍵值=列X4+行if(k!=0){i*=4;if(k&2)i+=1;elseif(k&4)i+=2;elseif(k&8)i+=3;OUTBIT=0;domDelay(1);while(TestKey());//等鍵釋放return(KeyTable[i]);//取出鍵碼}elsereturn(0xff);}voidmain(){charkey_val;

while(1){DisplayLED();if(TestKey()){key_val=GetKey()&0x0f;dis_buf[5]=key_val;dis_

溫馨提示

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

評論

0/150

提交評論