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

📄 musix-asm-pro.txt

📁 音乐汇编程序
💻 TXT
字号:
****************************************** 
;文件名: YINYUE_asm, 
;功能:音乐程序,祝你平安、八月桂花香 
;蜂鸣器接在P2.7上 
****************************************** 
        SPK      EQU    P2.7   ;定义蜂鸣器发声脚 
        ORG     0000H 
        LJMP    MAIN 
        ORG     000bh;001BH             ;中断入口 
   INC 20H               ;中断服务程序,中断计数器加1 
   MOV TH0,#0D8H 
   MOV TL0,#0EFH        ;12M晶振,形成10毫秒中断 
   RETI 
        ORG     0030H 
   MAIN:MOV     P3,#0FFH 
   LOOP:JNB     P3.2,D1 
        JNB     P3.3,D2 
        SJMP    LOOP 
D1:MOV SP,#50H 
   MOV TH0,#0D8H 
   MOV TL0,#0EFH 
   MOV TMOD,#01H 
   MOV IE,#82H 
MUSIC0: 
   NOP 
   MOV DPTR,#DAT        ;表头地址送DPTR 
   MOV 20H,#00H        ;中断计数器清0 
   MOV B,#00H         ;表序号清0 
MUSIC1: 
   NOP 
   CLR  A             ;A 清零 
   MOVC A,@A+DPTR       ;查表取代码 
   JZ END0              ;是00H,则结束 
   CJNE A,#0FFH,MUSIC5 ; 如果是休止符,往下执行 
   LJMP MUSIC3 
MUSIC5: 
   NOP 
   MOV R6,A              ;R6=18H音符的频率 
   INC DPTR              ; DPTR加一 
   MOV A,B 
   MOVC A,@A+DPTR       ;取节拍代码送R7 
   MOV R7,A               ;R7=30H音符发音的时间 
   SETB TR0             ;启动计数 
MUSIC2: 
   NOP 
   CPL P2.7 
   MOV A,R6 
   MOV R3,A             ;R3=R6=18H 
   CPL A 
   MOV P1,A             ;显示(修改者加入的显示) 
   CPL A 
   LCALL DEL 
   MOV A,R7 
   CJNE A,20H,MUSIC2    ;中断计数器(20H)=R7否? 
                        ;不等,则继续循环 
   MOV 20H,#00H         ;等于,则取下一代码 
   INC DPTR 
   LJMP MUSIC1 
MUSIC3: 
   NOP 
   CLR TR0              ;休止100毫秒 
   MOV R2,#0DH         ;R2=13 
MUSIC4: 
   NOP 
   MOV R3,#0FFH 
   LCALL DEL 
   DJNZ R2,MUSIC4 
   INC DPTR 
   LJMP MUSIC1 
END0: 
   NOP 
   MOV R2,#64H          ;歌曲结束,延时1秒后继续 
MUSIC6: 
   MOV R3,#00H 
   LCALL DEL 
   DJNZ R2,MUSIC6 
   LJMP MUSIC0 
DEL: 
   NOP 
DEL3: 
   MOV R4,#05H 
DEL4: 
   NOP 
   DJNZ R4,DEL4 
   NOP 
   DJNZ R3,DEL3 
   RET 
D2:MOV SP,#50H 
   MOV TH0,#0D8H 
   MOV TL0,#0EFH 
   MOV TMOD,#01H 
   MOV IE,#83H 
MUSIC01: 
   NOP 
   MOV DPTR,#DAT1       ;表头地址送DPTR 
   MOV 20H,#00H         ;中断计数器清0 
   MOV B,#00H         ;表序号清0 
   MUSIC11: 
   NOP 
   CLR A 
   MOVC A,@A+DPTR       ;查表取代码 
   JZ END01              ;是00H,则结束 
   CJNE A,#0FFH,MUSIC51 
   LJMP MUSIC31 
MUSIC51: 
   NOP 
   MOV R6,A 
   INC DPTR 
   MOV A,B 
   MOVC A,@A+DPTR       ;取节拍代码送R7 
   MOV R7,A 
   SETB TR0             ;启动计数 
MUSIC21: 
   NOP 
   CPL P2.7 
   MOV A,R6 
   MOV R3,A 
   CPL A 
   MOV P1,A             ;显示(修改者加入的显示) 
   CPL A 
   LCALL DEL1 
   MOV A,R7 
   CJNE A,20H,MUSIC21    ;中断计数器(20H)=R7否? 
                        ;不等,则继续循环 
   MOV 20H,#00H         ;等于,则取下一代码 
   INC DPTR 
   LJMP MUSIC11 
MUSIC31: 
   NOP 
   CLR TR0              ;休止100毫秒 
   MOV R2,#0DH 
MUSIC41: 
   NOP 
   MOV R3,#0FFH 
   LCALL DEL1 
   DJNZ R2,MUSIC41 
   INC DPTR 
   LJMP MUSIC11 
END01: 
   NOP 
   MOV R2,#64H          ;歌曲结束,延时1秒后继续 
MUSIC61: 
   MOV R3,#00H 
   LCALL DEL1 
   DJNZ R2,MUSIC61 
   LJMP MUSIC01 
DEL1: 
   NOP 
DEL31: 
   MOV R4,#05H 
DEL41: 
   NOP 
   DJNZ R4,DEL41 
   NOP 
   DJNZ R3,DEL31 
   RET 
DAT1: 
  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 
DAT: 
   DB 18H, 30H, 1CH, 10H 
   DB 20H, 40H, 1CH, 10H 
   DB 18H, 10H, 20H, 10H 
   DB 1CH, 10H, 18H, 40H 
   DB 1CH, 20H, 20H, 20H 
   DB 1CH, 20H, 18H, 20H 
   DB 20H, 80H, 0FFH,20H 
   DB 30H, 1CH, 10H, 18H 
   DB 20H, 15H, 20H, 1CH 
   DB 20H, 20H, 20H, 26H 
   DB 40H, 20H, 20H, 2BH 
   DB 20H, 26H, 20H, 20H 
   DB 20H, 30H, 80H, 0FFH 
   DB 20H, 20H, 1CH, 10H 
   DB 18H, 10H, 20H, 20H 
   DB 26H, 20H, 2BH, 20H 
   DB 30H, 20H, 2BH, 40H 
   DB 20H, 20H, 1CH, 10H 
   DB 18H, 10H, 20H, 20H 
   DB 26H, 20H, 2BH, 20H 
   DB 30H, 20H, 2BH, 40H 
   DB 20H, 30H, 1CH, 10H 
   DB 18H, 20H, 15H, 20H 
   DB 1CH, 20H, 20H, 20H 
   DB 26H, 40H, 20H, 20H 
   DB 2BH, 20H, 26H, 20H 
   DB 20H, 20H, 30H, 80H 
   DB 20H, 30H, 1CH, 10H 
   DB 20H, 10H, 1CH, 10H 
   DB 20H, 20H, 26H, 20H 
   DB 2BH, 20H, 30H, 20H 
   DB 2BH, 40H, 20H, 15H 
   DB 1FH, 05H, 20H, 10H 
   DB 1CH, 10H, 20H, 20H 
   DB 26H, 20H, 2BH, 20H 
   DB 30H, 20H, 2BH, 40H 
   DB 20H, 30H, 1CH, 10H 
   DB 18H, 20H, 15H, 20H 
   DB 1CH, 20H, 20H, 20H 
   DB 26H, 40H, 20H, 20H 
   DB 2BH, 20H, 26H, 20H 
   DB 20H, 20H, 30H, 30H 
   DB 20H, 30H, 1CH, 10H 
   DB 18H, 40H, 1CH, 20H 
   DB 20H, 20H, 26H, 40H 
   DB 13H, 60H, 18H, 20H 
   DB 15H, 40H, 13H, 40H 
   DB 18H, 80H, 00H 
end 
 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -