📄 音乐发生器.asm
字号:
$MOD841
SP0 EQU 50H
CLK81 EQU P3.5
DAT81 EQU P3.3
KEYVAL EQU 30H
LO EQU 31H
HI EQU 32H
TC EQU 33H
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
ORG 0000H
LJMP MAIN
ORG 0003H
LJMP SERVE1
ORG 000BH
LJMP T0_INT
ORG 0060H
MAIN: MOV R0,#0FFH
CLR A
QING: MOV @R0,A
DJNZ R0,QING
MOV SP,#SP0
LCALL YS
LCALL INI8281
LCALL INI841
HERE: LJMP HERE
;---------------------------------------
INI841: MOV TMOD,#01H
SETB EA
SETB EX0
SETB ET0
SETB PT0
RUN: LCALL SOUND_ON
MOV R4,#1
MOV R3,#1
LCALL PLAY
MOV R4,#2
MOV R3,#1
LCALL PLAY
MOV R4,#3
MOV R3,#1
LCALL PLAY
LCALL SOUND_OFF
SETB P3.4
RET
;----------------------------------
INI8281:SETB CLK81
SETB DAT81
MOV A,#12H
LCALL WTO81
MOV A,#80H
LCALL WTO81
RET
;----------------------------------
SERVE1: MOV A,#93H
LCALL WTO81
LCALL RDKVAL
MOV A,KEYVAL
CJNE A,#00H,S1
LCALL FUNCTION1
LJMP S5
S1: CJNE A,#01H,S2
LCALL FUNCTION2
LJMP S5
S2: CJNE A,#02H,S3
LCALL FUNCTION3
LJMP S5
S3: CJNE A,#03H,S4
LCALL FUNCTION4
LJMP S5
S4: CJNE A,#04H,S5
LCALL FUNCTION5
S5: SETB P3.4
RETI
;---------------------------------
T0_INT: MOV TL0,LO
MOV TH0,HI
CPL P3.4
RETI
;----------------------------------
FUNCTION1:LCALL SOUND_ON
LCALL PLAY_SONG1
LCALL SOUND_OFF
RET
;--------------------------------
FUNCTION2:LCALL SOUND_ON
LCALL PLAY_SONG2
LCALL SOUND_OFF
RET
;-------------------------------
FUNCTION3:LCALL SOUND_ON
LCALL PLAY_SONG3
LCALL SOUND_OFF
RET
;-----------------------------------
FUNCTION4:LCALL SOUND_ON
LCALL PLAY_SONG4
LCALL SOUND_OFF
RET
;------------------------------
FUNCTION5:LCALL SOUND_ON
LCALL PLAY_SONG5
LCALL SOUND_OFF
RET
;------------------------------------
PLAY: LCALL LOAD_VALUE
L1: MOV R5,#50
LCALL DELAY
DJNZ R3,L1
LCALL SOUND_OFF
SETB P3.4
MOV R5,#15
LCALL DELAY
LCALL SOUND_ON
RET
;-------------------------------
PLAY_SONG1: MOV TC,#0
X0: MOV DPTR,#SONG1
MOV A,TC
MOVC A,@A+DPTR
MOV R4,A
CJNE A,#0FFH,X1
RET
X1: MOV DPTR,#LEN1
MOV A,TC
MOVC A,@A+DPTR
MOV R3,A
LCALL PLAY
;---------------------------
INC TC
LJMP X0
RET
;--------------------------------
PLAY_SONG2: MOV TC,#0
X2: MOV DPTR,#SONG2
MOV A,TC
MOVC A,@A+DPTR
MOV R4,A
CJNE A,#0FFH,X3
RET
X3: MOV DPTR,#LEN2
MOV A,TC
MOVC A,@A+DPTR
MOV R3,A
LCALL PLAY
;---------------------------
INC TC
LJMP X2
RET
;--------------------------------
PLAY_SONG3: MOV TC,#0
X4: MOV DPTR,#SONG3
MOV A,TC
MOVC A,@A+DPTR
MOV R4,A
CJNE A,#0FFH,X5
RET
X5: MOV DPTR,#LEN3
MOV A,TC
MOVC A,@A+DPTR
MOV R3,A
LCALL PLAY
;---------------------------
INC TC
LJMP X4
RET
;--------------------------------
PLAY_SONG4: MOV TC,#0
X6: MOV DPTR,#SONG4
MOV A,TC
MOVC A,@A+DPTR
MOV R4,A
CJNE A,#0FFH,X7
RET
X7: MOV DPTR,#LEN4
MOV A,TC
MOVC A,@A+DPTR
MOV R3,A
LCALL PLAY
;---------------------------
INC TC
LJMP X6
RET
;--------------------------------
PLAY_SONG5: MOV TC,#0
X8: MOV DPTR,#SONG5
MOV A,TC
MOVC A,@A+DPTR
MOV R4,A
CJNE A,#0FFH,X9
RET
X9: MOV DPTR,#LEN5
MOV A,TC
MOVC A,@A+DPTR
MOV R3,A
LCALL PLAY
;---------------------------
INC TC
LJMP X8
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 HI,A
MOV DPTR,#LO_LIST
MOV A,R4
MOVC A,@A+DPTR
MOV LO,A
RET
;----------------------------------
WTO81: MOV R6,#08H
WAT: CLR CLK81
LCALL DELAY1
SETB CLK81
JB DAT81,WAT
CLR CLK81
LCALL DELAY1
SETB CLK81
JNB DAT81,$
WTB81: RLC A
MOV DAT81,C
CLR CLK81
LCALL DELAY1
SETB CLK81
LCALL DELAY1
LCALL DELAY1
DJNZ R6,WTB81
SETB DAT81
RET
;-----------------------------------
RDKVAL: CLR CLK81
LCALL DELAY1
SETB CLK81
JB DAT81,$
CLR CLK81
LCALL DELAY1
SETB CLK81
MOV R6,#08H
RD1:
LCALL DELAY1
LCALL DELAY1
LCALL DELAY1
MOV C,DAT81
LCALL DELAY1
RLC A
CLR CLK81
LCALL DELAY1
SETB CLK81
DJNZ R6,RD1
MOV KEYVAL,A
RET
;---------------------------------
DELAY1: NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
RET
;----------------------------------------
YS: MOV R5,#00H
MOV R4,#50H
YS1: DJNZ R5,$
DJNZ R4,YS1
RET
;--------------------------------------------
DELAY:MOV R6,#150
D1: MOV R7,#150
DJNZ R7,$
DJNZ R6,D1
DJNZ R5,DELAY
RET
;-------------------------------------------------
HI_LIST:DB 0,0D6H,0DBH,0DFH,0E1H,0E4H,0E7H,0EAH,0EBH,0EDH,0EFH,0F0H,0F2H,0F3H,0F5H
LO_LIST:DB 0,0B3H,03DH,41H,12H,7BH,76H,24H,5AH,0A4H,0A1H,89H,38H,0BBH,12H
;-------------------------------------------------------------------------------------
SONG1:DB 3,5,5,3,2,1,2,3,5,3,2,3,5,5,3,2,1,2,3,2,1,1,0FFH
LEN1: DB 2,1,1,2,1,1,1,2,1,1,1,2,1,1,2,1,1,1,2,1,1,1,0FFH
;-----------------------------------------------------------------------------
SONG2:DB 3,3,3,3,3,3,3,5,1,2,3,4,4,4,4,3,3,3,2,2,3,2,5,3,3,3,3,3,3,3,5,1,2,3,4,4,4,4,3,3,3,5,5,4,2,1,2
DB 3,3,3,3,3,3,3,5,1,2,3,4,4,4,4,3,3,3,2,2,3,2,5,3,3,3,3,3,3,3,5,1,2,3,4,4,4,4,3,3,3,5,5,4,2,1,2,0FFH
LEN2: DB 1,1,2,1,1,2,1,1,1,1,4,1,1,2,1,1,2,1,1,1,1,2,2,1,1,2,1,1,2,1,1,1,1,4,1,1,1,1,1,1,1,1,1,1,1,1,4
DB 1,1,2,1,1,2,1,1,1,1,4,1,1,2,1,1,2,1,1,1,1,2,2,1,1,2,1,1,2,1,1,1,1,4,1,1,1,1,1,1,1,1,1,1,1,1,4,0FFH
;-------------------------------------------------------------------------------------------------------
SONG3:DB 10,9,8,7,6,5,4,3,2,1,0FFH
LEN3: DB 1,1,1,1,1,1,1,1,1,1,0FFH
;----------------------------------------
SONG4:DB 3,5,5,3,2,1,2,3,5,3,2,3,5,5,3,2,1,2,3,2,1,1,0FFH
LEN4: DB 2,1,1,2,1,1,1,2,1,1,1,2,1,1,2,1,1,1,2,1,1,1,0FFH
;-------------------------------------------------------------
SONG5:DB 10,9,8,7,6,5,6,7,8,9,0FFH
LEN5: DB 1,1,1,1,1,1,1,1,1,1,0FFH
;-----------------------------------
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -