51单片机汇编语言音乐程序文档格式.docx
《51单片机汇编语言音乐程序文档格式.docx》由会员分享,可在线阅读,更多相关《51单片机汇编语言音乐程序文档格式.docx(17页珍藏版)》请在冰豆网上搜索。
SETBET0
SETBET1
SETBTR0
SETBTR1
SETBNEXT
JBNEXT,$
JMPYD
PD:
CJNEA,#00H,L1
INCDPH
L1:
RET
;
音调产生子程序
TONE:
CPLP2.0
RETI
节拍产生子程序
BEAT:
DJNZR5,L2
L3:
L2:
CLRTR0
CLRTR1
CLRNEXT
JMPL3
两只老虎音符表
TAB:
DB0FBH,0F9H,08H,0FCH,066H,08H,0FCH,0C7H,08H,0FBH,0F9H,08H
DB0FCH,0C7H,08H,0FCH,0F3H,08H,0FDH,4AH,10H,0FCH,0C7H,08H
DB0FCH,0F3H,08H,0FDH,4AH,08H,0FDH,4AH,04H,0FDH,95H,04H
DB0FDH,4AH,04H,0FCH,0F3H,04H,0FCH,0C7H,08H,0FBH,0F9H,08H
DB0FDH,4AH,04H,0FDH,95H,04H,0FDH,4AH,04H,0FCH,0F3H,04H
DB0FCH,0C7H,08H,0FBH,0F9H,08H,0FCH,66H,08H,0FAH,93H,08H
DB0FBH,0F9H,08H,00H,08H,0FCH,66H,04H,0FAH,93H,08H
DB0FBH,0F9H,08H,00H,10H,0FFH,0FFH
END
02祝你平安
ORG0000H
LJMPSTART
ORG000BH
INC20H;
中断服务,中断计数器加1
MOVTH0,#0D8H
MOVTL0,#0EFH;
12M晶振,形成10毫秒中断
RETI
START:
MOVSP,#50H
MOVTL0,#0EFH
MOVTMOD,#01H
MOVIE,#82H
MUSIC0:
NOP
MOVDPTR,#DAT;
表头地址送DPTR
MOV20H,#00H;
中断计数器清0
MOVB,#00H;
表序号清0
MUSIC1:
CLRA
MOVCA,@A+DPTR;
查表取代码
JZEND0;
是00H,则结束
CJNEA,#0FFH,MUSIC5
LJMPMUSIC3
MUSIC5:
MOVR6,A
INCDPTR
MOVA,B
取节拍代码送R7
MOVR7,A
SETBTR0;
启动计数
MUSIC2:
CPLP3.3
MOVA,R6
MOVR3,A
LCALLDEL
MOVA,R7
CJNEA,20H,MUSIC2;
中断计数器(20H)=R7否?
不等,则继续循环
等于,则取下一代码
;
INCB
LJMPMUSIC1
MUSIC3:
CLRTR0;
休止100毫秒
MOVR2,#0DH
MUSIC4:
MOVR3,#0FFH
DJNZR2,MUSIC4
END0:
MOVR2,#64H;
歌曲结束,延时1秒后继续
MUSIC6:
MOVR3,#00H
DJNZR2,MUSIC6
LJMPMUSIC0
DEL:
DEL3:
MOVR4,#02H
DEL4:
DJNZR4,DEL4
DJNZR3,DEL3
RET
DAT:
db26h,20h,20h,20h,20h,20h,26h,10h,20h,10h,20h,80h,26h,20h,30h,20h
db30h,20h,39h,10h,30h,10h,30h,80h,26h,20h,20h,20h,20h,20h,1ch,20h
db20h,80h,2bh,20h,26h,20h,20h,20h,2bh,10h,26h,10h,2bh,80h,26h,20h
db30h,20h,30h,20h,39h,10h,26h,10h,26h,60h,40h,10h,39h,10h,26h,20h
db30h,20h,30h,20h,39h,10h,26h,10h,26h,80h,26h,20h,2bh,10h,2bh,10h
db2bh,20h,30h,10h,39h,10h,26h,10h,2bh,10h,2bh,20h,2bh,40h,40h,20h
db20h,10h,20h,10h,2bh,10h,26h,30h,30h,80h,18h,20h,18h,20h,26h,20h
db20h,20h,20h,40h,26h,20h,2bh,20h,30h,20h,30h,20h,1ch,20h,20h,20h
db20h,80h,1ch,20h,1ch,20h,1ch,20h,30h,20h,30h,60h,39h,10h,30h,10h
db20h,20h,2bh,10h,26h,10h,2bh,10h,26h,10h,26h,10h,2bh,10h,2bh,80h
db18h,20h,18h,20h,26h,20h,20h,20h,20h,60h,26h,10h,2bh,20h,30h,20h
db30h,20h,1ch,20h,20h,20h,20h,80h,26h,20h,30h,10h,30h,10h,30h,20h
db39h,20h,26h,10h,2bh,10h,2bh,20h,2bh,40h,40h,10h,40h,10h,20h,10h
db20h,10h,2bh,10h,26h,30h,30h,80h,00H
03生日歌
JMPSTART
ORG000BH
JMPTIM0
ORG0030H
MOVTMOD,#01H
START0:
MOV30H,#00H
NEXT:
MOVA,30H
MOVDPTR,#TABLE
MOVCA,@A+DPTR
MOVR2,A
JZEND0
ANLA,#0FH
MOVR5,A
MOVA,R2
SWAPA
JNZSING
CLRTR0
JMPD1
SING:
DECA
MOV22H,A
RLA
MOVDPTR,#TABLE1
MOVTH0,A
MOV21H,A
MOVA,22H
INCA
MOVTL0,A
MOV20H,A
SETBTR0
D1:
CALLDELAY
INC30H
JMPNEXT
CLRTR0
JMPSTART0
TIM0:
PUSHACC
PUSHPSW
MOVTH0,21H
MOVTL0,20H
CPLP3.7
POPPSW
POPACC
RETI
DELAY:
MOVR7,#02
D2:
MOVR4,#187
D3:
MOVR3,#248
DJNZR3,$
DJNZR4,D3
DJNZR7,D2
DJNZR5,DELAY
RET
TABLE1:
DW64260,64400,64524,64580
DW64684,64777,64820,64898
DW64968,65030,65058,65110
DW65157,65178,65217
TABLE:
DB82H,01H,81H,94H,84H
DB0B4H,0A4H,04H
DB0C4H,0B4H,04H
DB82H,01H,81H,0F4H,0D4H
DB0B4H,0A4H,94H
DB0E2H,01H,0E1H,0D4H,0B4H
DB00H
END
04八月桂花香
LJMPSTART
INC20H;
MOVTH0,#0D8H
MOVTL0,#0EFH;
RETI
MOVSP,#50H
MOVTL0,#0EFH
MOVIE,#82H
NOP
MOVDPTR,#DAT;
MOV20H,#00H;
CLRA;
A清零
MOVCA,@A+DPTR;
JZEND0;
CJNEA,#0FFH,MUSIC5;
如果是休止符,往下执行
LJMPMUSIC3
MOVR6,A;
R6=18H音符的频率
INCDPTR;
DPTR加一
MOVA,#0
MOVR7,A;
R7=30H音符发音的时间
SETBTR0;
CPLP2.3;
P2.3是音乐输出引脚
MOVA,R6
MOVR3,A;
籖3=R6=18H
LCALLDEL
MOVA,R7
CJNEA,20H,MUSIC2;
INCDPTR
LJMPMUSIC1
NOP;
CLRTR0
MOVR2,#0DH;
R2=13
MOVR3,#0FFH;
R3=255
DJNZR2,MUSIC4
MOVR2,#0FFH;
MOVR3,#00H
DJNZR2,MUSIC6
LJMPMUSIC0
MOVR4,#02H
DJNZR4,DEL4
DJNZR3,DEL3
RET
DB18H,30H,1CH,10H
DB20H,40H,1CH,10H
DB18H,10H,20H,10H
DB1CH,10H,18H,40H
DB1CH,20H,20H,20H
DB1CH,20H,18H,20H
DB20H,80H,0FFH,20H
DB30H,1CH,10H,18H
DB20H,15H,20H,1CH
DB20H,20H,20H,26H
DB40H,20H,20H,2BH
DB20H,26H,20H,20H
DB20H,30H,80H,0FFH
DB20H,20H,1CH,10H
DB18H,10H,20H,20H
DB26H,20H,2BH,20H
DB30H,20H,2BH,40H
DB20H,20H,1CH,10H
DB18H,10H,20H,20H
DB26H,20H,2BH,20H
DB30H,20H,2BH,40H
DB20H,30H,1CH,10H
DB18H,20H,15H,20H
DB1CH,20H,20H,20H
DB26H,40H,20H,20H
DB2BH,20H,26H,20H
DB20H,20H,30H,80H
DB20H,10H,1CH,10H
DB20H,20H,26H,20H
DB2BH,20H,30H,20H
DB2BH,40H,20H,15H
DB1FH,05H,20H,10H
DB1CH,10H,20H,20H
DB26H,20H,2BH,20H
DB20H,20H,30H,30H
DB20H,30H,1CH,10H
DB18H,40H,1CH,20H
DB20H,20H,26H,40H
DB13H,60H,18H,20H
DB15H,40H,13H,40H
DB18H,80H,00H
end
05兰花草
SPKEQUP3.3;
蜂鸣器所在端口
ORG0000H
JMPSTART
MOVA,R3
MOVCA,@A+DPTR
JZSTART
INCR3
MOVR2,A
ACALLSONG
SJMPNEXT
===============================================================================
===歌曲播放子程序===
SONG:
MOVA,R2;
取出节拍
RLA
JNZKEEP
MOVA,#01H
KEEP:
REPEAT:
ACALLEIGHTH
DJNZR2,REPEAT
===产生1/8拍延时子程序===
EIGHTH:
MOVA,R7;
查表取出廷时参数,保存到R4
MOVDPTR,#DELAY_T
MOVR4,A
查表取出1/8拍周期数,保存到R5
MOVDPTR,#S_PARA
MOVR5,A
NEXTCYC:
ACALLSOUND
DJNZR5,NEXTCYC
===发声子程序===
SOUND:
SETBSPK
ACALLSDELAY
CLRSPK
===延时子程序===
SDELAY:
MOVA,R4;
廷时值在R4内
MOVR0,A
XL2:
MOVR1,#03H
DL1:
DJNZR1,DL1
DJNZR0,XL2
===1/8拍周期表===
S_PARA:
DS1DH
DB15H,16H,00
DB19H,00H,1CH,00H,1FH,21H,00H,25H
DB00H,29H,2CH,00H,31H,34H,37H,00H
DB3EH,41H,00H,49H,00H,52H,57H,00H
DB62H
===延时参数表===
DELAY_T:
DB7EH,77H,00H
DB6AH,00H,5EH,00H,54H,4FH,00H,46H
DB00H,3FH,3BH,00H,35H,32H,2FH,00H
DB2AH,27H,00H,23H,00H,1FH,1DH,0C0H
DB1AH
===歌曲表===
DW2202H,2902H,2902H,2902H,2906H,2702H;
我从山中来
DW2502H,2702H,2502H,2402H,2208H;
带着兰花草
DW2E02H,2E02H,2E02H,2E02H,2E06H,2C02H;
种在小园中
DW2902H,2C02H,2D02H,2A02H,2908H;
祈祷花开早
DW2902H,2E02H,2E02H,2C02H,2906H,2702H;
一日看三回
DW2502H,2702H,2502H,2402H,2206H,1D02H;
看得花时过
DW1D02H,2502H,2502H,2402H,2206H,2902H;
兰花却依然
DW2702H,2502H,2402H,2002H,2208H;
苞也无一个
DW0000H;
END