基于单片机stc89c52的数字音乐盒设计内容摘要:

0。 高优先级 SETB IT1。 外部中断 1 为跳沿触发 SETB PX1。 高优先级 SETB EX1。 允许外部中断 1 中断 SETB EX0。 允许外部中断定 0 中断 SETB EA。 开中断总开关 SETB TR1。 定时器 1 开始工作,作中断用 SETB OUT。 音频输出端口初始化。 ***********************************。 设置结束 CLR F0。 设置 F0=0,用来作暂停 /播放的标置位用 MOV 22H,01H。 22H单元中存放正在播放的歌曲编号 MOV DPTR,OUT_TAB。 将正在播放的歌曲编号送数码管显视 MOV A,22H MOVC A,@A+DPTR MOV OUT_NUM,A MOV R7,00H。 R7 中存放歌曲总信息的入口地址 START0:MOV R4,00H。 R4 存放当前正在播放歌曲的第几个节拍数 MOV R0,30H。 30H开始的单元中存放歌曲的入口信息 MOV A,R7。 将歌曲的节拍表的入口地址送到 DPTR ADD A,R0 MOV R0,A MOV DPH,@R0 INC R0 MOV DPL,@R0 INC R0 MOV A,R4 INC R4 MOVC A,@A+DPTR。 取出第一节拍数 ,其实第一个节拍不是歌曲的第一个节拍,而是表示几分音符 18。 **************************************************** MOV 26H,A。 将取出的音符数 +节拍数保存在职 26H单元中 NEXT: MOV R0,30H。 开始取出歌曲的第一个数据 MOV A,R7 ADD A,R0 MOV R0,A MOV DPH,@R0 INC R0 MOV DPL,@R0 INC R0 MOV A,R4 INC R4 MOVC A,@A+DPTR。 放在 A中。 **************************************************** JZ END0。 若为 0,则表示为休止符,不唱,本次音符不唱, MOV R1,A。 不为 0,取出节拍数 ANL A,0FH MOV R2,A MOV A,R1 SWAP A ANL A,0FH JNZ SING。 音符不为 0,唱 CLR TR0。 为 0,不唱 ,关频率发生器 SJMP SING1 SING: DEC A。 开始唱 ,进行相应的数据处理 MOV R3,A RL A MOV DPH,@R0 INC R0 19 MOV DPL,@R0 INC R0 MOVC A,@A+DPTR MOV 21H,A MOV TH0,A MOV A,R3 RL A INC A MOVC A,@A+DPTR MOV 20H,A MOV TL0,A SETB TR0。 开唱 START:MOV DPTR,DTABLE MOV A,50H MOVC A,@A+DPTR MOV P1,A INC 50H MOV A,50H CJNE A,15H,SING1 MOV 50H,00H SING1:LCALL DELAY。 每个音符唱多久 JB F0,FOR。 是否暂停, AJMP NEXT。 没有暂停,继续 FOR: CLR TR0。 暂停,不唱 JB F0,$。 等待播放 AJMP NEXT。 开始播放 END0: CLR TR0。 不 唱 MOV A,22H。 唱完处理 CJNE A,N,WW。 是不是全部歌曲都唱完 20 MOV 22H,01H。 全部唱完,则从第一首开始再唱 MOV R7,00H MOV OUT_NUM,57H。 数码管显视第一首歌曲编号 AJMP WWW WW: MOV A,R7。 没有全部唱完,唱下一首 ,歌曲的入口信息调整 ADD A,4 MOV R7,A INC 22H CLR EA PUSH DPH PUSH DPL MOV A,22H MOV DPTR,OUT_TAB MOVC A,@A+DPTR MOV OUT_NUM,A。 数码管显视相应的歌曲编号 POP DPL POP DPH WWW: SETB EA AJMP START0。 开始下一首的演唱 F_T0: MOV TH0,21H。 定时器 0 置初值 MOV TL0,20H CPL OUT。 频率产生 RETI NEXT_SONG: PUSH ACC。 下一曲中断程序 处理,保护现场 PUSH DPH PUSH DPL CLR EA。 关中断 MOV A,22H CJNE A,N,Q。 是最后一首吗。 21 MOV R7,00H。 是最后一首,则 R7 指向第一首,演唱第一首 MOV 22H,01H AJMP BACK Q: INC 22H。 不是最后一首,唱下一首 ,R7 内容加 4,歌曲数加 1 MOV A,R7 ADD A,4 MOV R7,A BACK: MOV R4,00H。 数码管显视相应的歌曲编号 MOV A,22H MOV DPTR,OUT_TAB MOVC A,@A+DPTR MOV OUT_NUM,A。 ******************************************** MOV B,R0。 对下首要演唱的歌曲的几分拍。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。