📄 单片机音乐播放音乐名-不要再来伤害我.asm
字号:
ORG 0000H
AJMP MAIN
ORG 000BH
MOV TL0,R2
MOV TH0,R3
CPL P1.7
RETI
ORG 001BH
DJNZ R4,GOON ;中断次数不够,继续。
MOV IE,#80H ;持续时间到,该音符停止。
SJMP RE01
GOON: MOV TL1,40H
MOV TH1,41H
RE01: RETI
ORG 0100H
MAIN: MOV R5,#10H ;乐曲循环演奏次数,放2遍音乐后停止
LOOP: MOV TMOD,#11H
MOV IP,#02H ;T0中断优先
MOV 41H,#4CH ; T1初值放在41H,40H单元
MOV 40H,#0B0H ;值越大,演奏越快,可用此设置调速键
SETB EA
CLR A
MOV R1,A ;R1作为音符指针
MOV DPTR,#0300H;乐曲数据表的表头
L1: MOVC A,@A+DPTR
INC R1 ;指向音符的拍数字节
MOV R6,A ;音级字节暂存入R6
JZ L3
ACALL TONE
MOV TH0,R3
MOV TL0,R2
SETB TR0
SETB ET0
MOV A,R1
MOVC A,@A+DPTR
INC R1
CJNE R1,#00H,L2
MOV DPTR,#0400H;表指针溢出,更改表头
L2: ACALL LONG ;
MOV A,R1
AJMP L1 ;
L3: MOV A,R1
MOVC A,@A+DPTR
MOV R7,A ;R7为节拍数
INC R1
CJNE R1,#00H,L4 ;该音乐总长为256次取数即128次频率变化
MOV DPTR,#0400H
L4: ACALL LONG ;
MOV A,R1
CJNE R7,#0FH,L1
END0: MOV IE,#00H
MOV TCON,#00H
MOV TMOD,#00H
DJNZ R5,LOOP
AJMP $
ORG 0160H
TONE: MOV A,R6 ;取出音级字节
RL A ;乘2,定时常数为双字节
MOV 42H,A ;暂存入42H单元
ADD A,#05H ;距离数表有7个字节,使查表正确
MOVC A,@A+PC ;取出TH0,DPTR已被使用
MOV R3,A
MOV A,42H
INC A
MOVC A,@A+PC ;取出TL0
MOV R2,A ;
RET
TAB : DB 0F8H,8EH,0F8H,0F9H,0F9H,5EH ;表一中的定时初值
DB 0F9H,0BEH,0FAH,18H,0FAH,6DH
DB 0FAH,0BEH,0FBH,09H,0FBH,51H
DB 0FBH,95H,0FBH,0D4H,0FCH,11H
DB 0FCH,49H,0FCH,7FH,0FCH,0B2H
DB 0FCH,0E1H,0FDH,0FH,0FDH,39H
DB 0FDH,61H,0FDH,87H,0FDH,0ABH
DB 0FDH,0CDH,0FDH,0EDH,0FEH,0BH
DB 0FEH,27H,0FEH,42H,0FEH,5BH
DB 0FEH,73H,0FEH,8AH,0FEH,9FH
DB 0FEH,0B3H,0FEH,0C6H,0FEH,0D8H
DB 0FEH,0E9H,0FEH,0F9H,0FFH,08H
DB 0FFH,16H,0FFH,24H,0FFH,30H
DB 0FFH,3CH,0FFH,47H,0FFH,52H
DB 0FFH,5CH,0FFH,66H,0FFH,6FH
DB 0FFH,77H,0FFH,7FH,0FFH,86H
ORG 0200H ;音长子程序
LONG: ADD A,#0FH ;使查表正确
MOVC A,@A+PC ;取出定时器T1应中断的次数
MOV R4,A ;T1应中断的次数存入R4中
MOV TH1,41H
MOV TL1,40H
SETB TR1
SETB ET1
CJNE R4,#00H,$
RET ;音长子程序结束
TAB0: DB 01,02,04,06 ;应中断的次数,表2中字符数乘4
DB 08,10,12,14
DB 16,20,24,28
DB 32,40,48,64
ORG 0300H ;乐曲字节数据表
TAB1:
DB 11H,02H,16H,02H,16H,02H,14H,0AH,00H,04H ;1
DB 00H,02H,11H,02H,11H,02H,14H,02H,19H,02H,18H,02H,16H,02H,14H,02H ;2
DB 16H,04H,14H,02H,16H,02H,00H,04H,14H,02H,14H,02H ;4
DB 11H,08H,00H,04H,11H,02H,16H,02H ;5
DB 16H,02H,14H,0AH,00H,04H ;6
;好结束
DB 00H,02H,11H,02H,11H,02H,14H,02H,19H,02H,18H,02H,16H,02H,14H,02H ;1
DB 16H,04H,14H,02H,16H,02H,00H,04H,14H,02H,19H,02H ;2
DB 18H,02H,16H,06H,16H,04H,1BH,02H,19H,02H ;3
DB 1BH,02H,1BH,06H,00H,04H,1BH,02H,19H,02H ;4
DB 1BH,02H,1BH,06H,00H,04H,16H,02H,18H,02H
; 这结束
DB 19H,02H,19H,04H,19H,02H,1DH,02H,19H,04H,16H,02H ;1
DB 18H,04H,00H,04H,00H,04H,1BH,02H,19H,02H ;2
DB 1BH,02H,1BH,06H,00H,02H,16H,02H,19H,02H,1BH,02H ;3
DB 1DH,02H,1BH,06H,00H,04H,19H,02H,1BH,02H ;4
DB 1DH,02H,1DH,02H,1DH,02H,1DH,02H,20H,02H,1DH,02H,1BH,02H,1DH,02H
;你结束
DB 1DH,04H,11H,02H,14H,02H,19H,02H,18H,02H,16H,02H,14H,02H ;1
DB 16H,0CH,00H,04H
DB 00H,04H,11H,02H,14H,02H,19H,02H,18H,02H,16H,02H,14H,04H
DB 11H,0AH,00H,04H
DB 00H,04H,11H,02H,14H,02H,19H,02H,18H,02H,16H,02H,14H,02H
;不 结束
DB 16H,04H,16H,08H,00H,04H
DB 00H,04H,11H,02H,14H,02H,19H,02H,18H,02H,16H,02H,19H,02H
DB 16H,04H,16H,08H,00H,04H
DB 00H,04H,00H,04H,16H,04H,19H,04H
DB 1BH,04H,1BH,04H,1BH,08H
DB 00H,04H,00H,04H,1DH,04H,1DH,04H
DB 19H,02H,16H,06H,16,08H
;我结束
DB 00H,0CH,1BH,02H,19H,02H
DB 1BH,02H,1BH,06H,00H,04H,1BH,02H,19H,02H
DB 1BH,02H,16H,06H,00H,04H,16H,02H,18H,02H ;3
DB 19H,04H,19H,04H,1BH,02H,1BH,02H,16H,02H,16H,06H ;4
DB 00H,06H,1BH,02H,1BH,02H,19H,02H ;5
;畏结束
DB 1BH,04H,00H,06H,16H,02H,19H,02H,1BH,02H ;1
DB 1DH,02H,1BH,06H,00H,04H,19H,02H,1BH,02H ;2
DB 1DH,02H,1DH,02H,1DH,02H,1DH,02H,20H,02H,1DH,02H,1BH,02H,1DH,06H ;3
DB 11H,02H,14H,02H,19H,02H,18H,02H,16H,02H,14H,02H ;4
DB 1DH,04H,1DH,02H,1DH,02H,14H,02H,1DH,02H,1BH,02H,1DH,06H
;我结束
DB 00H,06H,1BH,02H,1BH,02H,19H,02H ;1
DB 1BH,02H,1BH,02H,19H,02H,1BH,06H,00H,04H ;2
DB 1BH,02H,19H,02H,1BH,02H,16H,06H,00H,04H ;3
DB 19H,02H,16H,02H,16H,04H,19H,02H,19H,02H,16H,02H,16H,06H ;4
DB 16H,04H,00H,02H,1BH,02H,1BH,02H,19H,02H
;你结束
DB 1BH,04H,19H,02H,19H,06H,19H,02H,1BH,02 ;1
DB 1DH,02H,1DH,02H,1DH,02H,1DH,02H,20H,02H,1DH,02H,1BH,02H,1DH,04H ;2
DB 00H,02H,00H,04H,00H,04H,00H,04H ;3
DB 00H,04H,11H,02H,14H,02H,19H,02H,18H,02H,16H,02H,14H,02H ;4
DB 16H,04H,16H,04H,16H,04H,00H,04H ;5
;再结束
DB 00H,04H,11H,02H,14H,02H,19H,02H,18H,02H,16H,02H,14H,02H ;1
DB 14H,02H,11H,0AH,00H,04H ;2
DB 00H,04H,1H,02H,14H,02H,19H,02H,18H,02H,16H,02H,14H,02H ;3
DB 16H,04H,16H,08H,00H,04H ;4
DB 00H,04H,11H,02H,14H,02H,19H,02H,18H,02H,16H,02H,19H,02H
;自结束
DB 16H,04H,16H,08H,00H,04H ;1
DB 00H,04H,11H,02H,14H,02H,19H,02H,18H,02H,16H,02H,14H,02H ;2
DB 16H,04H,16H,08H,00H,04H ;3
DB 00H,04H,11H,02H,14H,02H,19H,02H,18H,02H,16H,02H,14H,02H ;4
DB 16H,04H,16H,0CH
;我结束
DB 00H,04H,11H,02H,14H,02H,19H,02H,18H,02H,16H,02H,14H,02H ;1
DB 16H,04H,16H,0CH
DB 00H,0FH
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -