资源描述:
《汇编语言音乐播放器》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、ORG 0000H AJMP LOOOOP //绝对转移指令。 ORG 000BH AJMP TIM0 ORG 001BH RETI //中断返回指令 ORG 0023H LOOOOP: MOV A,#01H LOOOP: MOV P1,#3FH MOV P2,A RL A //A左移MOV R2,#0FFH DELAY0: MOV R3,#0FFH DJNZ R3,$ //$在某些51的汇编语言里表示本条指令的地址DJNZ R3,$ 意思是R3减一,不为零跳转到本条指令(为零
2、执行下一条指令)MOV R4,#0FFH DJNZ R4,$ DJNZ R2,DELAY0 JNB P3.3,START //直接寻址位不为1转LJMP LOOOP //长调用指令START: MOV P1,#06H MOV R5,#00H /初始化 MOV TMOD,#00010001B MOV IE,#10101010B MOV DPTR,#TAB2 //装第一首歌 MOV 30H,DPL //DPTR低8位送30H暂存MOV 31
3、H,DPH //DPTR高8位送31H暂存 START1: INC R4 寄存器内容加1//产生8位随机数 MOV A,#01010101B MOV B,R4 MUL AB MOV P2,A MOV DPL,30H MOV DPH,31H MOV A,#00H MOVC A,@A+DPTR //查表 MOV R0,A //音符数据送R0暂存 MOV A,#00H INC DPTR //D
4、PTR的内容加1 MOVC A,@A+DPTR //查表 MOV R1,A //节拍数据送R1暂存 INC DPTR MOV 30H,DPL MOV 31H,DPH CJNE A,#01H,ELECT//立即数与A相比不相等则转移/一首歌没结束转ELECT INC R5 LJMP KEYWORK //结束歌曲计数器加1ELECT: JZ START //所有歌曲结束转START循环(累加器内容为0转移)
5、 MOV A,R0 JNZ SING (累加器内容不为0转移) CLR TR0 //累加器内容清0 SETB P3.7 //置位直接位 LOOP1: ACALL DELAY //绝对调用(调用延时子程序) DJNZ R1,LOOP1 SJMP START1 //相对转移SING: MOV DPTR,#TAB1 //音符表首地址送DPTR DEC R0 //R0内容减1(计算音符) MOV A,R0 MOV B,#02H MUL AB //A乘以B MOV
6、R0,A MOVC A,@A+DPTR MOV 21H,A INC DPTR //数据之指针加1 MOV A,R0 MOVC A,@A+DPTR MOV 20H,A MOV TL0,20H MOV TH0,21H SETB TR0 开T0定时器 LOOP2: ACALL DELAY DJNZ R1,LOOP2 AJMP START1 TIM0: MOV TL0,20H MOV TH0,21H
7、 CPL P3.7 RETI 中断返回 DELAY: MOV R2,#70 DELAY1: MOV R3,#252 DJNZ R3,$ JNB P3.3,AGAIN 重复正播放的曲子 JNB P3.4,FORM //上一曲开关按下转FORM JNB P3.5,NEXT //下一曲开关按下转NEXT DJNZ R2,DELAY1 RET AGAIN: JNB P3.3,$ 等待键释放 LJMP KEYWORK FORM: CLR EA
8、 关中断 JNB P3.4,$ 等待键释放 CJNE R5,#00H,ZERO 不是第一首歌曲转ZER0 MOV R5,#04H//是第一首将最后一首歌曲装入歌曲计数器 SJMP KEYWORK ZERO: DEC R5 歌曲向上进一首 SJMP KEYWORK NEXT: CLR EA JNB P3.5,$ CJNE R5,#04H,LAST