ORG 0000H MAIN: MOV R3,#F7H ; 掃描初始值 MOV R1,#00H ; 取碼指標 SCAN1: MOV A,R3 ; 開始掃描 MOV P1,A ; 將掃描值輸出到 P1 MOV A,P1 ; 讀入 P1 判斷是否有按下 MOV R4,A ; 存到 R4, 判斷是否放開 SETB C ; C=1 MOV R5,#04H ; 掃描 P14~P17 L1: RLC A ; 將按鍵值左移一位元 JNC KEYIN ; 若 C=0, 有按, 執行 KEYIN INC R1 ; 將指標值加 1, 繼續掃描下一行 DJNZ R5,L1
nbsp: ; 掃描四行
MOV A,R3 ; 載入掃描值 SETB C ; C=1 RRC A ; 掃描下一列(P13~P10) MOV R3,A ; 存回掃描值 JC SCAN1 ; C=1, 尚未完成掃描 RET ; 結束鍵盤掃描, 回到 Main Program
KEYIN: MOV R7,#10 ; 消除彈跳 D2: MOV R6,#248 DJNZ R6,$ DJNZ R7,D2 D3: MOV A,P1 ; 讀入 P1 XRL A,R4 JZ D3
MOV A,R1 MOV DPTR,#TABLE MOVC A,@A+DPTR MOV P0,A TABLE: DB 0c0h,0f9h,0a4h,0b0h,099h ;0-4 DB 092h,082h,0f8h,080h,090h ;5-9 DB 088h,083h,0a7h,0a1h,086h ;A-E DB 08eh ;F end 這個編譯的時候總出現TABLE 那兒重復定義的錯誤 不知道哪兒的問題... |