分享一個自己寫的匯編矩陣鍵盤子函數(shù),會以A為出口,返回值為0至16的數(shù)字(0為無按鍵按下)。這個子函數(shù)不會等待用戶松手,會直接返回,如果要使用,請根據(jù)自己的需求進行修改。
附上一個使用這個子函數(shù)的小項目。
如有錯誤歡迎批評指正。
單片機源程序如下:
- ;定義矩陣鍵盤所在端口,低位為行按鍵,高位為列按鍵
- ARRAY DATA P3
- ;按鍵檢測函數(shù),影響A,R0,R1寄存器
- ARRAY_TEST:
- ;第一次按鍵檢測,無按下直接結(jié)束
- MOV ARRAY,#0FH
- MOV A,ARRAY
- CJNE A,#0FH,ARRAY_TEST1
- CLR A
- RET
- ARRAY_TEST1:
- ;第二次按鍵檢測,等待5ms進行再次檢測,防止誤入
- ACALL DELAY5MS
- MOV ARRAY,#0FH
- MOV A,ARRAY
- CPL A
- ANL A,#0FH
- JNZ SCAN ;確認有按鍵按下,開始掃描
- RET
- SCAN:
- ;錄入按下按鍵的行位置
- MOV R1,A
- MOV R0,#5H
- ;由于51單片機IO口為強下拉,當有按鍵按下時,特定的引腳會無法變?yōu)楦呶?br />
- MOV ARRAY,#0F0H
- MOV A,ARRAY
- SCAN1:
- RLC A
- DEC R0
- JC SCAN1
- SCAN2:
- MOV A,R1 ;取回行位置
- ;計算行地址
- CJNE A,#1000B,SCAN3
- RR A
- AJMP SCAN4
- SCAN3:
- CJNE A,#100B,SCAN4
- DEC A
- SCAN4:
- ;計算按鍵位置
- DEC A
- RL A
- RL A
- ADD A,R0
- RET
復(fù)制代碼 小項目:
- ;定義矩陣鍵盤所在端口,低位為行按鍵,高位為列按鍵
- ARRAY DATA P3
-
- ORG 00H
- AJMP START
- ORG 100H
- START:
- ;初始化
- MOV DPTR,#TAB ;初始化要顯示的內(nèi)容
- MOV P0,#0FFH ;初始化顯示端口
- MOV SP,#30H ;初始化堆棧地址
- MAIN:
- ACALL ARRAY_TEST ;調(diào)用矩陣鍵盤檢測
- JZ MAIN ;當無鍵盤按下跳轉(zhuǎn)到main
- DEC A ;若需要第3個數(shù)據(jù)只需將指針位移2位,故自減一
- ;輸出
- MOVC A,@A+DPTR
- MOV P0,A
- CLR A
- AJMP MAIN
- ;按鍵檢測函數(shù),影響A,R0,R1寄存器,
- ;A為出口,返回值為0至16的數(shù)字(0為無按鍵按下)
- ARRAY_TEST:
- ;第一次按鍵檢測,無按下直接結(jié)束
- MOV ARRAY,#0FH
- MOV A,ARRAY
- CJNE A,#0FH,ARRAY_TEST1
- CLR A
- RET
- ARRAY_TEST1:
- ;第二次按鍵檢測,等待5ms進行再次檢測,防止誤入
- ACALL DELAY5MS
- MOV ARRAY,#0FH
- MOV A,ARRAY
- CPL A
- ANL A,#0FH
- JNZ SCAN ;確認有按鍵按下,開始掃描
- RET
- SCAN:
- ;錄入按下按鍵的行位置
- MOV R1,A
- MOV R0,#5H
- ;由于51單片機IO口為強下拉,當有按鍵按下時,特定的引腳會無法變?yōu)楦呶?br />
- MOV ARRAY,#0F0H
- MOV A,ARRAY
- SCAN1:
- RLC A
- DEC R0
- JC SCAN1
- SCAN2:
- MOV A,R1 ;取回行位置
- ;計算行地址
- CJNE A,#1000B,SCAN3
- RR A
- AJMP SCAN4
- SCAN3:
- CJNE A,#100B,SCAN4
- DEC A
- SCAN4:
- ;計算按鍵位置
- DEC A
- RL A
- RL A
- ADD A,R0
- RET
- TAB:
- DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,88H,83H,0C6H,0A1H,86H,8EH
-
- DELAY5MS: ;@11.0592MHz
- PUSH 30H
- PUSH 31H
- MOV 30H,#9
- MOV 31H,#239
- NEXT:
- DJNZ 31H,NEXT
- DJNZ 30H,NEXT
- POP 31H
- POP 30H
- RET
- END
復(fù)制代碼 如果不想花積分,可以在csdn上下載(我設(shè)置的免費下載):【免費】51單片機匯編程序分享矩陣鍵盤子函數(shù)資源-CSDN文庫
|