用89C2051播放音乐
; []----------------------------------------------[]
; | |
;
Z0 EQU 255
L1 EQU 0
L2 EQU 1
L3 EQU 2
L4 EQU 3
L5 EQU 4
L6 EQU 5
L7 EQU 6
M1 EQU 7
M2 EQU 8
M3 EQU 9
M4 EQU 10
M5 EQU 11
M6 EQU 12
M7 EQU 13
H1 EQU 14
H2 EQU 15
H3 EQU 16
H4 EQU 17
H5 EQU 18
H6 EQU 19
H7 EQU 20
S1 EQU 21
DELAY EQU 30H ; 节拍的延时
VOICE EQU 31H ; 音符
; Counters
SongFlag equ 36h
sptr equ 37h ;
i equ 38h ;
J equ 39h ;
;interface of Play()
SONGH EQU 40H
SONGL EQU 41H
TIMEH EQU 42H
TIMEL EQU 43H
SIZE EQU 44H
;.....................................................
ORG 0000H
AJMP MAIN
ORG 000BH
AJMP TIMER0
ORG 001BH
AJMP TIMER1
;.....................................................
ORG 0030H
MAIN:
MOV IE,#00H ; Close Interrupt
MOV SP,#60H ; Set Stack Pionter SP = 40h
MOV P1,#00H ; Clean P1
; 初始化 Timers
MOV TMOD, #11H ; 都工作在方式1
SETB EA
SETB ET0
SETB ET1
mov sptr,#0 WAITING:
MOV DPTR,#Song
mov SONGH,dph
mov SONGL,dpl
MOV DPTR,#time
mov TIMEH,dph
mov TIMEL,dpl
mov a , TIMEL
clr c
subb a, SONGL
mov SIZE,a
ACALL Play
MOV DPTR,#SONG_0
mov SONGH,dph
mov SONGL,dpl
MOV DPTR,#CTIME_0
mov TIMEH,dph
mov TIMEL,dpl
mov a , TIMEL
clr c
subb a, SONGL
mov SIZE,a
ACALL Play
MOV DPTR,#SONG_1
mov SONGH,dph
mov SONGL,dpl
MOV DPTR,#CTIME_1
mov TIMEH,dph
mov TIMEL,dpl
mov a , TIMEL
clr c
subb a, SONGL
mov SIZE,a
ACALL Play
AJMP WAITING
Play: ; Input SONGH , SONGL , TIMEH, TIMEL ,SIZE
MOV sptr,#0
CLR TR0
Play_01:
MOV DPH,SONGH
MOV DPL,SONGL
MOV A,sptr
MOVC A,@A+DPTR
MOV VOICE ,A
MOV DPH,TIMEH
MOV DPL,TIMEL
MOV A,sptr
MOVC A,@A+DPTR
MOV DELAY,A
MOV A,#10h
CLR C
SUBB A,DELAY
ANL A,#0FH
INC A
MOV DELAY ,A
INC sptr
MOV A,sptr
CJNE A,SIZE,PLAY_CONTINUE
MOV P1,#0
RET
PLAY_CONTINUE:
MOV SongFlag,#0
MOV TH0,#0EFH
MOV TL0,#0E0H
SETB TR0
PLAY_wwwS:
MOV A,SongFlag
CJNE A,#1,PLAY_wwwS
AJMP Play_01
TIMER0:
PUSH A
CLR TR0
CPL P1.3
MOV TH0,#0C2H
MOV TL0,#0F7H
DJNZ DELAY,timer0_01
MOV SongFlag,#1
CLR TR0
CLR P1.3
timer0_01:
MOV A,VOICE
CJNE A,#0,timer0_02 ; 是否是休止符
CLR TR1 ; 是 则 clear TR1
AJMP timer0_03
timer0_02:
SETB TR1 ; 不是则 set TR1
timer0_03:
SETB TR0
POP A
RETI
;......................................
TIMER1:
PUSH A
push dpl
push dph
CLR TR1
MOV DPTR , #Ttable
MOV A, VOICE
RL A
ANL A,#0FEH
MOV J, A
MOVC A,@A+DPTR
MOV TH1,A
MOV A,J
INC A
MOVC A,@A+DPTR
MOV TL1,A
CPL P1.7
CPL P1.6
CPL P1.5
CPL P1.4
SETB TR1
pop dph
pop dpl
POP A
RETI
Ttable: DB 0F8H, 08BH , 0F9H, 05BH , 0FAH, 014H , 0FAH, 06BH ,
DB 0FBH, 004H , 0FBH, 08FH , 0FCH, 00BH , 0FCH, 045H ,
DB 0FCH, 0ADH , 0FDH, 00AH , 0FDH, 033H , 0FDH, 082H ,
DB 0FDH, 0C7H , 0FEH, 003H , 0FEH, 021H , 0FEH, 056H ,
DB 0FEH, 084H , 0FEH, 099H , 0FEH, 0C0H , 0FEH, 0E3H ,
DB 0FFH, 001H , 0FFH, 010H ,
; 《 Yesterday Once More 》、 《你的样子》
Song :
DB M5,M3,M1,M1,M1,M2,M3,M5,M5,M3,M5,M3
DB M6,M5,M5,M2,M3,M3,M5,M6,M7,M3,M5,M5
DB M6,M6,M6,M3,M5,M6,H3,H2,H1,M6
DB M7,M5,M3,M5,M3,M2,M2,M2
DB L7,M2,L6,L5,L5,M1,M1,M2,M3,M5,M5,M5,M3,M5,M3
DB M6,M5,M2,M3,M3,M5,M6,M7,M3,M5,M5
DB M6,M6,M7,H2,H1,M7,M7,M6,M6,M6,M7
DB H1,M7,M7,M6,M6,M7,H1,H1,M6,H1,M6
DB H2,H2,H1,H2,H3,H3,H3,H3,H3,H2,H1
DB M7,H1,M7,M6,M6,M3,M5,M5,M5,M5,M5,M5,M5,M5,H1,H2
DB H3,H3,H3,H3,H3,H2,H1,M7,H1,M7,M6,M6,M3,M5
DB M5,M5,M5,M5,M5,M5,M5,M6,M7,H1,M7,H1,H2,H1,M7
DB H1,M7,H1,H2,H1,H2,H3,H3,H2,H1,M6
DB M6,Z0,M3,M3,M6,M3,M5,M5,M5,M5,M5
DB M5,M5,M2,M3,M2,M2,M1,M2,M3,M3,M3,M3
DB M2,M2,M5,M5,H1,H2
DB H3,H3,H3,H3,H3,H2,H1,M7,H1,M7,M6,M6,M3,M5
DB M5,M5,M5,M5,M5,M5,M5,H1,H2,H3,H3,H3,H3,H3,H2,H1
DB M7,H1,M7,M6,M6,M3,M5,M5,M5,M5,M5
time :
DB 2 ,2 ,4 ,4 ,4 ,4 ,3, 4 ,4 ,4 ,4 ,4
DB 4 ,4 ,4 ,4 ,2 ,4 ,4 ,2 ,2 ,4 ,4 ,4
DB 2 ,2 ,2 ,4 ,4 ,2 ,2 ,4 ,2 ,4
DB 3 ,4 ,4 ,2 ,4 ,2 ,2 ,2
DB 4 ,4 ,4 ,4 ,4 ,4 ,4 ,4 ,4 ,2 ,4 ,4 ,4 ,4 ,4
DB 4 ,2 ,4 ,2 ,4 ,4 ,2 ,2 ,4 ,2 ,4
DB 2 ,2 ,2 ,2 ,4 ,2 ,4 ,2 ,4 ,8 ,8
DB 4 ,2 ,4 ,2 ,4 ,4 ,2 ,2 ,4 ,2 ,4
DB 2 ,2 ,2 ,2 ,4 ,4 ,4 ,4 ,2 ,4 ,4
DB 4 ,4, 4 ,4, 2 ,4 ,4 ,2 ,2 ,2 ,2, 2, 2 ,2, 4, 4
DB 4 ,4 ,4 ,4 ,2 ,4 ,4 ,4, 4 ,4 ,4 ,2 ,4 ,4
DB 2 ,2 ,2 ,2 ,2 ,2 ,2 ,4 ,4 ,4 ,4 ,4 ,3 ,4 ,4
DB 4 ,4 ,4 ,3 ,4 ,4 ,2 ,2 ,4 ,2 ,4
DB 2 ,4 ,4 ,4 ,4 ,4 ,4 ,2 ,2 ,2 ,2
DB 2 ,4 ,4 ,4 ,8 ,8 ,4 ,4 ,2 ,2 ,2 ,2
DB 2 ,2 ,2 ,2 ,2 ,2
DB 4 ,4 ,4 ,4 ,2 ,4 ,4 ,4 ,4 ,4 ,4 ,2 ,4 ,4
DB 2 ,2 ,2 ,2 ,2 ,2 ,2 ,4 ,4 ,4 ,4 ,4 ,4 ,2 ,4 ,4
DB 4 ,4 ,4 ,4 ,2 ,4 ,4 ,2 ,2 ,2 ,2
SONG_0:
DB Z0,Z0,Z0,Z0,M3,M6,M6,M6,M6,M6,M5,M6,M7,M6,M6,M6,M6
DB
M5,M3,M3,M3,M3,M3,M2,M3,M3,Z0,M3,M6,M6,M6,M6,M6,M5,M6,M7,M6,M6,M6,M6
DB
M5,M3,M3,M3,M3,M3,M2,M3,M3,M5,M3,M2,M2,M2,M2,M3,M2,M1,M3,M5,Z0,M3
DB
M7,M6,M6,M6,M6,M7,M6,M5,M5,M3,Z0,M5,M3,M2,M2,M2,M2,M3,M2,M1,M3,L7,L7,L7,L7,L7,L5
DB
L6,L6,L6,L6,L5,L6,L7,L6,L6,Z0,M3,M6,M6,M6,M6,M6,M5,M6,M7,M6,M6,M6,M6
DB
M5,M3,M3,M3,M3,M3,M2,M3,M3,Z0,M3,M6,M6,M6,M6,M6,M6,M5,M6,M7,M6,M6,M6,M6,M6
DB
M5,M3,M3,M3,M3,M3,M2,M3,M3,M5,M3,M2,M2,M2,M2,M3,M2,M1,M3,M5,Z0,M3 CTIME_0:
DB 2 ,2 ,2 ,3 ,8 ,4 ,4 ,4 ,8 ,8 ,8 ,8 ,8 ,8 ,4 ,8 ,8
DB 8 ,8 ,8 ,8 ,8 ,8 ,8 ,8 ,1 ,8 ,8 ,4 ,4 ,4 ,8 ,8 ,8 ,8 ,8 ,8 ,4 ,8 ,8
DB 8 ,8 ,8 ,8 ,8 ,8 ,8 ,8 ,1 ,8 ,8 ,4 ,8 ,8 ,8 ,8 ,8 ,8 ,8 ,4 ,4 ,8
DB 8 ,8 ,8 ,8 ,8 ,8 ,8 ,8 ,8 ,4 ,4 ,8 ,8 ,4 ,8 ,8 ,8 ,8 ,8 ,8 ,8 ,4 ,8 ,8 ,8 ,8 ,8
DB 8 ,8 ,8 ,8 ,8 ,8 ,8 ,8 ,3 ,8 ,8 ,4 ,4 ,4 ,8 ,8 ,8 ,8 ,8 ,8 ,4 ,8 ,8
DB 8 ,8 ,8 ,8 ,8 ,8 ,8 ,8 ,3 ,8 ,8 ,4 ,4 ,8 ,8 ,8 ,8 ,8 ,8 ,8 ,8 ,8 ,8 ,8 ,8
DB 8 ,8 ,8 ,8 ,8 ,8 ,8 ,8 ,3 ,8 ,8 ,4 ,8 ,8 ,8 ,8 ,8 ,8 ,8 ,4 ,4 ,8 SONG_1:
DB
M7,M6,M6,M6,M6,M7,M6,M5,M5,M3,Z0,M5,M3,M2,M2,M2,M2,M3,M2,M1,M3,L7,L7,L7,L7,L7,L5
DB
L6,L6,L6,L6,L5,L6,L7,L6,L6,L6,H1,M7,M6,M3,M3,M6,M6,M5,M3,M3,M2,M1,M2,M3,M3,M3
DB
M6,M5,M3,M2,M3,M3,M1,M2,M3,M3,M2,M1,M2,L7,L7,L7,H1,M7,M6,M3,M3,M6,M6,M5
DB M3,M3,M2,M1,M2,M3,M3,M3,M6,M5,M3,M2,M3,M3,M1,M2
DB M3,M3,M2,M1,M2,L7,L7,M3,M3,M3,M3,M3,M3,M3,M3,M3
CTIME_1:
DB 8 ,8 ,8 ,8 ,8 ,8 ,8 ,8 ,8 ,4 ,4 ,8 ,8 ,4 ,8 ,8 ,8 ,8 ,8 ,8 ,8 ,4 ,8 ,8 ,8 ,8 ,8
DB 8 ,8 ,8 ,8 ,8 ,8 ,8 ,8 ,2 ,2 ,2 ,8 ,8 ,2 ,8 ,8 ,8 ,8 ,4 ,8 ,8 ,8 ,4 ,8 ,2 ,2
DB 1 ,8 ,8 ,8 ,3 ,4 ,8 ,8 ,4 ,8 ,8 ,8 ,4 ,8 ,2 ,2 ,1 ,8 ,8 ,2 ,8 ,8 ,8 ,8
DB 4 ,8 ,8 ,8 ,4 ,8 ,2 ,2 ,1 ,8 ,8 ,8 ,4 ,4 ,8 ,8
DB 4 ,8 ,8 ,8 ,4 ,8 ,1 ,8 ,2 ,2 ,2 ,2 ,2 ,2 ,2 ,2
END