📄 p15_2.asm
字号:
SPK EQU P2.3 ;定义引脚
ORG 0000H
LJMP MAIN
ORG 000BH
LJMP INT_T0
;音乐数据表,按照音符--节拍--音符--节拍的格式存储
;即,第一个单元存储1号音符,第二个单元存储1号音符的节拍
; 第三个单元存储2号音符,第四个单元存储2号音符的节拍
;单元中0FF表示休止符,00H则表示音乐结束。
TAB: DB 18H, 30H, 1CH, 10H, 20H, 40H
DB 1CH, 10H, 18H, 10H, 20H, 10H
DB 1CH, 10H, 18H, 40H, 1CH, 20H
DB 20H, 20H, 1CH, 20H, 18H, 20H
DB 20H, 80H, 0FFH, 20H, 30H, 1CH
DB 10H, 18H, 20H, 15H, 20H, 1CH
DB 20H, 20H, 20H, 26H, 40H, 20H
DB 20H, 2BH, 20H, 26H, 20H, 20H
DB 20H, 30H, 80H, 0FFH, 20H, 20H
DB 1CH, 10H, 18H, 10H, 20H, 20H
DB 26H, 20H, 2BH, 20H, 30H, 20H
DB 2BH, 40H, 20H, 20H, 1CH, 10H
DB 18H, 10H, 20H, 20H, 26H, 20H
DB 2BH, 20H, 30H, 20H, 2BH, 40H
DB 20H, 30H, 1CH, 10H, 18H, 20H
DB 15H, 20H, 1CH, 20H, 20H, 20H
DB 26H, 40H, 20H, 20H, 2BH, 20H
DB 26H, 20H, 20H, 20H, 30H, 80H
DB 20H, 30H, 1CH, 10H, 20H, 10H
DB 1CH, 10H, 20H, 20H, 26H, 20H
DB 2BH, 20H, 30H, 20H, 2BH, 40H
DB 20H, 15H, 1FH, 05H, 20H, 10H
DB 1CH, 10H, 20H, 20H, 26H, 20H
DB 2BH, 20H, 30H, 20H, 2BH, 40H
DB 20H, 30H, 1CH, 10H, 18H, 20H
DB 15H, 20H, 1CH, 20H, 20H, 20H
DB 26H, 40H, 20H, 20H, 2BH, 20H
DB 26H, 20H, 20H, 20H, 30H, 30H
DB 20H, 30H, 1CH, 10H, 18H, 40H
DB 1CH, 20H, 20H, 20H, 26H, 40H
DB 13H, 60H, 18H, 20H, 15H, 40H
DB 13H, 40H, 18H, 80H, 00H
;延时子程序,入口参数为R0,R0存储循环次数
DELAY: NOP
DL1: MOV R1, #02H
DL2: NOP
DJNZ R1, DL2
NOP
DJNZ R0, DL1
RET
MAIN: MOV SP, #50H
MOV TMOD, #01H
MOV TH0, #0D8H
MOV TL0, #0EFH
MOV IE, #82H
MUSIC0: MOV DPTR, #TAB
MOV 20H, #00H
MUSIC1: CLR A
MOVC A, @A+DPTR
INC DPTR
JNZ MUSIC2
MOV R0, #0FFH
LCALL DELAY
LJMP MUSIC0
MUSIC2: CJNE A, #0FFH, MUSIC3;
ACALL PAUSE
AJMP MUSIC1
MUSIC3: MOV R6,A
MOV A, #0
MOVC A, @A+DPTR
MOV R7, A
INC DPTR
SETB TR0
MUSIC4: CPL SPK
MOV A, R6
MOV R0, A
LCALL DELAY
MOV A, R7
;20H存储定时中断的发生次数,
;一次定时时间为1个节拍
CJNE A, 20H, MUSIC4
MOV 20H, #00H
LJMP MUSIC1
PAUSE: CLR TR0 ;休止子程序,关闭中断,即此段时间不产生声音
MOV R2,#0DH
LOOP: MOV R0,#0FFH
LCALL DELAY
DJNZ R2, LOOP
RET
INT_T0: INC 20H ;中断服务子程序,中断次数加1
MOV TH0, #0D8H
MOV TL0, #0EFH ;12M晶振,形成10毫秒中断
RETI
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -