ORG 00H ;程式起始位址00H RUN: MOV R7,#0 MOV R2,#250 DL1: CALL BEGIN DJNZ R2,DL1 MOV R2,#250 MOV A,R7 ADD A,#8 MOV R7,A CJNE R7,#32,DL1 AJMP RUN BEGIN: MOV A,R7 MOV R0,A ;資料碼指標初值 MOV R3,#8 ;資料碼總數 MOV R4,#0 ;掃描碼指標初值 ;======================================================= SCAN: MOV DPTR,#COLUMN ;讀取掃描碼 MOV A,R4 ; MOVC A,@A+DPTR ; MOV P2,A ;輸出至埠2 INC R4 ;掃描碼+1 ;======================================================= MOV DPTR,#MESSAGE ;讀取資料碼 MOV A,R0 ; MOVC A,@A+DPTR ; MOV P0,A ;輸出至埠0 ACALL DELAY ; INC R0 ;資料碼+1 MOV A,#11111111B ;遮沒 MOV P0,A ;輸出至埠0 DJNZ R3,SCAN ;------------------------------- RET ;======================================================= DELAY: MOV R5,#20 ;延遲副程式 T5: MOV R6,#25 DJNZ R6,$ DJNZ R5,T5 RET ;======================================================= COLUMN: ;掃描碼儲存起始位址 DB #01111111B DB #10111111B DB #11011111B DB #11101111B DB #11110111B DB #11111011B DB #11111101B DB #11111110B ;======================================================= MESSAGE: ;資料碼儲存起始位址 DB #00000000B DB #10111111B DB #11011111B DB #11101111B DB #11110111B DB #11111011B DB #11111101B DB #00000000B DB #10000001B DB #01111110B DB #01111110B DB #01111110B DB #01111110B DB #01111110B DB #01111110B DB #11111111B DB #01111111B DB #10111111B DB #11011111B DB #11100000B DB #11100000B DB #11011111B DB #10111111B DB #01111111B DB #00000001B DB #11111110B DB #11111110B DB #11111110B DB #11111110B DB #11111110B DB #00000001B DB #11111111B RET ;======================================================= END