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

📄 music.asm

📁 《爱上单片机》配书光盘
💻 ASM
字号:
/********************************************************************
 *  主    页 :  HTTP://WWW.QLMCU.COM             				
 *                                                              
 *  程序功能 :  用单片机演奏《老鼠爱大米》
 *                                                                         
 *  应用软件 :  KEIL C                                               
 *                                                                      
 *  版    本 :  KEIL 7.06 
 *                                                         
 *  硬    件 :  WS803、WS804、WS806   
 *                                                               
 *  创建时间 :  2005-07-28
 *    
 *  程序整理 :  benladn911
 *      
 *  注:为了有更多实用的实验程序供大家学习,部分程序参考网上的资源,
 *      在此谢谢这些无私奉献的朋友!!!       
 *                        
 ********************************************************************/  


PP EQU 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

MUSIC1:
NOP
CLR A ;;A;清零
MOVC A,@A+DPTR ;查表取代码
JZ END0 ;是00H,则结束
CJNE A,#0FFH,MUSIC5 ;;如果是休止符,往下执行
LJMP MUSIC3

MUSIC5:
NOP
MOV R6,A ;;R6=18H音符的频率
INC DPTR ;DPTR;;加一
MOV A,#0
MOVC A,@A+DPTR ;取节拍代码送R7
MOV R7,A ;;R7=30H音符发音的时间
SETB TR0 ;启动计数 

MUSIC2:
NOP
CPL PP ;音乐输出口控制
MOV A,R6
MOV R3,A ;;R3=R6=18H
LCALL DEL
MOV A,R7
CJNE A,20H,MUSIC2 ;中断计数器(20H)=R7否?

;不等,则继续循环

MOV 20H,#00H ;等于,则取下一代码

INC DPTR

LJMP MUSIC1

MUSIC3:

NOP ;休止100毫秒

CLR TR0 

MOV R2,#0DH ;R2=13

MUSIC4:

NOP

MOV R3,#0FFH ;R3=255

LCALL DEL

DJNZ R2,MUSIC4

INC DPTR

LJMP MUSIC1

END0:

NOP

MOV R2,#0FFH ;歌曲结束,延时1秒后继续

MUSIC6:

MOV R3,#00H

LCALL DEL

DJNZ R2,MUSIC6

LJMP MUSIC0

DEL:

NOP

DEL3: 

MOV R4,#0cH

DEL4: 

NOP

DJNZ R4,DEL4

NOP

DJNZ R3,DEL3

RET

NOP



DAT:

DB 30H,20H,2BH,10H,26H,10H

DB 26H,20H,26H,20H,2BH,20H,30H,10H,2BH,10H,2BH,60H,30H,10H,2BH,10H

DB 26H,20H,26H,20H,2BH,20H,30H,20H,30H,60H,40H,10H,39H,10H

DB 40H,40H,40H,10H,40H,10H,39H,10H,30H,10H,30H,60H,30H,20H

DB 30H,20H,30H,20H,30H,10H,2BH,10H,2BH,40H,30H,20H,2BH,10H,26H,10H

DB 26H,20H,26H,20H,20H,20H,1CH,10H,2BH,10H,2BH,40H,26H,20H,2BH,10H,30H,10H

DB 30H,20H,30H,20H,2BH,20H,26H,10H,20H,10H,20H,60H,40H,10H,40H,10H

DB 39H,20H,30H,10H,30H,10H,30H,10H,26H,30H,2BH,20H,30H,20H,30H,20H,2BH,10H,30H,10H

DB 30H,0C0H,26H,20H,26H,10H,20H,10H

DB 20H,20H,20H,10H,20H,10H,20H,20H,20H,10H,1CH,10H,1CH,40H,26H,20H,2BH,20H

DB 30H,20H,30H,20H,30H,20H,2BH,10H,26H,10H,26H,60H,26H,10H,20H,10H

DB 20H,20H,20H,20H,20H,20H,1CH,10H,18H,10H,18H,20H,1CH,20H,20H,20H,26H,20H

DB 2BH,20H,30H,20H,30H,20H,39H,10H,2BH,10H,2BH,60H,26H,10H,20H,10H

DB 20H,20H,20H,20H,20H,10H,1CH,20H,20H,10H,1CH,40H,26H,20H,2BH,20H

DB 30H,20H,30H,20H,30H,20H,2BH,10H,26H,10H,26H,60H,26H,10H,20H,10H

DB 20H,20H,20H,20H,20H,20H,1CH,10H,18H,10H,18H,20H,1CH,20H,20H,20H,26H,10H,2BH,10H

DB 2BH,20H,2BH,20H,2BH,80H,30H,10H,26H,20H,24H,10H

DB 26H,20H,2BH,20H,2BH,80H,26H,20H,2BH,10H,30H,10H





DB 30H,40H,26H,20H,2BH,10H,30H,10H,30H,40H,26H,20H,2BH,20H

DB 26H,20H,30H,20H,26H,20H,1CH,10H,20H,10H,20H,60H,26H,10H,20H,10H

DB 1CH,20H,1CH,10H,20H,10H,20H,20H,1CH,10H,20H,10H,20H,40H,26H,10H,2BH,10H,30H,20H

DB 2BH,20H,2BH,10H,26H,10H,2BH,20H,30H,10H,2BH,10H,2BH,40H,26H,20H,2BH,10H,30H,10H

DB 30H,40H,26H,20H,2BH,10H,30H,10H,30H,40H,26H,20H,2BH,20H

DB 26H,20H,30H,20H,26H,10H,1CH,20H,20H,10H,20H,60H,26H,10H,20H,10H

DB 1CH,20H,1CH,20H,18H,20H,20H,10H,1CH,10H,20H,30H,20H,10H,26H,10H,2BH,10H,30H,20H

DB 2BH,40H,2BH,10H,30H,10H,2BH,10H,26H,10H,2BH,40H,26H,20H,26H,20H,2BH,60H,30H,20H,30H,0C0H

DB 00H





END

⌨️ 快捷键说明

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