欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標題: 51單片機匯編程序分享 矩陣鍵盤(線反轉法) [打印本頁]

作者: SkylarGattino    時間: 2024-5-12 00:11
標題: 51單片機匯編程序分享 矩陣鍵盤(線反轉法)
分享一個自己寫的匯編矩陣鍵盤子函數,會以A為出口,返回值為0至16的數字(0為無按鍵按下)。這個子函數不會等待用戶松手,會直接返回,如果要使用,請根據自己的需求進行修改。
附上一個使用這個子函數的小項目。
如有錯誤歡迎批評指正。

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

  3. ;按鍵檢測函數,影響A,R0,R1寄存器
  4. ARRAY_TEST:
  5.         ;第一次按鍵檢測,無按下直接結束
  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口為強下拉,當有按鍵按下時,特定的引腳會無法變為高位
  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
復制代碼
小項目:
  1. ;定義矩陣鍵盤所在端口,低位為行按鍵,高位為列按鍵
  2. ARRAY DATA P3
  3.         
  4. ORG 00H
  5.         AJMP START
  6. ORG 100H
  7. START:
  8. ;初始化
  9.         MOV DPTR,#TAB                ;初始化要顯示的內容
  10.         MOV P0,#0FFH                ;初始化顯示端口
  11.         MOV SP,#30H                        ;初始化堆棧地址
  12. MAIN:
  13.         ACALL ARRAY_TEST        ;調用矩陣鍵盤檢測
  14.         JZ MAIN                                ;當無鍵盤按下跳轉到main
  15.         DEC A                                ;若需要第3個數據只需將指針位移2位,故自減一
  16.         ;輸出
  17.         MOVC A,@A+DPTR
  18.         MOV P0,A
  19.         CLR A
  20.         AJMP MAIN
  21. ;按鍵檢測函數,影響A,R0,R1寄存器,
  22. ;A為出口,返回值為0至16的數字(0為無按鍵按下)
  23. ARRAY_TEST:
  24.         ;第一次按鍵檢測,無按下直接結束
  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口為強下拉,當有按鍵按下時,特定的引腳會無法變為高位
  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
復制代碼
如果不想花積分,可以在csdn上下載(我設置的免費下載):【免費】51單片機匯編程序分享矩陣鍵盤子函數資源-CSDN文庫

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

小項目

小項目

ARRAY.zip

43.21 KB, 下載次數: 4, 下載積分: 黑幣 -5

Proteus仿真+程序


作者: lijn    時間: 2024-8-2 13:03
謝謝分享,下載學習。




歡迎光臨 (http://m.raoushi.com/bbs/) Powered by Discuz! X3.1