单片机音乐播放器课程设计

更新时间:2023-12-10 11:20:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

河南科技大学测仪专业单片机课程设计音乐播放器汇编程序

ORG 0000H JMP START ORG 000BH JMP TIM0 ORG 0030H

;汇编起始地址从0000H开始 ;转移到START程序 ; ; ;

;设T0工作在方式1,(高4位控制T1,

START:MOV TMOD,#01H

低4位控制T0;M1,M0决定工作方式) MOV IE,#82H

;允许T0溢出中断 ; ;

;把指定单元地址中的数据存入16位

START0:MOV 30H,#00H NEXT:MOV A,30H

MOV DPTR,#TABLE 数据寄存器DPTR中 MOVC A,@A+DPTR 据存入累加器A中 MOV R2,A JZ END0

;将外部数据寄存器DPTR中的数

;

;累加器为0则转移(即最后累加器中为00H

时音乐结束,跳转到END0) ANL A,#0FH

;立即数“逻辑与”到累加器(累加器高位

清零,低位保持) MOV R5,A

;

MOV A,R2 SWAP A

;

;累加器内高低半字节交换 ANL A,#0FH JNZ SING

的数据之间为一节拍 CLR TR0 JMP D1

SING:DEC A MOV 22H,A RL A

MOV DPTR,#TABLE1 MOVC A,@A+DPTR MOV TH0,A 字节) MOV 21H,A MOV A,22H RL A INC A

MOVC A,@A+DPTR MOV TL0,A MOV 20H,A SETB TR0

;即#TABLE中数据低位清零

;累加器不为0则转移,故每两个高位为0

;T0溢出,关闭T0 ;

;累加器减1 ;

;累加器循环左移 ; ;

;把累加器A中的数据放入定时器0(高

; ;

; ;累加器加1,取下一个音符 ;

; ;

;接通T0 D1:CALL DELAY INC 30H

JMP NEXT

END0:CLR TR0 JMP START0

TIM0:PUSH ACC PUSH PSW

状态)

MOV TH0,21H MOV TL0,20H CPL P3.7 POP PSW POP ACC RETI

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

DJNZ R5,DELAY RET

;跳转到延时程序DELAY

;地址30H中的数据加1后仍放入30H中 ;

;关闭T0中断

;跳转到START0程序,即音乐循环播放 ;对累加器进行压栈

;对PSW进行压栈(PSW存储累加器

;

;

;对P3.7口取反操作,演奏音乐 ;出栈操作

;

;中断返回 ;延时程序(音符演奏时间控制)

; ;

;减1不为0循环进行 ;减1不为0则跳转到D3程序 ;

;

;返回D1程序,即第37行

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

DB 82H,01H,81H,0F4H,0D4H ; DB 0B4H,0A4H,94H

;

DB 0E2H,01H,0E1H,0D4H,0B4H ; DB 0C4H,0B4H,04H

; ; ; ; ;

DB 82H,01H,81H,94H,84H DB 0B4H,0A4H,04H

DB 82H,01H,81H,94H,84H DB 0C4H,0B4H,04H

DB 82H,01H,81H,0F4H,0D4H ; DB 0B4H,0A4H,94H

;

DB 0E2H,01H,0E1H,0D4H,0B4H ; DB 0C4H,0B4H,04H DB 00H

; ;

END

;

程序原理图:

本文来源:https://www.bwwdw.com/article/30z5.html

Top