|
分享一個(gè)自己寫的匯編矩陣鍵盤子函數(shù),會(huì)以A為出口,返回值為0至16的數(shù)字(0為無(wú)按鍵按下)。這個(gè)子函數(shù)不會(huì)等待用戶松手,會(huì)直接返回,如果要使用,請(qǐng)根據(jù)自己的需求進(jìn)行修改。
附上一個(gè)使用這個(gè)子函數(shù)的小項(xiàng)目。
如有錯(cuò)誤歡迎批評(píng)指正。
單片機(jī)源程序如下:
- ;定義矩陣鍵盤所在端口,低位為行按鍵,高位為列按鍵
- ARRAY DATA P3
- ;按鍵檢測(cè)函數(shù),影響A,R0,R1寄存器
- ARRAY_TEST:
- ;第一次按鍵檢測(cè),無(wú)按下直接結(jié)束
- MOV ARRAY,#0FH
- MOV A,ARRAY
- CJNE A,#0FH,ARRAY_TEST1
- CLR A
- RET
- ARRAY_TEST1:
- ;第二次按鍵檢測(cè),等待5ms進(jìn)行再次檢測(cè),防止誤入
- ACALL DELAY5MS
- MOV ARRAY,#0FH
- MOV A,ARRAY
- CPL A
- ANL A,#0FH
- JNZ SCAN ;確認(rèn)有按鍵按下,開始掃描
- RET
- SCAN:
- ;錄入按下按鍵的行位置
- MOV R1,A
- MOV R0,#5H
- ;由于51單片機(jī)IO口為強(qiáng)下拉,當(dāng)有按鍵按下時(shí),特定的引腳會(huì)無(wú)法變?yōu)楦呶?br />
- MOV ARRAY,#0F0H
- MOV A,ARRAY
- SCAN1:
- RLC A
- DEC R0
- JC SCAN1
- SCAN2:
- MOV A,R1 ;取回行位置
- ;計(jì)算行地址
- CJNE A,#1000B,SCAN3
- RR A
- AJMP SCAN4
- SCAN3:
- CJNE A,#100B,SCAN4
- DEC A
- SCAN4:
- ;計(jì)算按鍵位置
- DEC A
- RL A
- RL A
- ADD A,R0
- RET
復(fù)制代碼 小項(xiàng)目:
- ;定義矩陣鍵盤所在端口,低位為行按鍵,高位為列按鍵
- 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)用矩陣鍵盤檢測(cè)
- JZ MAIN ;當(dāng)無(wú)鍵盤按下跳轉(zhuǎn)到main
- DEC A ;若需要第3個(gè)數(shù)據(jù)只需將指針位移2位,故自減一
- ;輸出
- MOVC A,@A+DPTR
- MOV P0,A
- CLR A
- AJMP MAIN
- ;按鍵檢測(cè)函數(shù),影響A,R0,R1寄存器,
- ;A為出口,返回值為0至16的數(shù)字(0為無(wú)按鍵按下)
- ARRAY_TEST:
- ;第一次按鍵檢測(cè),無(wú)按下直接結(jié)束
- MOV ARRAY,#0FH
- MOV A,ARRAY
- CJNE A,#0FH,ARRAY_TEST1
- CLR A
- RET
- ARRAY_TEST1:
- ;第二次按鍵檢測(cè),等待5ms進(jìn)行再次檢測(cè),防止誤入
- ACALL DELAY5MS
- MOV ARRAY,#0FH
- MOV A,ARRAY
- CPL A
- ANL A,#0FH
- JNZ SCAN ;確認(rèn)有按鍵按下,開始掃描
- RET
- SCAN:
- ;錄入按下按鍵的行位置
- MOV R1,A
- MOV R0,#5H
- ;由于51單片機(jī)IO口為強(qiáng)下拉,當(dāng)有按鍵按下時(shí),特定的引腳會(huì)無(wú)法變?yōu)楦呶?br />
- MOV ARRAY,#0F0H
- MOV A,ARRAY
- SCAN1:
- RLC A
- DEC R0
- JC SCAN1
- SCAN2:
- MOV A,R1 ;取回行位置
- ;計(jì)算行地址
- CJNE A,#1000B,SCAN3
- RR A
- AJMP SCAN4
- SCAN3:
- CJNE A,#100B,SCAN4
- DEC A
- SCAN4:
- ;計(jì)算按鍵位置
- 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è)置的免費(fèi)下載):【免費(fèi)】51單片機(jī)匯編程序分享矩陣鍵盤子函數(shù)資源-CSDN文庫(kù)
|
-
51hei截圖20240511235711.png
(33.19 KB, 下載次數(shù): 44)
下載附件
2024-5-11 23:57 上傳
小項(xiàng)目
-
-
ARRAY.zip
2024-5-12 00:06 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
43.21 KB, 下載次數(shù): 4, 下載積分: 黑幣 -5
Proteus仿真+程序
評(píng)分
-
查看全部評(píng)分
|