標(biāo)題: 矩陣鍵盤按鍵時數(shù)碼管無反應(yīng) 請幫我看看哪里出了問題 [打印本頁]

作者: lijinglei234420    時間: 2014-12-5 00:13
標(biāo)題: 矩陣鍵盤按鍵時數(shù)碼管無反應(yīng) 請幫我看看哪里出了問題
做了一個矩陣鍵盤程序,要求是當(dāng)按下對應(yīng)的鍵時數(shù)碼管顯示對應(yīng)的數(shù)值0到F,問題在按下按鍵時數(shù)碼管無反應(yīng)

                   ORG 0000H
                   AJMP MAIN
                   NOP

MAIN:           LCALL KEY
                  LCALL DIS
                   AJMP MAIN

KEY:           LCALL KEYY //調(diào)掃描鍵盤
                   JNZ KEY1          //有鍵按下轉(zhuǎn)KEY1
                   LCALL DEL
                   AJMP MAIN
KEY1:           LCALL DEL  //去抖
                   LCALL KEYY //再檢測
                   JZ MAIN          //無鍵按下轉(zhuǎn)回主程序
KEY0:           JNZ KEY0          //等待釋放按鍵
                   CPL A
                   MOV R3,A
                   LCALL KEY2
KEYY:           MOV P1,#0FH
                   MOV A,P1
                   MOV 30H,A
                   MOV P1,#0F0H
                   MOV A,P1
                   MOV 31H,A
                   ANL 30H,#0FH
                   MOV A,30H
                   ANL 31H,#0F0H
                   ADD A,31H
                   CPL A
                   RET
KEY2:           CJNE R3,#0EEH,KEY3
                   MOV R2,#00H
                   AJMP DIS
KEY3:           CJNE R3,#0EDH,KEY4
                   MOV R2,#01H
                   AJMP DIS
KEY4:           CJNE R3,#0EBH,KEY5
                   MOV R2,#02H
                   AJMP DIS
KEY5:           CJNE R3,#0E7H,KEY6
                   MOV R2,#03H
                   AJMP DIS
KEY6:           CJNE R3,#0DEH,KEY7
                   MOV R2,#04H
                   AJMP DIS
KEY7:           CJNE R3,#0DEH,KEY8
                   MOV R2,#05H
                   AJMP DIS
KEY8:           CJNE R3,#0DEH,KEY9
                   MOV R2,#06H
                   AJMP DIS
KEY18:           AJMP MAIN
KEY9:           CJNE R3,#0DEH,KEY10
                   MOV R2,#07H
                   AJMP DIS
KEY10:           CJNE R3,#0DEH,KEY11
                   MOV R2,#08H
                   AJMP DIS
KEY11:           CJNE R3,#0DEH,KEY12
                   MOV R2,#09H
                   AJMP DIS
KEY12:           CJNE R3,#0DEH,KEY13
                   MOV R2,#0AH
                   AJMP DIS
KEY13:           CJNE R3,#0DEH,KEY14
                   MOV R2,#0BH
                   AJMP DIS
KEY14:           CJNE R3,#0DEH,KEY15
                   MOV R2,#0CH
                   AJMP DIS
KEY15:           CJNE R3,#0DEH,KEY16
                   MOV R2,#0DH
                   AJMP DIS
KEY16:           CJNE R3,#0DEH,KEY17
                   MOV R2,#0EH
                   AJMP DIS
KEY17:           CJNE R3,#0DEH,KEY18
                   MOV R2,#0FH
                   AJMP DIS
DIS:           MOV A,R2
                   MOV DPTR,#DUAN
                   MOVC A,@A+DPTR
           MOV P0,A
                   SETB P2.3
                   CLR P2.3
                   MOV P0,#0FEH
                   SETB P2.2
                   LCALL DEL
                   CLR P2.2
                   RET
DEL:           MOV R7,#50
DEL2:           MOV R6,#100
                   DJNZ R6,$
                   DJNZ R7,DEL2
                   RET

DUAN: DB   3Fh,06h,5Bh,4Fh,66h,6Dh,7Dh,07h,7Fh,6Fh,77h,7Ch,39h,5Eh,79h,71h
                   END

作者: 海哥滄海一笑    時間: 2014-12-7 11:47
#在這里ORG        0030H KEY:        ACALL        KS                ;調(diào)用判斷有無按鍵按下程序?                 JNZ        K1                ;有鍵按下,轉(zhuǎn)移                 ACALL        DELAY                ;無鍵按下,延時10ms                 AJMP        KEY K1:        ACALL        DELAY                ;消除抖動                 ACALL        DELAY                 ACALL        KS                ;再次判斷有無按鍵按下?                 JNZ        K2                ;有鍵按下,轉(zhuǎn)逐列掃描                 AJMP        KEY                ;誤讀鍵,返回 K2:        MOV        R2,#0EFH        ;首列掃描字送R2                 MOV        R4,#00H        ;首列號送R4                 MOV        DPTR,#TAB        ;共陰極代碼首地址 K3:        MOV        P1,R2                ;列掃描字送P1口                 MOV        A,P1                ;讀入P1口狀態(tài)                 JB        ACC.0,LONE        ;判斷第0行有無鍵按下,沒有,轉(zhuǎn)去判斷第一行                 MOV        A,#00H        ;有鍵按下,首鍵號送A=00H                 AJMP        LK                ;轉(zhuǎn)去求鍵號 LONE:        JB        ACC.1,LTWO        ;判斷第1行有無鍵按下,沒有,轉(zhuǎn)去判斷第二行                 MOV        A,#04H        ;有鍵按下,首鍵號送A=04H                 AJMP        LK                ;轉(zhuǎn)去求鍵號 LTWO:        JB        ACC.2,LTHE        ;判斷第2行有無鍵按下,沒有,轉(zhuǎn)去判斷第三行                 MOV        A,#08H        ;有鍵按下,首鍵號送A=08H                 AJMP        LK        快速回復(fù)#
作者: 海哥滄海一笑    時間: 2014-12-7 11:54
個人覺得這個比較好

新建文件夾.zip

3.98 KB, 下載次數(shù): 12

矩陣按鍵匯編


作者: shuimuqing123    時間: 2014-12-7 17:17
我也是菜鳥
作者: lijinglei234420    時間: 2014-12-8 18:57
海哥滄海一笑 發(fā)表于 2014-12-7 11:54
個人覺得這個比較好

我想知道要是用掃描法的話怎么來寫




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