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

📄 059_单片机演奏音乐.asm

📁 本代码是关于单片机演奏音乐的方面的
💻 ASM
字号:
//|******************************************|
//|      AT89S52,fosc=22.1184MHz             |
//|      Author: Sun An-Qing                 |
//|      Date:   2005/11/22                  |
//|      www.supermcu.com                    |
//|      glsaq@sina.com.cn                   |
//|      版权所有,供学习使用,请勿商业用途  |
//|******************************************|

//|******************************************|
//|      SP_Lab_009:单片机播放音乐           |
//|                 (C51)                    |
//|******************************************|

//|******************************************|
//|通过P3.7接口连接的蜂鸣器来播放音乐        |
//|******************************************|

SPK 		BIT P3.7

			ORG 0000H
			LJMP START
			ORG 000BH
			INC 20H ;中断服务,中断计数器加1
			MOV TH0,#0D8H
			MOV TL0,#0EFH ;12M晶振,形成10毫秒中断
			RETI

START: 
			MOV SP,#50H
			MOV TH0,#0D8H
			MOV TL0,#0EFH
			MOV TMOD,#01H
			MOV IE,#82H
MUSIC0:
			NOP
			MOV DPTR,#DAT ;表头地址送DPTR
			MOV 20H,#00H ;中断计数器清0
			MOV B,#00H ;表序号清0
MUSIC1:
			NOP
			CLR A
			MOVC A,@A+DPTR ;查表取代码
			JZ END0 ;是00H,则结束
			CJNE A,#0FFH,MUSIC5
			LJMP MUSIC3
MUSIC5:
			NOP
			MOV R6,A
			INC DPTR
			MOV A,B
			MOVC A,@A+DPTR ;取节拍代码送R7
			MOV R7,A
			SETB TR0 ;启动计数
MUSIC2:
			NOP
			CPL SPK
			MOV A,R6
			MOV R3,A
			LCALL DEL
			MOV A,R7
			CJNE A,20H,MUSIC2 ;中断计数器(20H)=R7否?
			;不等,则继续循环
			MOV 20H,#00H ;等于,则取下一代码
			INC DPTR
			; INC B
			LJMP MUSIC1
MUSIC3:
			NOP
			CLR TR0 ;休止100毫秒
			MOV R2,#0DH
MUSIC4:
			NOP
			MOV R3,#0FFH
			LCALL DEL
			DJNZ R2,MUSIC4
			INC DPTR
			LJMP MUSIC1
END0:
			NOP
			MOV R2,#64H ;歌曲结束,延时1秒后继续
MUSIC6:
			MOV R3,#00H
			LCALL DEL
			DJNZ R2,MUSIC6
			LJMP MUSIC0
DEL:
			NOP
DEL3: 
			MOV R4,#02H
DEL4: 
			NOP
			DJNZ R4,DEL4
			NOP
			DJNZ R3,DEL3
			RET
			NOP
DAT:
			db 26h,20h,20h,20h,20h,20h,26h,10h,20h,10h,20h,80h,26h,20h,30h,20h
			db 30h,20h,39h,10h,30h,10h,30h,80h,26h,20h,20h,20h,20h,20h,1ch,20h
			db 20h,80h,2bh,20h,26h,20h,20h,20h,2bh,10h,26h,10h,2bh,80h,26h,20h
			db 30h,20h,30h,20h,39h,10h,26h,10h,26h,60h,40h,10h,39h,10h,26h,20h
			db 30h,20h,30h,20h,39h,10h,26h,10h,26h,80h,26h,20h,2bh,10h,2bh,10h
			db 2bh,20h,30h,10h,39h,10h,26h,10h,2bh,10h,2bh,20h,2bh,40h,40h,20h
			db 20h,10h,20h,10h,2bh,10h,26h,30h,30h,80h,18h,20h,18h,20h,26h,20h
			db 20h,20h,20h,40h,26h,20h,2bh,20h,30h,20h,30h,20h,1ch,20h,20h,20h
			db 20h,80h,1ch,20h,1ch,20h,1ch,20h,30h,20h,30h,60h,39h,10h,30h,10h
			db 20h,20h,2bh,10h,26h,10h,2bh,10h,26h,10h,26h,10h,2bh,10h,2bh,80h
			db 18h,20h,18h,20h,26h,20h,20h,20h,20h,60h,26h,10h,2bh,20h,30h,20h
			db 30h,20h,1ch,20h,20h,20h,20h,80h,26h,20h,30h,10h,30h,10h,30h,20h
			db 39h,20h,26h,10h,2bh,10h,2bh,20h,2bh,40h,40h,10h,40h,10h,20h,10h
			db 20h,10h,2bh,10h,26h,30h,30h,80h,00H

			END

⌨️ 快捷键说明

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