ORG 0000H
LJMP MAIN
ORG 0003H
LJMP SUM ;上一曲中断
ORG 000BH
LJMP BOF ;播放/暂停
ORG 0013H
LJMP DUM ;下一曲中断
ORG 001BH
LJMP TIMER1
ORG 50H
MAIN: MOV R0,#01H
MOV R1,#00H
MOV R7,#00H
MOV TMOD,#1EH ;置T1为定时工作方式1,T0为计数工作方式2
MOV TCON,#15H ;启动T0、T1
MOV TH0,#0FFH
MOV TL0,#0FFH
MOV IE,#9FH ;开放全部中断
KEYCHECK:MOV A,R0 ;乐曲判断
DEC A
JZ MUSIC1
DEC A
JZ MUSIC2
DEC A
JZ MUSIC3
SJMP KEYCHECK
MUSIC1: LCALL XIAN
LCALL DELAY0
MOV DPTR,#TONE1
LCALL LOP
SJMP MUSIC1
MUSIC2: LCALL XIAN
LCALL DELAY0
MOV DPTR,#TONE2
LCALL LOP
SJMP MUSIC2
MUSIC3: LCALL XIAN
LCALL DELAY0
MOV DPTR,#TONE3
LCALL LOP
SJMP MUSIC3
LOP: CJNE R1,#00H,LOOP5 ;判断是否播放
CLR P0.0
CLR TR1
CJNE R7,#01H,LOOP4 ;暂停过程中的标识符判断
MOV R7,#00H
SJMP KEYCHECK
LOOP4: LJMP LOP
LOOP5: SETB P0.0
MOV A,#0
MOVC A,@A+DPTR
JZ QUIT
CJNE A,#01H,LOOP6
CLR TR1
INC DPTR
LJMP LOOP7
LOOP6: MOV R5,A
MOV TH1,A
INC DPTR
MOV A,#0
MOVC A,@A+DPTR
MOV R6,A
MOV TL1,R6
SETB TR1
LOOP7: INC DPTR
MOV A,#0
MOVC A,@A+DPTR
MOV R2,A
LOOP1: MOV R3,#80H
LOOP2: MOV R4,#0FFH
LOOP3: DJNZ R4,LOOP3
DJNZ R3,LOOP2
DJNZ R2,LOOP1
INC DPTR
LOOP8: CJNE R7,#01H,GOON ;播放中的标识符判断
MOV R7,#00H
SJMP KEYCHECK
GOON: LJMP LOP
QUIT: RET
TIMER1: PUSH DPH ;定时器1中断子程序
PUSH DPL
PUSH ACC
CPL P1.7
MOV TH1,R5
MOV TL1,R6
SETB TR1
POP ACC
POP DPL
POP DPH
RETI
DELAY0: MOV R2,#10
DELAY3: MOV R3,#200
DELAY2: MOV R4,#125
DELAY1: DJNZ R4,DELAY1
DJNZ R3,DELAY2
DJNZ R2,DELAY3
RET
SUM: CJNE R0,#01H,SUM1 ;上一曲INT0中断子程序
MOV R0,#04H
SUM1: DEC R0
INC R7
RETI
DUM: CJNE R0,#03H,DUM1 ;下一曲INT1中断子程序
MOV R0,#00H
DUM1: INC R0
INC R7
RETI
BOF: INC R1 ;播放暂停T0子程序
CJNE R1,#02H,BOF1
MOV R1,#00H
RETI
BOF1: RETI
XIAN: CLR TR1 ;显示子程序
MOV A,R0
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV P2,A
CLR P0.0
RET
TABLE: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
TONE1: DB 0FCH,2FH,4,0FCH,99H,4 ;两只老虎
DB 0FCH,0F8H,4 ,0FCH,2FH,4
DB 0FCH,2FH,4,0FCH,99H,4
DB 0FCH,0F8H,4,0FCH,2FH,4
DB 0FCH,0F8H,4,0FDH,22H,4
DB 0FDH,73H,8,0FCH,0F8H,4
DB 0FDH,22H,4,0FDH,73H,8
DB 0FDH,73H,3,0FDH,0BAH,1
DB 0FDH,73H,3,0FDH,22H,1
DB 0FCH,0F8H,4,0FCH,2FH,4
DB 0FDH,73H,3,0FDH,0BAH,1
DB 0FDH,73H,3,0FCH,22H,1
DB 0FCH,0F8H,4,0FCH,2FH,4
DB 0FCH,2FH,4,0FDH,73H,4
DB 0FCH,2FH,8,0FCH,2FH,4
DB 0FDH,73H,4,0FCH,2FH,8
DB 0,0,0
TONE2: DB 0FDH,0BAH,2,0FDH,0FAH,2 ;天空之城
DB 0FEH,17H,6,0FDH,0FAH,2
DB 0FEH,17H,4,0FEH,7CH,4
DB
0FDH,0FAH,12,0FCH,0F8H,2
DB 0FCH,0F8H,2,0FDH,0BAH,6
DB 0FDH,73H,2,0FDH,0BAH,4
DB 0FEH,17H,4,0FDH,73H,8
DB 01H,0,4,0FCH,0F8H,2
DB 0FCH,0F8H,2,0FDH,22H,6
DB 0FCH,0F8H,2,0FDH,22H,2
DB 0FEH,17H,6,0FCH,0F8H,8
DB 01H,0,2,0FEH,17H,2
DB 0FEH,17H,2,0FEH,17H,2
DB 0FDH,0FAH,6,0FDH,22H,2
DB 0FDH,22H,4,0FDH,0FAH,4
DB 0FDH,0FAH,8,01H,0,4
DB 0FDH,0BAH,2,0FDH,0FAH,2
DB 0FEH,17H,6,0FDH,0FAH,2
DB 0FEH,17H,4,0FEH,7CH,4
DB 0FDH,0FAH,8,01H,0,4
DB 0FCH,0F8H,2,0FCH,0F8H,2
DB 0FDH,0BAH,6,0FDH,73H,2
DB 0FDH,0BAH,4,0FEH,17H,4
DB 0FDH,73H,12,01H,0,2
DB 0FCH,0F8H,2,0FDH,22H,4
DB 0FEH,17H,2,0FDH,0FAH,2
DB 0FDH,0FAH,4,0FEH,17H,4
DB 0FEH,4CH,2,0FEH,4CH,2
DB 0FEH,7CH,2,0FEH,17H,4
DB 01H,0,4,0FEH,17H,4
DB 0FDH,0FAH,2,0FDH,0BAH,2
DB 0FDH,0BAH,2,0FDH,0FAH,4
DB 0FDH,73H,4,0FDH,0BAH,8
DB 01H,0,4,0FEH,17H,2
DB 0FEH,4CH,2,0FEH,7CH,6
DB 0FEH,4CH,2,0FEH,7CH,4
DB 0FEH,0B9H,4,0FEH,4CH,8
DB 01H,0,4,0FDH,73H,2
DB 0FDH,73H,2,0FEH,17H,2
DB 0FDH,0FAH,2,0FEH,17H,4
DB 0FEH,7CH,4,0FEH,7CH,8
DB 01H,0,4,01H,0,4
DB 0FDH,0BAH,2,0FDH,0FAH,2
DB 0FEH,17H,4,0FDH,0FAH,4
DB 0FEH,4CH,2,0FEH,4CH,2
DB 0FEH,17H,6,0FDH,73H,2
DB 0FDH,73H,4,01H,0,4
DB 0FEH,91H,4,0FEH,7CH,4
DB 0FEH,4CH,4,0FEH,17H,4
DB 0FEH,7CH,16,0FEH,7CH,8
DB 01H,0,4,0FEH,7CH,4
DB 0FEH,0DDH,8,0FEH,0B9H,4
DB 0FEH,0B9H,4,0FEH,7CH,2
DB 0FEH,4CH,2,0FEH,17H,4
DB 01H,0,2,0FEH,17H,2
DB 0FEH,4CH,4,0FEH,17H,2
DB 0FEH,4CH,2,0FEH,4CH,2
DB 0FEH,0B9H,4,0FEH,7CH,8
DB 01H,0,4,0FEH,7CH,4
DB 0FEH,0DDH,8,0FEH,0B9H,8
DB 0FEH,7CH,2,0FEH,4CH,2
DB 0FEH,17H,8,01H,0,2
DB 0FEH,17H,2,0FEH,4CH,4
DB 0FEH,17H,2,0FEH,4CH,2
DB 0FEH,4CH,2,0FDH,0FAH,4
DB 0FDH,0BAH,8,01H,0,4
DB 0FDH,0BAH,2,0FDH,0FAH,2
DB 0FDH,0BAH,16,0,0,0
TONE3: DB 0FDH,73H,1,0FDH,0BAH,2 ;找朋友
DB 0FDH,73H,2,0FDH,0BAH,2
DB 0FDH,73H,2,0FDH,0BAH,2
DB 0FDH,73H,4,0FDH,73H,2
DB 0FEH,17H,2,0FDH,0FAH,2
DB 0FDH,0BAH,2,0FDH,73H,4
DB 0FCH,0F8H,4,0FDH,73H,2
DB 0FDH,73H,2,0FCH,0F8H,2
DB 0FDH,22H,2,0FDH,73H,2
DB 0FDH,73H,2,0FCH,0F8H,4
DB 0FCH,2FH,2,0FDH,22H,2
DB 0FCH,0F8H,2,0FCH,99H,2
DB 0FCH,2FH,2,0FCH,99H,2
DB 0FCH,2FH,4,0,0,0
END
程序清单
T5HZ EQU 30H
T7HZ EQU 31H
T05SA EQU 32H
T05SB EQU 33H
FLAG BIT 00H
STOP BIT 01H
SP1 BIT P3.6
ORG 00H
LJMP START
ORG 0BH
LJMP INT_T0
START:MOV TMOD,#02H
MOV TH0, #06H
MOV TL0, #06H
SETB ET0
SETB EA
NSP:JB SP1,NSP
LCALL DELY10MS
JB SP1, NSP
SETB TR0
MOV T5HZ, #00H
MOV T7HZ, #00H
MOV T05SA, #00H
MOV T05SB, #00H
CLR FLAG
CLR STOP
JNB STOP, $
LJMP NSP
DELY10MS:MOV R6,#20H
D1: MOV R7, #248
DJNZ R7,$
DJNZ R6,D1
RET
INT_T0:INC T05SA
MOV A,T05SA
CJNE A,#100H,NEXT
MOV T05SA,#00H
INC T05SB
MOV A,T05SB
CJNE A,#20H,NEXT
MOV T05SB,#00H
JB FLAG,STR
CPL FLAG
LJMP NEXT
STR: SETB STOP
CLR TR0
LJMP DONE
NEXT:JB FLAG,S5HZ
INC T7HZ
MOV A,T7HZ
CJNE A,#03H,DONE
MOV T7HZ,#00H
CPL P1.0
LJMP DONE
S5HZ:INC T5HZ
MOV A,T5HZ
CJNE A,#04H,DONE
MOV T5HZ,#00H
CPL P1.0
LJMP DONE
DONE:RETI
END下载本文