51单片机汇编语言音乐程序.docx
- 文档编号:5126158
- 上传时间:2022-12-13
- 格式:DOCX
- 页数:11
- 大小:18KB
51单片机汇编语言音乐程序.docx
《51单片机汇编语言音乐程序.docx》由会员分享,可在线阅读,更多相关《51单片机汇编语言音乐程序.docx(11页珍藏版)》请在冰豆网上搜索。
51单片机汇编语言音乐程序
01两只老虎
NEXTBIT10H;定义标志位ORG0000H
JMPMAINORG000BHJMPTONEORG001BHJMPBEATORG0100H
MAIN:
MOVTMOD,#11HMOVTH0,R2MOVTL0,R3
MOVTH1,#3CHMOVTL1,#0B0HMOVR4,#00HMOVDPTR,#TAB
YD:
MOVA,R4;取音调数据
MOVCA,@A+DPTRMOVR2,A
XRLA,#00H
JNZJP;直接取节拍INCR4
CALLPD;判断指针是否溢出MOVA,R4
MOVCA,@A+DPTRMOVR3,A
XRLA,#0FFHJZJP
MOVA,R2XRLA,#0FFHJNZMAIN
JP:
INCR4;取节拍数据
CALLPDMOVA,R4
MOVCA,@A+DPTR
MOVR5,A
SETBEASETBET0SETBET1SETBTR0SETBTR1SETBNEXTJBNEXT,$INCR4CALLPDJMPYD
PD:
MOVA,R4
CJNEA,#00H,L1INCDPH
L1:
RET
;音调产生子程序TONE:
CPLP2.0
MOVTH0,R2MOVTL0,R3RETI
;节拍产生子程序BEAT:
DJNZR5,L2
MOVTH1,#3CHMOVTL1,#0B0H
L3:
RETI
L2:
CLRTR0CLRTR1CLRNEXTJMPL3
;两只老虎音符表TAB:
DB
0FBH,0F9H,08H,0FCH,066H,08H,0FCH,0C7H,08H,0FBH,0F9H,08HDB
0FBH,0F9H,08H,0FCH,066H,08H,0FCH,0C7H,08H,0FBH,0F9H,08H
DB0FCH,0C7H,08H,0FCH,0F3H,08H,0FDH,4AH,10H,0FCH,0C7H,08H
DB
0FCH,0F3H,08H,0FDH,4AH,08H,0FDH,4AH,04H,0FDH,95H,04HDB
0FDH,4AH,04H,0FCH,0F3H,04H,0FCH,0C7H,08H,0FBH,0F9H,08HDB
0FDH,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,0FFHEND
02祝你平安
ORG0000H
LJMPSTARTORG000BH
INC20H;中断服务,中断计数器加1
MOV
TH0,#0D8H
MOV
RETI
TL0,#0EFH;12M
晶振,形成10毫秒中断
START:
MOVSP,#50HMOVTH0,#0D8HMOVTL0,#0EFHMOVTMOD,#01HMOVIE,#82H
MUSIC0:
NOP
MOV
DPTR,#DAT;表头地址送
DPTR
MOV
20H,#00H;中断计数器清
0
MOV
B,#00H;表序号清0
MUSIC1:
NOP
CLRA
MOVCA,@A+DPTR;查表取代码JZEND0;是00H,则结束
CJNEA,#0FFH,MUSIC5
LJMPMUSIC3MUSIC5:
NOP
MOVR6,AINCDPTRMOVA,B
MOVCA,@A+DPTR;取节拍代码送R7MOVR7,A
SETBTR0;启动计数MUSIC2:
NOPCPLP3.3
MOVA,R6MOVR3,ALCALLDELMOVA,R7
CJNEA,20H,MUSIC2;中断计数器(20H)=R7否?
;不等,则继续
循环
MOV20H,#00H;等于,则取下一代码INCDPTR
;INCB
LJMPMUSIC1
MUSIC3:
NOP
CLRTR0;休止100毫秒
MOVR2,#0DHMUSIC4:
NOP
MOVR3,#0FFHLCALLDELDJNZR2,MUSIC4INCDPTR
LJMPMUSIC1END0:
NOP
MOVR2,#64H;歌曲结束,延时1秒后继续
MUSIC6:
MOVR3,#00HLCALLDELDJNZR2,MUSIC6LJMPMUSIC0
DEL:
NOP
DEL3:
MOVR4,#02HDEL4:
NOP
DJNZR4,DEL4NOP
DJNZR3,DEL3
RETNOP
DAT:
db
26h,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
db
30h,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
db
20h,20h,2bh,10h,26h,10h,2bh,10h,26h,10h,26h,10h,2bh,10h,2bh,80hdb
18h,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
END
03生日歌
ORG0000HJMPSTARTORG000BHJMPTIM0ORG0030H
START:
MOVTMOD,#01HMOVIE,#82H
START0:
MOV30H,#00HNEXT:
MOVA,30H
MOVDPTR,#TABLEMOVCA,@A+DPTRMOVR2,A
JZEND0ANLA,#0FHMOVR5,AMOVA,R2SWAPAANLA,#0FHJNZSINGCLRTR0JMPD1
SING:
DECA
MOV22H,A
RLA
MOVDPTR,#TABLE1MOVCA,@A+DPTRMOVTH0,A
MOV21H,AMOVA,22HRLA
INCA
MOVCA,@A+DPTRMOVTL0,A
MOV20H,ASETBTR0
D1:
CALLDELAY
INC30HJMPNEXT
END0:
CLRTR0JMPSTART0
TIM0:
PUSHACC
PUSHPSW
MOVTH0,21H
MOVTL0,20HCPLP3.7
POPPSW
POPACCRETI
DELAY:
MOVR7,#02
D2:
MOVR4,#187
D3:
MOVR3,#248DJNZR3,$DJNZR4,D3DJNZR7,D2DJNZR5,DELAYRET
TABLE1:
DW64260,64400,64524,64580
DW64684,64777,64820,64898
DW64968,65030,65058,65110
DW65157,65178,65217TABLE:
DB82H,01H,81H,94H,84HDB0B4H,0A4H,04H
DB82H,01H,81H,94H,84HDB0C4H,0B4H,04H
DB82H,01H,81H,0F4H,0D4H
DB0B4H,0A4H,94H
DB0E2H,01H,0E1H,0D4H,0B4HDB0C4H,0B4H,04H
DB82H,01H,81H,94H,84HDB0B4H,0A4H,04H
DB82H,01H,81H,94H,84HDB0C4H,0B4H,04H
DB82H,01H,81H,0F4H,0D4H
DB0B4H,0A4H,94H
DB0E2H,01H,0E1H,0D4H,0B4HDB0C4H,0B4H,04H
DB00HEND
04八月桂花香
ORG0000HLJMPSTARTORG000BH
INC20H;中断服务,中断计数器加1MOVTH0,#0D8H
MOVTL0,#0EFH;12M晶振,形成10毫秒中断
RETISTART:
MOVSP,#50HMOVTH0,#0D8HMOVTL0,#0EFHMOVTMOD,#01HMOVIE,#82HMUSIC0:
NOP
MOVDPTR,#DAT;表头地址送DPTR
MOV20H,#00H;中断计数器清0MUSIC1:
NOP
CLRA;A清零
MOVCA,@A+DPTR;查表取代码JZEND0;是00H,则结束
CJNEA,#0FFH,MUSIC5;如果是休止符,往下执行LJMPMUSIC3
MUSIC5:
NOP
MOVR6,A;R6=18H音符的频率
INCDPTR;DPTR加一
MOVA,#0
MOVCA,@A+DPTR;取节拍代码送R7MOVR7,A;R7=30H音符发音的时间SETBTR0;启动计数
MUSIC2:
NOP
CPLP2.3;P2.3是音乐输出引脚MOVA,R6
MOVR3,A;籖3=R6=18HLCALLDEL
MOVA,R7
CJNEA,20H,MUSIC2;中断计数器(20H)=R7否?
;不等,则继续循环
MOV20H,#00H;等于,则取下一代码INCDPTR
LJMPMUSIC1MUSIC3:
NOP;休止100毫秒
CLRTR0
MOVR2,#0DH;R2=13MUSIC4:
NOP
MOVR3,#0FFH;R3=255LCALLDEL
DJNZR2,MUSIC4INCDPTR
LJMPMUSIC1END0:
NOP
MOVR2,#0FFH;歌曲结束,延时1秒后继续
MUSIC6:
MOVR3,#00HLCALLDELDJNZR2,MUSIC6LJMPMUSIC0DEL:
NOPDEL3:
MOVR4,#02H
DEL4:
NOP
DJNZR4,DEL4NOP
DJNZR3,DEL3RET
NOPDAT:
DB18H,30H,1CH,10H
DB20H,40H,1CH,10HDB18H,10H,20H,10HDB1CH,10H,18H,40HDB1CH,20H,20H,20HDB1CH,20H,18H,20HDB20H,80H,0FFH,20HDB30H,1CH,10H,18HDB20H,15H,20H,1CHDB20H,20H,20H,26HDB40H,20H,20H,2BH
DB20H,26H,20H,20HDB20H,30H,80H,0FFHDB20H,20H,1CH,10HDB18H,10H,20H,20HDB26H,20H,2BH,20HDB30H,20H,2BH,40HDB20H,20H,1CH,10HDB18H,10H,20H,20HDB26H,20H,2BH,20HDB30H,20H,2BH,40HDB20H,30H,1CH,10HDB18H,20H,15H,20HDB1CH,20H,20H,20HDB26H,40H,20H,20HDB2BH,20H,26H,20HDB20H,20H,30H,80HDB20H,30H,1CH,10HDB20H,10H,1CH,10HDB20H,20H,26H,20HDB2BH,20H,30H,20HDB2BH,40H,20H,15HDB1FH,05H,20H,10HDB1CH,10H,20H,20HDB26H,20H,2BH,20HDB30H,20H,2BH,40HDB20H,30H,1CH,10HDB18H,20H,15H,20HDB1CH,20H,20H,20HDB26H,40H,20H,20HDB2BH,20H,26H,20HDB20H,20H,30H,30HDB20H,30H,1CH,10HDB18H,40H,1CH,20HDB20H,20H,26H,40HDB13H,60H,18H,20HDB15H,40H,13H,40HDB18H,80H,00H
end
05兰花草
SPKEQUP3.3;蜂鸣器所在端口
ORG0000HJMPSTART
START:
MOVR3,#00HNEXT:
MOVA,R3
MOVDPTR,#TABLEMOVCA,@A+DPTRJZSTART
MOVR7,AINCR3MOVA,R3
MOVCA,@A+DPTRMOVR2,A
ACALLSONGINCR3SJMPNEXT
;==================================================
=============================
;===歌曲播放子程序===SONG:
MOVA,R2;取出节拍
RLAJNZKEEP
MOVA,#01H
KEEP:
MOVR2,AREPEAT:
ACALLEIGHTH
DJNZR2,REPEATRET
;==================================================
=============================
;===产生1/8拍延时子程序===EIGHTH:
MOVA,R7;查表取出廷时参数,保存到R4
MOVDPTR,#DELAY_TMOVCA,@A+DPTRMOVR4,A
MOVA,R7;查表取出1/8拍周期数,保存到R5
MOVDPTR,#S_PARAMOVCA,@A+DPTRMOVR5,A
NEXTCYC:
ACALLSOUND
DJNZR5,NEXTCYCRET
;==================================================
=============================
;===发声子程序===SOUND:
SETBSPK
ACALLSDELAYCLRSPK
ACALLSDELAYRET
;==================================================
=============================
;===延时子程序===SDELAY:
XL2:
DL1:
MOVA,R4;廷时值在R4内MOVR0,A
MOVR1,#03HNOP
DJNZR1,DL1
DJNZR0,XL2RET
;==================================================
=============================
;===1/8拍周期表===S_PARA:
DS1DH
DB15H,16H,00
DB19H,00H,1CH,00H,1FH,21H,00H,25HDB00H,29H,2CH,00H,31H,34H,37H,00HDB3EH,41H,00H,49H,00H,52H,57H,00HDB62H
;==================================================
=============================
;===延时参数表===DELAY_T:
DS1DH
DB7EH,77H,00H
DB6AH,00H,5EH,00H,54H,4FH,00H,46HDB00H,3FH,3BH,00H,35H,32H,2FH,00HDB2AH,27H,00H,23H,00H,1FH,1DH,0C0HDB1AH
;==================================================
=============================
;===歌曲表===TABLE:
DW2202H,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
;苞也无一
个
DW0000H;
END
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 51 单片机 汇编语言 音乐程序
![提示](https://static.bdocx.com/images/bang_tan.gif)