您好,欢迎来到99网。
搜索
您的当前位置:首页单片机音乐程序

单片机音乐程序

来源:99网


ORG 0000H ;主程序起始地址

SJMP START ;跳至主程序

ORG 000BH ;TIMER0中断起 始地址 LJMP TIM0 ;跳至TIMER0中断子程序 START: MOV TMOD,#01H ;设T0在M1 MOV IE,#82H ;中断使能

START0:MOV 30H,#00 ;取简谱码指针 NEXT: MOV A,30H ;简谱码指针载入A MOV DPTR,#TAB ;至TAB取简谱码 MOVC A,@A+DPTR ;

MOV R2,A ;渠道的简谱码暂存于R2 JZ END0 ;是否渠道00(结束码)

ANL A,#0FH ;不是,则取低4位(节拍码) MOV R5,A ;将节拍码存入R5 MOV A,R2 ;将取到的简谱码再载入A SWAP A ;高低4位交换

ANL A,#0FH ;取低4位(音符码) JNZ SING ;取到的音符码是否为0? CLR TR0 ;开始,则不发音

SJMP D1 ;跳至D1

SING: DEC A ;取到的音符码减1(不含0)

MOV 22H,A ;存入(22H) RL A ;乘2

MOV DPTR,#TAB1 ;至TABLE1取相对的高位字节计数值 MOVC A,@A+DPTR ;

MOV TH0,A ;取到的高位字节存入TH0 MOV 21H,A ;取到的高位字节存入(21H) MOV A,22H ;在载入取到的音符码 RL A ;乘2 INC A ;加1

MOVC A,@A+DPTR ;至TABLE1取相对的低位字节计数值 MOV TL0,A ;取到的低位字节存入TL0 MOV 20H,A ;取到的低位字节存入(20H) SETB TR0 ;启动TIMER0

D1: LCALL DELAY ;其本单位时间1/4拍187毫秒 INC 30H ;取简谱码指针加1 JMP NEXT ;取下一个简谱码 END0: CLR TR0 ;停止TIMER0 JMP START0 ;重复循环

TIM0: PUSH ACC ;将A的值暂存于堆栈 PUSH PSW ;将PSW的值暂存于堆栈 MOV TL0,20H ;重设计数值 MOV TH0,21H ;

CPL P3.0 ;将P3.0位反相,控制蜂鸣器发声

POP PSW ;至堆栈取回PSW的值 POP ACC ;至堆栈取回A的值 RETI

DELAY:MOV R7,#02 D2: MOV R4,#187 D3: MOV R3,#248 DJNZ R3,$ DJNZ R4,D3 DJNZ R7,D2 RET

TAB1: ;决定节拍

DW 260,400,521,580 DW 684,777,820,8 DW 968,65030,65058,65110 DW 65157,65178,65217 TAB: ;乐曲名称《梁祝》

DB 02H,82H,62H,52H,48H,02H,52H,32H,22H,18H DB 83H,91H,72H,62H,51H,61H,71H,61H,83H,61H DB 81H,51H,61H,71H,61H,51H,46H,82H,32H,52H DB 22H,42H,16H,21H,41H,18H,0E4H,13H,21H,43H DB 51H,21H,41H,12H,83H,81H,61H,81H,58H,53H DB 61H,31H,22H,13H,21H,42H,52H,0E2H,42H,21H DB 11H,91H,41H,18H,63H,81H,32H,52H,21H,41H, DB 16H,0E4H,11H,21H,31H,51H,26H,11H,21H,43H DB 51H,82H,62H,52H,61H,51H,42H,21H,11H,0E4H DB 44H,21H,41H,21H,11H,0E1H,11H,21H,41H,18H DB 61H,81H,51H,61H,51H,41H,32H,21H,41H,18H DB 08H,0H,04H ;曲子最后静音5拍长的时间 DB 00H ;乐曲结束 END

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- 99spj.com 版权所有 湘ICP备2022005869号-5

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务