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

📄 wl003.asm

📁 本例程单片机唱歌的汇编语言程序,使用的开发工具是keil工具
💻 ASM
字号:
;********************************************************************************
;*  标题:  伟纳电子ME300B单片机开发系统演示程序 - 单片机播放音乐                *
;*  文件:  wl003.asm                                                            *
;*  日期:  2004-1-5                                                             *
;*  版本:  1.0                                                                  *
;*  作者:  伟纳电子 - Freeman                                                   *
;*  邮箱:  freeman@willar.com                                                   *
;*  网站: http://www.willar.com                                                *
;********************************************************************************
;*  描述:                                                                       *
;*         单片机播放歌曲《兰花草》                                             *
;*                                                                              *
;*                                                                              *
;*                                                                              *
;********************************************************************************
;* 【版权】 Copyright(C)伟纳电子 www.willar.com  All Rights Reserved            *
;* 【声明】 此程序仅用于学习与参考,引用请注明版权和作者信息!                  *
;********************************************************************************

SPK	EQU	P3.7			; 蜂鸣器所在端口

	ORG	0000H
	JMP	START
	
START:
	MOV	R3,#00H
NEXT:
	MOV	A,R3
	MOV	DPTR,#TABLE
	MOVC	A,@A+DPTR
	JZ	START
	MOV	R7,A
	INC	R3
	MOV	A,R3
	MOVC	A,@A+DPTR
	MOV	R2,A
	ACALL	SONG
	INC	R3
	SJMP	NEXT


;===============================================================================	
;===  歌曲播放子程序 ===
SONG:
	MOV	A,R2					; 取出节拍
	RL	A
	JNZ	KEEP
	MOV	A,#01H
KEEP:
	MOV	R2,A
REPEAT:
	ACALL	EIGHTH
	DJNZ	R2,REPEAT
	RET
	
;===============================================================================	
;===  产生1/8拍延时子程序  ===		
EIGHTH:
	MOV	A,R7					; 查表取出廷时参数,保存到R4
	MOV	DPTR,#DELAY_T
	MOVC	A,@A+DPTR
	MOV	R4,A
	MOV	A,R7					; 查表取出1/8拍周期数,保存到R5
	MOV	DPTR,#S_PARA
	MOVC	A,@A+DPTR
	MOV	R5,A
NEXTCYC:
	ACALL	SOUND
	DJNZ	R5,NEXTCYC
	RET
	
;===============================================================================	
;===  发声子程序 ===	
SOUND:
	SETB	SPK
	ACALL	SDELAY
	CLR	SPK
	ACALL	SDELAY
	RET
	
;===============================================================================	
;===  延时子程序  ===
SDELAY:
	MOV	A,R4					; 廷时值在R4内
	MOV	R0,A
XL2:
	MOV	R1,#03H
DL1:
	NOP
	DJNZ	R1,DL1
	DJNZ	R0,XL2
	RET
;===============================================================================	
;===  1/8拍周期表  ===
S_PARA:
	DS	1DH
	DB	15H,16H,00
	DB	19H,00H,1CH,00H,1FH,21H,00H,25H
	DB	00H,29H,2CH,00H,31H,34H,37H,00H
	DB	3EH,41H,00H,49H,00H,52H,57H,00H
	DB	62H
	
;===============================================================================	
;===  延时参数表  ===
DELAY_T:
	DS	1DH
	DB	7EH,77H,00H
	DB	6AH,00H,5EH,00H,54H,4FH,00H,46H
	DB	00H,3FH,3BH,00H,35H,32H,2FH,00H
	DB	2AH,27H,00H,23H,00H,1FH,1DH,0C0H
	DB	1AH
	
;===============================================================================	
;===  歌曲表  ===
TABLE:
	DW	2202H,2902H,2902H,2902H,2906H,2702H	;我从山中来
	DW	2502H,2702H,2502H,2402H,2208H		;带着兰花草
	DW	2E02H,2E02H,2E02H,2E02H,2E06H,2C02H	;种在小园中
	DW	2902H,2C02H,2D02H,2A02H,2908H		;祈祷花开早
	DW	2902H,2E02H,2E02H,2C02H,2906H,2702H	;一日看三回
	DW	2502H,2702H,2502H,2402H,2206H,1D02H	;看得花时过
	DW	1D02H,2502H,2502H,2402H,2206H,2902H	;兰花却依然
	DW	2702H,2502H,2402H,2002H,2208H		;苞也无一个
	DW	0000H					;
	
	END	

⌨️ 快捷键说明

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