51汇编语言音乐程序方法二

 //两只老虎汇编程序,成功调试,p2.4=beep

此方法与第一种方法不同之处,第一种是将所有音阶低中高所对应的定时初值列一个表,而本程序采用将一首歌曲的对应音阶频率按序列表,再列出每个音阶的节拍表,通过同步查表实现音乐程序。
org 0000h
ajmp main
org 000bh
ajmp timer0
org 001bh
ajmp timer1
org 0030h
main: 
mov tmod,#11h
mov th1,#3ch
mov tl1,#0b0h
mov  IE,#8ah 
mov r0,#0  
mov r1,#0
mov r7,#0
setb tf0
setb tr1
sjmp $


timer0: mov a,r0
        mov dptr,#freq
          movc a,@a+dptr
        mov th0,a
        mov a,r0
        inc a
        movc a,@a+dptr
        mov tl0,a
        setb tr0
        cpl p2.4
        reti

/********控制节拍********/
timer1:
       mov th1,#3ch
       mov tl1,#0b0h
       cjne r7,#00,next
       mov a,r1
       mov dptr,#time
       movc a,@a+dptr
       rl a           ;控制音阶长短,加倍
       mov r7,a
       ajmp exit
next:djnz r7,exit
     inc r0              ;修改频率指针
     inc r0
     inc r1              ;修改节拍指针
     mov a,r1
     mov dptr,#time
     movc a,@a+dptr
     cjne a,#0ffh,exit
     clr tr0
     clr tr1
exit:
reti

/*******直接根据歌曲按顺序给出每个音阶的定时初值******/
/****两只老虎对应的音阶初值****/
freq:dw   64579,64684,64777,64579
     dw   64579,64684,64777,64579
     dw      64777,64819,64898
     dw      64777,64819,64898
    dw      64898,64968,64898,64819,64777,64579
    dw      64898,64968,64898,64819,64777,64579
    dw      64684, 64260,64579
    dw      64684, 64260,64579

/****两只老虎音阶对应的节拍****/
time: db 4,4,4,4
      db 4,4,4,4
      db 4,4,8
      db 4,4,8
      db 3,1,3,1,4,4,3,1,3,1,4,4
      db 4,4,8
      db 4,4,8 ,0xff

end

  • 14
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值