;鍵盤測試程式 KB EQU P0 KB_BUF EQU 30H AGAIN: MOV R4,#4 MOV KB_BUF,#11111110B ;掃描訊號 NEXT: MOV KB,KB_BUF ;送至鍵盤 MOV A,KB ;讀回鍵盤訊號 ANL A,#11110000B ;將後4位元清為0 CJNE A,#11110000B,RECHECK ;判斷是否按鍵盤(前4位元有不為0的情況) MOV A,KB_BUF ;若無則將KB_BUF內的資料左旋 RL A ; MOV KB_BUF,A ;準備掃描下一行 DJNZ R4,NEXT ;R4內的資料減一,判斷是否掃瞄4次 JMP AGAIN ;重新開始掃描 RECHECK: MOV R5,#3 ;延遲,除彈跳 CALL DELAY MOV A,KB ;重新讀回按鍵訊號 ANL A,#11110000B CJNE A,#11110000B,KEY_IN ;判斷是否按鍵盤 JMP AGAIN ;若無則為彈跳訊號, 重新開始掃描 KEY_IN: MOV A,KB ;讀回鍵盤訊號 MOV P2,A ;將按鍵值送到P2的LED顯示 WAIT: MOV A,KB ;重新讀回按鍵訊號 ANL A,#11110000B CJNE A,#11110000B,WAIT ;判斷按鍵是否放開 JMP AGAIN DELAY: MOV R6,#100 DEL: MOV R7,#100 DJNZ R7,$ DJNZ R6,DEL DJNZ R5,DELAY RET END