找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1475|回復(fù): 1
打印 上一主題 下一主題
收起左側(cè)

51單片機匯編程序分享 矩陣鍵盤(線反轉(zhuǎn)法)

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:1114132 發(fā)表于 2024-5-12 00:11 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
分享一個自己寫的匯編矩陣鍵盤子函數(shù),會以A為出口,返回值為0至16的數(shù)字(0為無按鍵按下)。這個子函數(shù)不會等待用戶松手,會直接返回,如果要使用,請根據(jù)自己的需求進行修改。
附上一個使用這個子函數(shù)的小項目。
如有錯誤歡迎批評指正。

單片機源程序如下:
  1. ;定義矩陣鍵盤所在端口,低位為行按鍵,高位為列按鍵
  2. ARRAY DATA P3

  3. ;按鍵檢測函數(shù),影響A,R0,R1寄存器
  4. ARRAY_TEST:
  5.         ;第一次按鍵檢測,無按下直接結(jié)束
  6.         MOV ARRAY,#0FH
  7.         MOV A,ARRAY
  8.         CJNE A,#0FH,ARRAY_TEST1
  9.         CLR A
  10.         RET
  11. ARRAY_TEST1:
  12.         ;第二次按鍵檢測,等待5ms進行再次檢測,防止誤入
  13.         ACALL DELAY5MS
  14.         MOV ARRAY,#0FH
  15.         MOV A,ARRAY
  16.         CPL A
  17.         ANL A,#0FH
  18.         JNZ SCAN                ;確認有按鍵按下,開始掃描
  19.         RET
  20. SCAN:
  21.         ;錄入按下按鍵的行位置
  22.         MOV R1,A
  23.         MOV R0,#5H
  24. ;由于51單片機IO口為強下拉,當有按鍵按下時,特定的引腳會無法變?yōu)楦呶?br />
  25.         MOV ARRAY,#0F0H
  26.         MOV A,ARRAY
  27. SCAN1:
  28.         RLC A
  29.         DEC R0
  30.         JC SCAN1
  31. SCAN2:
  32.         MOV A,R1                        ;取回行位置
  33.         ;計算行地址
  34.         CJNE A,#1000B,SCAN3
  35.         RR A
  36.         AJMP SCAN4
  37. SCAN3:
  38.         CJNE A,#100B,SCAN4
  39.         DEC A
  40. SCAN4:
  41.         ;計算按鍵位置
  42.         DEC A
  43.         RL A
  44.         RL A
  45.         ADD A,R0
  46.         RET
復(fù)制代碼
小項目:
  1. ;定義矩陣鍵盤所在端口,低位為行按鍵,高位為列按鍵
  2. ARRAY DATA P3
  3.         
  4. ORG 00H
  5.         AJMP START
  6. ORG 100H
  7. START:
  8. ;初始化
  9.         MOV DPTR,#TAB                ;初始化要顯示的內(nèi)容
  10.         MOV P0,#0FFH                ;初始化顯示端口
  11.         MOV SP,#30H                        ;初始化堆棧地址
  12. MAIN:
  13.         ACALL ARRAY_TEST        ;調(diào)用矩陣鍵盤檢測
  14.         JZ MAIN                                ;當無鍵盤按下跳轉(zhuǎn)到main
  15.         DEC A                                ;若需要第3個數(shù)據(jù)只需將指針位移2位,故自減一
  16.         ;輸出
  17.         MOVC A,@A+DPTR
  18.         MOV P0,A
  19.         CLR A
  20.         AJMP MAIN
  21. ;按鍵檢測函數(shù),影響A,R0,R1寄存器,
  22. ;A為出口,返回值為0至16的數(shù)字(0為無按鍵按下)
  23. ARRAY_TEST:
  24.         ;第一次按鍵檢測,無按下直接結(jié)束
  25.         MOV ARRAY,#0FH
  26.         MOV A,ARRAY
  27.         CJNE A,#0FH,ARRAY_TEST1
  28.         CLR A
  29.         RET
  30. ARRAY_TEST1:
  31.         ;第二次按鍵檢測,等待5ms進行再次檢測,防止誤入
  32.         ACALL DELAY5MS
  33.         MOV ARRAY,#0FH
  34.         MOV A,ARRAY
  35.         CPL A
  36.         ANL A,#0FH
  37.         JNZ SCAN                ;確認有按鍵按下,開始掃描
  38.         RET
  39. SCAN:
  40.         ;錄入按下按鍵的行位置
  41.         MOV R1,A
  42.         MOV R0,#5H
  43. ;由于51單片機IO口為強下拉,當有按鍵按下時,特定的引腳會無法變?yōu)楦呶?br />
  44.         MOV ARRAY,#0F0H
  45.         MOV A,ARRAY
  46. SCAN1:
  47.         RLC A
  48.         DEC R0
  49.         JC SCAN1
  50. SCAN2:
  51.         MOV A,R1                        ;取回行位置
  52.         ;計算行地址
  53.         CJNE A,#1000B,SCAN3
  54.         RR A
  55.         AJMP SCAN4
  56. SCAN3:
  57.         CJNE A,#100B,SCAN4
  58.         DEC A
  59. SCAN4:
  60.         ;計算按鍵位置
  61.         DEC A
  62.         RL A
  63.         RL A
  64.         ADD A,R0
  65.         RET
  66. TAB:
  67. DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,88H,83H,0C6H,0A1H,86H,8EH
  68.         
  69. DELAY5MS:                        ;@11.0592MHz
  70.         PUSH 30H
  71.         PUSH 31H
  72.         MOV 30H,#9
  73.         MOV 31H,#239
  74. NEXT:
  75.         DJNZ 31H,NEXT
  76.         DJNZ 30H,NEXT
  77.         POP 31H
  78.         POP 30H
  79.         RET
  80. END
復(fù)制代碼
如果不想花積分,可以在csdn上下載(我設(shè)置的免費下載):【免費】51單片機匯編程序分享矩陣鍵盤子函數(shù)資源-CSDN文庫

51hei截圖20240511235711.png (33.19 KB, 下載次數(shù): 44)

小項目

小項目

ARRAY.zip

43.21 KB, 下載次數(shù): 4, 下載積分: 黑幣 -5

Proteus仿真+程序

評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏4 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:126422 發(fā)表于 2024-8-2 13:03 | 只看該作者
謝謝分享,下載學(xué)習(xí)。
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表