矩陣按鍵識(shí)別技術(shù)_第1頁
矩陣按鍵識(shí)別技術(shù)_第2頁
矩陣按鍵識(shí)別技術(shù)_第3頁
矩陣按鍵識(shí)別技術(shù)_第4頁
矩陣按鍵識(shí)別技術(shù)_第5頁
已閱讀5頁,還剩7頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、實(shí)驗(yàn)7 矩陣按鍵識(shí)別技術(shù)          矩陣按鍵部份由16個(gè)輕觸按鍵按照4行4列排列,連接到JP50端口。將行線所接的單片機(jī)的I/O口作為輸出端,而列線所接的I/O口則作為輸入。這樣,當(dāng)按鍵沒有按下時(shí),所有的輸出端都是高電平,代表無鍵按下。行線輸出是低電平,一旦有鍵按下,則輸入線就會(huì)被拉低,這樣,通過讀入輸入線的狀態(tài)就可得知是否有鍵按下了。相關(guān)原理:程序運(yùn)行照片:接線方法:1、用一條8PIN數(shù)據(jù)排線,把矩陣按鍵部份的JP50,接到CPU部份的P1口JP44. 2、接8位數(shù)碼管的數(shù)據(jù)線。將數(shù)碼管部份的數(shù)據(jù)口 JP

2、5接到CPU部份的P0口JP51.3、接8位數(shù)碼管的顯示位線。將數(shù)碼管部份的顯示位口 JP8接到CPU部份的P2口JP52.;本程序?qū)崿F(xiàn)掃描按鍵顯示功能.;分別按16個(gè)鍵盤顯示分別顯示數(shù)字123A456B789C*0#D;鍵盤口P1,數(shù)碼管顯示第二位p21, 數(shù)碼管段位p0口  確定矩陣式鍵盤上何鍵被按下,介紹一種“行掃描法”。行掃描法又稱為逐行(或列)掃描查詢法,是一種最常用的按鍵識(shí)別方法.程序流程圖:     8031單片機(jī)的P1口用作鍵盤I/O口,鍵盤的列線接到P1口的低4位,鍵盤的行線接到P1口的高4位。列線P1.0-P1.3設(shè)置為輸入

3、線,行線P1.4-P.17設(shè)置為輸出線。4根行線和4根列線形成16個(gè)相交點(diǎn)。1、檢測(cè)當(dāng)前是否有鍵被按下。檢測(cè)的方法是P1.4-P1.7輸出全“0”,讀取P1.0-P1.3的狀態(tài),若P1.0-P1.3為全“1”,則無鍵閉合,否則有鍵閉合。2、去除鍵抖動(dòng)。當(dāng)檢測(cè)到有鍵按下后,延時(shí)一段時(shí)間再做下一步的檢測(cè)判斷。3、若有鍵被按下,應(yīng)識(shí)別出是哪一個(gè)鍵閉合。方法是對(duì)鍵盤的行線進(jìn)行掃描。P1.4-P1.7按下述4種組合依次輸出:在每組行輸出時(shí)讀取P1.0-P1.3,若全為“1”,則表示為“0”這一行沒有鍵閉合,否則有鍵閉合。由此得到閉合鍵的行值和列值,然后可采用計(jì)算法或查表法將閉合鍵的行值和列值轉(zhuǎn)換成所定義

4、的鍵值。4、為了保證鍵每閉合一次CPU僅作一次處理,必須去除鍵釋放時(shí)的抖動(dòng)。匯編語言參考程序:org 0000hajmp mainorg 0080hmain:mov dptr,#tab ;將表頭放入DPTRlcall key ;調(diào)用鍵盤掃描程序movc a,a+dptr ;查表后將鍵值送入ACCmov p0,a ;將Acc值送入P0口CLR P2.1 ;開顯示ljmp main ;返回反復(fù)循環(huán)顯示KEY: LCALL KS ;調(diào)用檢測(cè)按鍵子程序JNZ K1 ;有鍵按下繼續(xù)LCALL DELAY2 ;無鍵按調(diào)用延時(shí)去抖AJMP KEY ;返回繼續(xù)檢測(cè)按鍵K1: LCALL DELAY2LCALL

5、 DELAY2 ;有鍵按下延時(shí)去抖動(dòng)LCALL KS ;再調(diào)用檢測(cè)按鍵程序JNZ K2 ;確認(rèn)有按下進(jìn)行下一步AJMP KEY ;無鍵按下返回繼續(xù)檢測(cè)K2: MOV R2,#0EFH ;將掃描值送入 R2暫存MOV R4,#00H ;將第一列值送入R4暫存K3: MOV P1,R2 ;將R2的值送入P1口L6: JB P1.0,L1 ;P1.0等于1跳轉(zhuǎn)到L1MOV A,#00H ;將第一行值送入ACCAJMP LK ;跳轉(zhuǎn)到鍵值處理程序L1: JB P1.1,L2 ;P1.1等于1跳轉(zhuǎn)到L2MOV A,#04H ;將第二行的行值送入ACCAJMP LK ;跳轉(zhuǎn)到鍵值理程序進(jìn)行鍵值處理L2:

6、JB P1.2,L3 ;P1.2等于1跳轉(zhuǎn)到L3MOV A,#08H ;將第三行的行值送入ACCAJMP LK ;跳轉(zhuǎn)到鍵值處理程L3: JB P1.3,NEXT ;P1.3等于1跳轉(zhuǎn)到NEXT處MOV A,#0cH ;將第四行的行值送入ACCLK: ADD A,R4 ;行值與列值相加后的鍵值送入APUSH ACC ;將A中的值送入堆棧暫存K4: LCALL DELAY2 ;調(diào)用延時(shí)去抖動(dòng)程序LCALL KS ;調(diào)用按鍵檢測(cè)程序JNZ K4 ;按鍵沒有松開繼續(xù)返回檢測(cè)POP ACC ;將堆棧的值送入ACCRETNEXT:INC R4 ;將列值加一MOV A,R2 ;將R2的值送入AJNB AC

7、C.7,KEY ;掃描完至KEY處進(jìn)行下一掃描RL A ;掃描未完將A中的值右移一位進(jìn)行下一列的掃描MOV R2,A ;將ACC的值送入R2暫存AJMP K3 ;跳轉(zhuǎn)到K3繼續(xù)KS: MOV P1,#0FH ;將P1口高四位置0低四位值1MOV A,P1 ;讀P1口XRL A,#0FH ;將A中的值與A中的值相異或RET ;子程序返回DELAY2: ;40ms延時(shí)去抖動(dòng)子程序MOV R5,#08HL7: MOV R6,#0FAHL8: DJNZ R6,L8DJNZ R5,L7RETtab:db 28h,34h,28h,34h,0a9h,60h,20h,7ah,20h,21h,61h,74h,3

8、0h,62h,0a2h,7eh;0h0hc9878654a321 輪流顯示鍵盤因?yàn)闊o法表達(dá)*# 就用H表示,B用8表示endc語言參考程序:#include <reg52.h>#include <intrins.h>sbit BEEP = P3 7; /蜂鳴器驅(qū)動(dòng)線unsigned char key;unsigned char code disp_code =/顯示碼數(shù)組0,C,8,A,H,9,6,3,0,8,5,2,H,7,4,10x28,0xa9,0x20,0x30,0x34,0x60,0x21,0x62,0x28,0x20,0x61,0xa2,0x34,0x7a,

9、0x74,0x7e;unsigned char code key_code =/鍵編碼數(shù)組0xee, 0xed, 0xeb, 0xe7, 0xde, 0xdd, 0xdb, 0xd7, 0xbe, 0xbd, 0xbb,0xb7, 0x7e, 0x7d, 0x7b, 0x77;char code SST5163 _at_ 0x003b; /保留仿真器/*延時(shí)子函數(shù)*/void delayms(unsigned int ms)unsigned char t;while (ms-)for (t = 0; t < 114; t+);/*x*0.14MS 延時(shí)子函數(shù)*/void delayus(

10、unsigned char x)unsigned char i;while (x-)for (i = 0; i < 14; i+);/*蜂鳴器驅(qū)動(dòng)子函數(shù)*/void beep()unsigned char i;for (i = 0; i < 250; i+)delayus(6);BEEP = !BEEP; /BEEP取反BEEP = 1; /關(guān)閉蜂鳴器delayms(150); /延時(shí)/*鍵盤掃描子函數(shù)*/unsigned char keyscan()unsigned char scan1, scan2, keycode, j;P1 = 0xf0;scan1 = P1;if (scan1 != 0xf0)/判鍵是否按下delayms(10); /延時(shí)10msscan1 = P1;if (scan1 != 0xf0)/二次判鍵是否按下P1 = 0x0f;scan2 = P1;keycode = scan1 | scan2; /組合成鍵掃描編碼for (j = 0; j < 16; j+)if (keycode = key_codej)/查表得鍵值key = j;return (key); /返回有效鍵值elseP1 = 0xff;return (key = 16); /

溫馨提示

  • 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)論