六首歌曲的音乐门铃制作de课题研究的目的、意义是什么
;******************************;; 单片机音乐应用 ;;******************************; ORG 0000H ;主程序起始地址 JMP START ;跳至主程序 ORG 000BH ;TIMER0中断起始地址 JMP TIM0 ;跳至TIMER0中断起始地址 START: MOV TMOD,#00000001B ;设TIMER0在MO...全部
;******************************;; 单片机音乐应用 ;;******************************; ORG 0000H ;主程序起始地址 JMP START ;跳至主程序 ORG 000BH ;TIMER0中断起始地址 JMP TIM0 ;跳至TIMER0中断起始地址 START: MOV TMOD,#00000001B ;设TIMER0在MODE1 MOV IE,#10000010B ;中断使能 START0: MOV 30H,#00 ;起简谱码指针 NEXT: MOV A,30H ;简谱码指针载入A MOV DPTR,#TABLE ;至TABLE取简谱码 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 ;是,则不发音 JMP D1 ;跳至D1 SING: DEC A ;取到的音符码减1(不含0) MOV 22H,A ;存入(22H) RL A ;乘2 MOV DPTR,#TABLE ;至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: CALL 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 P1。
0 ;将P1。
0位反相 POP PSW ;至堆栈取回PSW的值 POP ACC ;至堆栈取回A的值 RETI ;返回主程序 DELAY: MOV R7,#02 D2: MOV R4,#125 ;要延长的时间(毫秒)数 D3: MOV R3,#248 DJNZ R3,$ DJNZ R4,D3 DJNZ R7,D2 DJNZ R5,DELAY ;决定节拍 RET TABLE1: DW 64260,64400,64524,64580 DW 64684,64777,64820,64898 DW 64968,65030,65058,65110 DW 65157,65178,65217 TABLE: DB 82H,01H,81H,94H,84H DB 0B4H,0A4H,04H DB 82H,01H,81H,94H,84H DB 0C4H,0B4H,04H END。收起