;DIAN ZI QIN 电子琴
SPK EQU P1.0
FKEY EQU 20H.0
DI EQU 71H
GAO EQU 72H
KEY_NO EQU 73H
NO EQU 74H
TC EQU 75H
OUTBIT EQU 08002H
OUTSEG EQU 08004H
IN EQU 08001H
ORG 0000H
JMP BEGIN
ORG 0BH
JMP TO_INT
BEGIN:
MOV TMOD,#00000000B
MOV IE ,#10000010B
MOV R4,#1
MOV R3,#1
CALL PLAY
MOV R4,#2
MOV R3,#1
CALL PLAY
JMP RUN
JMP $
PLAY:
CALL LOAD_VALUE
CALL SOUND_ON
PL1:
MOV R5,#30
CALL DELAY
DJNZ R3,PL1
CALL SOUND_OFF
MOV R5,#3
CALL DELAY
RET
PLAY_SONG1:
MOV TC,#0
PA0:
MOV DPTR,#SONG1
MOV A,TC
MOVC A,@A+DPTR
MOV R4,A
CJNE A,#0FFH,PA1
RET
PA1:
MOV DPTR,#LEN
MOV A,TC
MOVC A,@A+DPTR
MOV R3,A
CALL PLAY
INC TC
JMP PA0
RET
PLAY_SONG2:
MOV TC,#0
PB0:
MOV DPTR,#SONG2
MOV A,TC
MOVC A,@A+DPTR
MOV R4,A
CJNE A,#0FFH,PB1
RET
PB1:
MOV DPTR,#LEN
MOV A,TC
MOVC A,@A+DPTR
MOV R3,A
CALL PLAY
INC TC
JMP PB0
RET
SOUND_ON:
SETB TR0
RET
SOUND_OFF:
CLR TR0
RET
LOAD_VALUE:
MOV DPTR,#HI_LIST
MOV A,R4
MOVC A,@A+DPTR
MOV GAO,A
MOV DPTR,#LO_LIST
MOV A,R4
MOVC A,@A+DPTR
MOV DI,A
RET
TO_INT:
MOV TL0,DI
MOV TH0,GAO
CPL SPK
RETI
HI_LIST:
DB 0,226,229,232,233,236,238,240
LO_LIST:
DB 0,4,13,10,20,3,8,6
SONG1: DB 1,2,3,4,5,6,7,0FFH
SONG2: DB 7,6,5,4,3,2,1,0FFH
LEN: DB 2,2,2,2,2,2,2,0FFH
DELAY:
MOV R6,#50
D1:MOV R7,#50
DJNZ R7,$
DJNZ R6,D1
DJNZ R5,DELAY
RET
TABLE_DIG:
DB 16H,15H,14H,0FFH
DB 13H,12H,11H,10H
DB 0DH,0CH,09H,0AH
DB 0EH,03H,06H,0FH
DB 08H,02H,05H,0BH
DB 00H,01H,04H,07H
SCAN:
MOV DPTR ,#OUTBIT
MOV A,#0
MOVX @DPTR,A
MOV DPTR,#IN
MOVX A,@DPTR
CPL A
ANL A,#0FH
RET
GET_KEY:
MOV DPTR,#OUTBIT
MOV P2,DPH
MOV R0,#LOW(IN)
MOV R1,#00100000B
MOV R2,#6
KLOOP:
MOV A,R1
CPL A
MOVX @DPTR,A
CPL A
RR A
MOV R1,A
MOVX A,@R0
CPL A
ANL A,#0FH
JNZ GOON1
DJNZ R2,KLOOP
MOV R2,#0FFH
SJMP EXIT
GOON1:
MOV R1,A
MOV A,R2
DEC A
RL A
RL A
MOV R2,A
MOV A,R1
MOV R1,#4
LOOPC:
RRC A
JC EXIT
INC R2
DJNZ R1,LOOPC
EXIT:
MOV A,R2
MOV DPTR,#TABLE_DIG
MOVC A,@A+DPTR
MOV R2,A
MOV KEY_NO,A
RET
SO:
MOV R3,#1
CALL PLAY
RET
SOP:
CJNE A,#1,A1
MOV R4,#1
CALL SO
RET
A1:
CJNE A,#2,A2
MOV R4,#2
CALL SO
RET
A2:
CJNE A,#3,A3
MOV R4,#3
CALL SO
RET
A3:
CJNE A,#4,A4
MOV R4,#4
CALL SO
RET
A4:
CJNE A,#5,A5
MOV R4,#5
CALL SO
RET
A5:
CJNE A,#6,A6
MOV R4,#6
CALL SO
RET
A6:
CJNE A,#7,A7
MOV R4,#7
CALL SO
RET
A7:
CJNE A,#0FH,A8
CALL PLAY_SONG1
RET
A8:
CJNE A,#0BH,A9
CALL PLAY_SONG2
RET
A9:
RET
RUN:
LOOP:
CALL SCAN
JZ LOOP
CALL GET_KEY
MOV A,KEY_NO
CALL SOP
LJMP LOOP
END
温馨提示:答案为网友推荐,仅供参考