The circuit & code given here will play the music for “wishes you to be safe”
The IC LM386 is just an audio amplier, you can use any audio amplifier circuits.
More projects with music to be coming soon here
CIRCUIT DIAGRAM
ASSEMBLY CODE:
ORG 0000H
LJMP START
ORG 000BH
INC 20H; interruption of Counter 1
MOV TH0, #0D8H
MOV TL0, #0EFH; 12M crystal to create a 10 ms interruption
RETI
START:
MOV SP, #50H
MOV TH0, #0D8H
MOV TL0, #0EFH
MOV TMOD, #01H
MOV IE, #82H
MUSIC0:
NOP
MOV DPTR, #DAT; first address of the table to send DPTR
MOV 20H, #00H; interrupt counter
MOV B, #00H; table number
MUSIC1:
NOP
CLR A
MOVC A, @A+DPTR; access code from look-up table
JZ END0; is 00H, then the end of music
CJNE A,#0FFH, MUSIC5
LJMP MUSIC3
MUSIC5:
NOP
MOV R6, A
INC DPTR
MOV A, B
MOVC A,@A+DPTR; access beat code and send to R7
MOV R7, A
SETB TR0; start counting
MUSIC2:
NOP
CPL P3.0
MOV A, R6
MOV R3, A
LCALL DEL
MOV A, R7
CJNE A,20H,MUSIC2; interrupt counter (20H) = R7
; Range, then continue to cycle
MOV 20H,#00H
INC DPTR
; INC B
LJMP MUSIC1
MUSIC3:
NOP
CLR TR0; ending of 100 ms
MOV R2,#0DH
MUSIC4:
NOP
MOV R3,#0FFH
LCALL DEL
DJNZ R2, MUSIC4
INC DPTR
LJMP MUSIC1
END0:
NOP
MOV R2,#64H; song ended after 1 seconds delay
MUSIC6:
MOV R3,#00H
LCALL DEL
DJNZ R2, MUSIC6
LJMP MUSIC0
DEL:
NOP
DEL3:
MOV R4,#02H
DEL4:
NOP
DJNZ R4,DEL4
NOP
DJNZ R3,DEL3
RET
NOP
DAT:
db 26h, 20h, 20h, 20h, 20h, 20h, 26h, 10h, 20h, 10h, 20h, 80h, 26h, 20h, 30h, 20h
db 30h, 20h, 39h, 10h, 30h, 10h, 30h, 80h, 26h, 20h, 20h, 20h, 20h, 20h, 1ch, 20h
db 20h, 80h, 2bh, 20h, 26h, 20h, 20h, 20h, 2bh, 10h, 26h, 10h, 2bh, 80h, 26h, 20h
db 30h, 20h, 30h, 20h, 39h, 10h, 26h, 10h, 26h, 60h, 40h, 10h, 39h, 10h, 26h, 20h
db 30h, 20h, 30h, 20h, 39h, 10h, 26h, 10h, 26h, 80h, 26h, 20h, 2bh, 10h, 2bh, 10h
db 2bh, 20h, 30h, 10h, 39h, 10h, 26h, 10h, 2bh, 10h, 2bh, 20h, 2bh, 40h, 40h, 20h
db 20h, 10h, 20h, 10h, 2bh, 10h, 26h, 30h, 30h, 80h, 18h, 20h, 18h, 20h, 26h, 20h
db 20h, 20h, 20h, 40h, 26h, 20h, 2bh, 20h, 30h, 20h, 30h, 20h, 1ch, 20h, 20h, 20h
db 20h, 80h, 1ch, 20h, 1ch, 20h, 1ch, 20h, 30h, 20h, 30h, 60h, 39h, 10h, 30h, 10h
db 20h, 20h, 2bh, 10h, 26h, 10h, 2bh, 10h, 26h, 10h, 26h, 10h, 2bh, 10h, 2bh, 80h
db 18h, 20h, 18h, 20h, 26h, 20h, 20h, 20h, 20h, 60h, 26h, 10h, 2bh, 20h, 30h, 20h
db 30h, 20h, 1ch, 20h, 20h, 20h, 20h, 80h, 26h, 20h, 30h, 10h, 30h, 10h, 30h, 20h
db 39h, 20h, 26h, 10h, 2bh, 10h, 2bh, 20h, 2bh, 40h, 40h, 10h, 40h, 10h, 20h, 10h
db 20h, 10h, 2bh, 10h, 26h, 30h, 30h, 80h, 00H
LJMP START
ORG 000BH
INC 20H; interruption of Counter 1
MOV TH0, #0D8H
MOV TL0, #0EFH; 12M crystal to create a 10 ms interruption
RETI
START:
MOV SP, #50H
MOV TH0, #0D8H
MOV TL0, #0EFH
MOV TMOD, #01H
MOV IE, #82H
MUSIC0:
NOP
MOV DPTR, #DAT; first address of the table to send DPTR
MOV 20H, #00H; interrupt counter
MOV B, #00H; table number
MUSIC1:
NOP
CLR A
MOVC A, @A+DPTR; access code from look-up table
JZ END0; is 00H, then the end of music
CJNE A,#0FFH, MUSIC5
LJMP MUSIC3
MUSIC5:
NOP
MOV R6, A
INC DPTR
MOV A, B
MOVC A,@A+DPTR; access beat code and send to R7
MOV R7, A
SETB TR0; start counting
MUSIC2:
NOP
CPL P3.0
MOV A, R6
MOV R3, A
LCALL DEL
MOV A, R7
CJNE A,20H,MUSIC2; interrupt counter (20H) = R7
; Range, then continue to cycle
MOV 20H,#00H
INC DPTR
; INC B
LJMP MUSIC1
MUSIC3:
NOP
CLR TR0; ending of 100 ms
MOV R2,#0DH
MUSIC4:
NOP
MOV R3,#0FFH
LCALL DEL
DJNZ R2, MUSIC4
INC DPTR
LJMP MUSIC1
END0:
NOP
MOV R2,#64H; song ended after 1 seconds delay
MUSIC6:
MOV R3,#00H
LCALL DEL
DJNZ R2, MUSIC6
LJMP MUSIC0
DEL:
NOP
DEL3:
MOV R4,#02H
DEL4:
NOP
DJNZ R4,DEL4
NOP
DJNZ R3,DEL3
RET
NOP
DAT:
db 26h, 20h, 20h, 20h, 20h, 20h, 26h, 10h, 20h, 10h, 20h, 80h, 26h, 20h, 30h, 20h
db 30h, 20h, 39h, 10h, 30h, 10h, 30h, 80h, 26h, 20h, 20h, 20h, 20h, 20h, 1ch, 20h
db 20h, 80h, 2bh, 20h, 26h, 20h, 20h, 20h, 2bh, 10h, 26h, 10h, 2bh, 80h, 26h, 20h
db 30h, 20h, 30h, 20h, 39h, 10h, 26h, 10h, 26h, 60h, 40h, 10h, 39h, 10h, 26h, 20h
db 30h, 20h, 30h, 20h, 39h, 10h, 26h, 10h, 26h, 80h, 26h, 20h, 2bh, 10h, 2bh, 10h
db 2bh, 20h, 30h, 10h, 39h, 10h, 26h, 10h, 2bh, 10h, 2bh, 20h, 2bh, 40h, 40h, 20h
db 20h, 10h, 20h, 10h, 2bh, 10h, 26h, 30h, 30h, 80h, 18h, 20h, 18h, 20h, 26h, 20h
db 20h, 20h, 20h, 40h, 26h, 20h, 2bh, 20h, 30h, 20h, 30h, 20h, 1ch, 20h, 20h, 20h
db 20h, 80h, 1ch, 20h, 1ch, 20h, 1ch, 20h, 30h, 20h, 30h, 60h, 39h, 10h, 30h, 10h
db 20h, 20h, 2bh, 10h, 26h, 10h, 2bh, 10h, 26h, 10h, 26h, 10h, 2bh, 10h, 2bh, 80h
db 18h, 20h, 18h, 20h, 26h, 20h, 20h, 20h, 20h, 60h, 26h, 10h, 2bh, 20h, 30h, 20h
db 30h, 20h, 1ch, 20h, 20h, 20h, 20h, 80h, 26h, 20h, 30h, 10h, 30h, 10h, 30h, 20h
db 39h, 20h, 26h, 10h, 2bh, 10h, 2bh, 20h, 2bh, 40h, 40h, 10h, 40h, 10h, 20h, 10h
db 20h, 10h, 2bh, 10h, 26h, 30h, 30h, 80h, 00H
1 comments:
Oh, very good!
Thank you very much!
Post a Comment