⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 单片机音乐播放音乐名-不要再来伤害我.asm

📁 在51系列单片机上实现音乐播放
💻 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 + -