⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lvdaoqu.asm

📁 单片机演奏音乐实验hex文件十六进制文件
💻 ASM
字号:

	ORG	00H		;主程序起始地址
	JMP	START	;跳至主程序	
	ORG	0BH		;TIMER0中断起始地址	
	JMP	TIM0	;跳至TIMER0中断子程序
START:	MOV	TMOD,#00000001B	;设TIMER0在MODEL
	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	;是否取到OO(结束码)?
	ANL	A,#0FH	;不是,则取低4位(节拍码)
	MOV	R5,A	;将节拍码存入R5
	MOV	A,R2	;将取到的简谱码再载入A
	SWAP	A	;高低4位交换
	ANL	A,#0FH	;取低4位(音符码)
	JNZ	SING	;取到的音符码是否为O?
	CLR	TR0	;是,则不发音
	JMP	D1	;跳至DI
SING:	DEC	A	;取到的音符码减1(不含O)
	MOV	22H,A	;存入(22H)
	RL	A	;乘2
	MOV	DPTR,#TABLEL	;至TABLEI取相对的高位字节计数值
	MOVC	A,@A+DPTR
	MOV	TH0,A	;取到的高位字节存入TH0
	MOV	21H,A	;一	;取到的高位字节存入(21H)
	MOV	A,22H	;再载入取到的音符码
	RL	A	;乘2
	INC	A	;	力I{L
	MOVC	A,@A+DPTR	;至TABLEI取相对的低位字节计数值
	MOV	TL0,A	;取到的低位字节存入TL0
	MOV	20H,A	;取到的低位字节存入(20H)
	SETB	TR0	;启动TIMER0
D1:	CALL	DELAY	;基本单位时间L/4拍187毫秒
	INC	30H	;取简谱码指针加1
	JMP	NEXT	;取F一个码
END0:	CLR	TR0	;停止TIMER0
	JMP	START0	;重复循环
TIM0:	PUSH	ACC	;将A的值暂存于堆栈
	PUSH	PSW	;将PSW的值暂存于堆栈
	MOV	TL0,20H	;重设计数值
	MOV	TH0,21H
	CPL	P1.0	;将P10位反相
	POP	PSW	;至堆栈取回PSW的值
	POP	ACC	;至堆栈取回A的值
	RETI		;返回主程序
DELAY:	MOV	R7,#02	;187毫杪
D2:	MOV	R4,#187
D3:	MOV	R3,#248	
	DJNZ	R3,$
	DJNZ	R4,D3
	DJNZ	R7,D2
	DJNZ	R5,DELAY	;决定节拍
	RET
TABLEL:	
	DW	64021,64103,64260,64400
	DW	64524,64580,64684,64777
	DW	64820,64898,64968,65030
	DW	65058,65110,65157
TABLE:	
	;1
	DB	0A2H,0B2H,0D2H,0B2H,0A4H,082H,0D2H
	DB	082H,0A2H,82H,72H,88H
	DB	72H,82H,0A2H,82H,72H,62H,42H,62H
	DB	38H,38H
	;2
	DB	0A4H,02H,0B2H,0A4H,84H
	DB	72H,82H,72H,62H,72H,84H,72H
	DB	64H,62H,12H,34H,02H,42H
	DB	38H,38H
	;3
	DB	44H,02H,32H,44H,64H
	DB	72H,82H,72H,62H,72H,84H,0A2H
	DB	72H,74H,82H,0A4H,02H,0B2H
	DB	0A8H,0A8H
	;4
	DB	082H,0B4H,0A2H,84H,82H,72H
	DB	62H,72H,82H,0A2H,88H
	DB	72H,74H,62H,42H,32H,32H,62H
	DB	78H,78H
	;	5
	DB	82H,84H,72H,82H,0A2H,84H
	DB	72H,82H,72H,62H,48H
	DB	32H,0A2H,82H,0F2H,0A2H,0B2H,82H,72H
	DB	68H,68H
	;6
	DB	0B2H,0B2H,0B2H,0A2H,82H,84H,02H
	DB	72H,74H,62H,42H,32H,42H,62H
	DB	78H,78H
	DB	0A2H,0B2H,0A2H,72H,82H,84H,82H
	;7
	DB	72H,74H,62H,44H,64H
	DB	0A8H,0A4H,02H,0A2H
	DB	0A2H,0B1H,0A1H,82H,0A2H,084H,0B2H,0C2H
	DB	0A2H,0B2H,0A2H,82H,78H
	;8
	DB	84H,72H,62H,44H,02H,62H
	DB	72H,81H,71H,62H,72H,84H,02H,0A2H
	DB	0B4H,02H,82H,74H,82H,72H
	DB	68H,68H
	DB	00
	END



⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -