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

📄 音乐发生器.asm

📁 在单片机上实现播放歌曲
💻 ASM
字号:
.model small
.stack
.data
musicfreq dw 220h,220h,262h,294h,330h,349h,330h,294h,220h,220h,262h,294h,330h,349h,330h
          dw 220h,220h,262h,294h,330h,349h,330h,294h,330h,294h,330h,294h,330h,262h          
          dw 220h,440h,330h,330h,440h,330h,330h,440h                          ;音乐谱曲
musictimedelay db 8,4,4,8,4,8,16,16,8,4,4,8,4,4,32                            ;音乐节拍
          db 8,4,4,8,4,8,16,16,8,4,4,8,4,4,32
          db 8,4,4,8,4,8,16,16,8,4,4,8,4,4,32
          db 8,4,4,8,4,8,16,16,8,4,4,8,4,4,32
          db 8,4,4,8,8,16,16,8,4,4,8,8,32
count equ 73
.code
.startup
mov ah,01h
int 21h
mov cx,count
music proc:
         mov dx,303
         mov al,90h
         out dx,al     ;初始化8255
         mov al,0ch
         out dx,al     ;置pc6=0 禁止8253通道2的gate引脚
         mov al,00h
         out dx,al     ;置pc0=0 禁止7408
         mov dx,307h
         mov al,0b6h
         out dx,al     ;初始化8253
         mov si,offset musicfreq ;取歌曲的第一个音频
         mov bx,count
         mov di,offset musictimedelay ;取歌曲的第一个时延
         mov bx,[si]
      loopmusic:   
         out 306h,bl    ;先送低字节
         mov bl,ah      
         out 306,bl     ;再送高字节 
                        ;以上置8253通道2 的计数初值 
         mov al,01h
         out dx,al         
         mov al,0d
         out dx,al      ;开扬声器
         call delay     ;等待延时时间到
         mov al,0ch
         out dx,al
         mov al,00h
         out dx,al      ;关闭扬声器
         inc si
         inc si         ;获取下一个音频
         inc di
         inc di         ;获取下一个延时
         dec cx
       loop loopmusic
         mov al,0ch
         out dx,al
         mov al,00h
         out dx,al      ;再次关闭扬声器
music endp
delay proc              ;延时程序
    ab: int 1ch
        dec [di]
        cmp [di],0
        jnz ab
        ret
delay endp
end
    

⌨️ 快捷键说明

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