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

📄 music.asm

📁 51单片机“心形”音乐电子贺卡源码
💻 ASM
字号:

;好使的程序
;先闪烁8下
;唱生日快乐歌两次
;跑马闪烁
;再来一遍




ORG 0000H
AJMP START
ORG 000BH
JMP TIM0
ORG 0030H
START:  LCALL	SD		;闪灯程序
       MOV	P1,#00H	;演奏时保持灯全亮
MAIN: ;唱歌主程序
MOV TMOD,#01H ;设定时方式
MOV IE,#82H ;开中断

START0:
MOV 30H,#00H ;
NEXT:MOV A,30H
MOV DPTR,#TABLE
MOVC A,@A+DPTR ;查表取音调和节拍
MOV R2,A
JZ END0 ;为零,不进行处理.
ANL A,#0FH
MOV R5,A ;将节拍存入R5
MOV A,R2
SWAP A
ANL A,#0FH
JNZ SING ;根据音调决定是否演奏.
CLR TR0
JMP D1
SING:DEC A
MOV 22H,A ;将音调存入22H.
RL A

MOV DPTR,#TABLE1
MOVC A,@A+DPTR ;根据音调决定定时器初值.
MOV TH0,A ;放入TH0
MOV 21H,A
MOV A,22H
RL A
INC A
MOVC A,@A+DPTR
MOV TL0,A ;放入TL0
MOV 20H,A
SETB TR0 ;启动定时

D1: CALL DELAY
INC 30H
JMP NEXT
END0:CLR TR0
JMP TT					;决定是否重新演奏音乐,即音乐的次数

TIM0: ;定时器中断服务程序
PUSH ACC
PUSH PSW
MOV TL0,20H ;重赋初值.
MOV TH0,21H
CPL P3.1
POP PSW
POP ACC
RETI

DELAY:MOV R7,#02H ;延时子程序
D2: MOV R4,#187
D3: MOV R3,#248
DJNZ R3,$
DJNZ R4,D3
DJNZ R7,D2
DJNZ R5,DELAY
RET

TABLE1: ;决定音调的定时初值.
DW 64260,64400,64524,64580
DW 64684,64777,64820,64898
DW 64968,65030,65058,65110
DW 65157,65178,65217

TABLE: ;决定音调和节拍的表格,不同的歌曲只是此表不同
;1
DB 82H,01H,81H,94H,84H,0B4H,0A4H,04H,82H,01H,81H,94H,84H,0C4H,0B4H,04H
;2
DB 82H,01H,81H,0F4H,0D4H,0B4H,0A4H,94H,0E2H,01H,0E1H,0D4H,0B4H,0C4H,0B4H,04H
;3
DB 82H,01H,81H,94H,84H,0B4H,0A4H,04H,82H,01H,81H,94H,84H,0C4H,0B4H,04H
;4
DB 82H,01H,81H,0F4H,0D4H,0B4H,0A4H,94H,0E2H,01H,0E1H,0D4H,0B4H,0C4H,0B4H,04H,00

TT:   	MOV	A,#0FEH
	LCALL	LOP1
	LCALL	LOP2
	LCALL	LOP3
	LCALL	LOP4
	LJMP	START
	RET
TY:MOV	P1,#0FFH			;一定要有下面部分不然程序会停在lop1,灭灯程序不要
	LCALL	DELAYX
	LCALL	DELAYX
	LCALL	DELAYX
				;必须加上返回主函数,不然程序会顺序执行DELAY子程序

SD:	MOV	23H,#8			;23,闪灯5CI程序,闪烁次数
	LCALL	MAIN1
	RET
MAIN1:
	MOV	P1,#00H
	LCALL	DELAYX
	LCALL	DELAYX
	MOV	P1,#0FFH
        LCALL	DELAYX
	LCALL	DELAYX
	DJNZ	23H,MAIN1		;会顺序执行
  	RET
	
LOP1:MOV	25H,#168	;168跑马灯的次数,一圈为8,21圈
ZP:MOV	P1,A
	RL	A
	LCALL	DELAYX
	DJNZ	25H,ZP
	RET

LOP2:MOV 27H,#168			;跑马的次数
FP:MOV	P1,A
	RR	A
	LCALL	DELAYX
	DJNZ	27H,FP
	RET

LOP3:MOV	29H,#16
ZP1:MOV	P1,A
	RL	A
	LCALL	DELAYX
	DJNZ	29H,ZP1
	RET
LOP4:MOV	31H,#16	
FP1:MOV	P1,A
	RR	A
	LCALL	DELAYX
	DJNZ	31H,FP1
	RET	
	
DELAYX:MOV	R1,#200
D1X:	MOV	R6,#200
D2X:	DJNZ	R6,D2X
	DJNZ	R1,D1X
	RET


END

⌨️ 快捷键说明

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