蜂鳴器奏樂-多種音樂分享
大小:0.1 MB 人氣: 2017-09-06 需要積分:0
1、蜂鳴器奏樂(祝你平安)
ORG 0000HLJMP 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 P3.7
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
?
2、蜂鳴器奏樂(八月桂花香)
;**********************************************************?? 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 P3.7
?? MOV A,R6
?? MOV R3,A
?? CPL A
?? MOV P1,A???????????? ;顯示(修改者加入的顯示)
?? CPL A
?? LCALL DEL
?? MOV A,R7
?? CJNE A,20H,MUSIC2??? ;中斷計數器(20H)=R7否?
??????????????????????? ;不等,則繼續循環
?? MOV 20H,#00H???????? ;等于,則取下一代碼
?? INC DPTR
?? 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,#05H
DEL4:
?? NOP
?? DJNZ R4,DEL4
?? NOP
?? DJNZ R3,DEL3
?? RET
DAT:
DB 18H, 30H, 1CH, 10H
DB 20H, 40H, 1CH, 10H
DB 18H, 10H, 20H, 10H
DB 1CH, 10H, 18H, 40H
DB 1CH, 20H, 20H, 20H
DB 1CH, 20H, 18H, 20H
DB 20H, 80H, 0FFH,20H
DB 30H, 1CH, 10H, 18H
DB 20H, 15H, 20H, 1CH
DB 20H, 20H, 20H, 26H
DB 40H, 20H, 20H, 2BH
DB 20H, 26H, 20H, 20H
DB 20H, 30H, 80H, 0FFH
DB 20H, 20H, 1CH, 10H
DB 18H, 10H, 20H, 20H
DB 26H, 20H, 2BH, 20H
DB 30H, 20H, 2BH, 40H
DB 20H, 20H, 1CH, 10H
DB 18H, 10H, 20H, 20H
DB 26H, 20H, 2BH, 20H
DB 30H, 20H, 2BH, 40H
DB 20H, 30H, 1CH, 10H
DB 18H, 20H, 15H, 20H
DB 1CH, 20H, 20H, 20H
DB 26H, 40H, 20H, 20H
DB 2BH, 20H, 26H, 20H
DB 20H, 20H, 30H, 80H
DB 20H, 30H, 1CH, 10H
DB 20H, 10H, 1CH, 10H
DB 20H, 20H, 26H, 20H
DB 2BH, 20H, 30H, 20H
DB 2BH, 40H, 20H, 15H
DB 1FH, 05H, 20H, 10H
DB 1CH, 10H, 20H, 20H
DB 26H, 20H, 2BH, 20H
DB 30H, 20H, 2BH, 40H
DB 20H, 30H, 1CH, 10H
DB 18H, 20H, 15H, 20H
DB 1CH, 20H, 20H, 20H
DB 26H, 40H, 20H, 20H
DB 2BH, 20H, 26H, 20H
DB 20H, 20H, 30H, 30H
DB 20H, 30H, 1CH, 10H
DB 18H, 40H, 1CH, 20H
DB 20H, 20H, 26H, 40H
DB 13H, 60H, 18H, 20H
DB 15H, 40H, 13H, 40H
DB 18H, 80H, 00H
?? end
?
3、蜂鳴器奏樂(生日快樂)
;本程序實現蜂鳴器演奏歌曲功能;樂曲名稱:生日快樂
;///////////////////////////////////////////
?BUZZER EQU P3.7
?org?0000h??;主程序起始地址
?ajmp?main??;跳至主程序
?org?000bh??;timer0中斷起始地址
?jmp?tim0??;跳至timer0中斷子程序
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
?org?0030h
main:
?mov?tmod,#01h?;設timer0在MODE1
?mov?ie,#82h??;中斷使能
start0:
?mov?30h,#00h?;取簡譜碼指針
next:?mov?a,30h??;簡譜碼指針載入A
?mov?dptr,#table?;至table取簡譜碼
?movc?a,@a+dptr
?mov?r2,a??;取到的簡譜碼暫存于R2
?jz?end0??;是否取到00(結束碼)?
?anl?a,#0fh??;不是,則取低4位(節拍碼)
?mov?r5,a??;將節拍碼存入R5
?mov?a,r2??;將取到的簡譜碼再載入A
?swap?a??;高低四位交換
?anl?a,#0fh??;取低四位(音符碼)
?jnz?sing??;取到的音符碼是否為零?
?clr?tr0??;是,則不發音
?jmp?d1
sing:?dec?a??;取到的音符碼減1(不含0).
?mov?22h,a??;存入(22H).
?rl?a??;乘2
?mov?dptr,#table1?;至table1取相對的高位字節計數值
?movc?a,@a+dptr
?mov?th0,a??;取到的高位字節存入TH0
?mov?21h,a??;取到的高位字節存入(21H)
?mov?a,22h??;再載入取的的音符碼
?rl?a??;乘2
?inc?a??;加1
?movc?a,@a+dptr?;至table1取相對的低位字節計數值
?mov?tl0,a??;取到的高位字節存入TL0??
?mov?20h,a?????????? ;取到的高位字節存入(20H)
?setb?tr0??;啟動timer0
d1:?call?delay??;基本單位時間1/4拍187毫秒
?inc?30h??;取簡譜碼指針加1
?jmp?next??;取下一個碼
end0:?clr?tr0??;停止timer0
?jmp?start0??;重復循環
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;time0中斷服務子程序用來產生相應的音調脈沖頻率。
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
tim0:
?push?acc??;將A的值暫存于堆棧
?push?psw??;將psw的值暫存于堆棧
?mov?tl0,20h??;重設計數值
?mov?th0,21h
?cpl?BUZZER??;將蜂鳴器反相
?pop?psw??;至堆棧取回psw的值
?pop?acc??;至堆棧取回a的值
?reti???;返回主程序
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
delay:?mov?r7,#02h??;187毫秒
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
?end
?
4、蜂鳴器奏樂
SPK?EQU?P3.7???; 蜂鳴器所在端口?ORG?0000H
?JMP?START
?
START:
?MOV?R3,#00H
NEXT:
?MOV?A,R3
?MOV?DPTR,#TABLE
?MOVC?A,@A+DPTR
?JZ?START
?MOV?R7,A
?INC?R3
?MOV?A,R3
?MOVC?A,@A+DPTR
?MOV?R2,A
?ACALL?SONG
?INC?R3
?SJMP?NEXT
;===============================================================================?
;===? 歌曲播放子程序 ===
SONG:
?MOV?A,R2?????; 取出節拍
?RL?A
?JNZ?KEEP
?MOV?A,#01H
KEEP:
?MOV?R2,A
REPEAT:
?ACALL?EIGHTH
?DJNZ?R2,REPEAT
?RET
?
;===============================================================================?
;===? 產生1/8拍延時子程序? ===??
EIGHTH:
?MOV?A,R7?????; 查表取出廷時參數,保存到R4
?MOV?DPTR,#DELAY_T
?MOVC?A,@A+DPTR
?MOV?R4,A
?MOV?A,R7?????; 查表取出1/8拍周期數,保存到R5
?MOV?DPTR,#S_PARA
?MOVC?A,@A+DPTR
?MOV?R5,A
NEXTCYC:
?ACALL?SOUND
?DJNZ?R5,NEXTCYC
?RET
?
;===============================================================================?
;===? 發聲子程序 ===?
SOUND:
?SETB?SPK
?ACALL?SDELAY
?CLR?SPK
?ACALL?SDELAY
?RET
?
;===============================================================================?
;===? 延時子程序? ===
SDELAY:
?MOV?A,R4?????; 廷時值在R4內
?MOV?R0,A
XL2:
?MOV?R1,#03H
DL1:
?NOP
?DJNZ?R1,DL1
?DJNZ?R0,XL2
?RET
;===============================================================================?
;===? 1/8拍周期表? ===
S_PARA:
?DS?1DH
?DB?15H,16H,00
?DB?19H,00H,1CH,00H,1FH,21H,00H,25H
?DB?00H,29H,2CH,00H,31H,34H,37H,00H
?DB?3EH,41H,00H,49H,00H,52H,57H,00H
?DB?62H
?
;===============================================================================?
;===? 延時參數表? ===
DELAY_T:
?DS?1DH
?DB?7EH,77H,00H
?DB?6AH,00H,5EH,00H,54H,4FH,00H,46H
?DB?00H,3FH,3BH,00H,35H,32H,2FH,00H
?DB?2AH,27H,00H,23H,00H,1FH,1DH,0C0H
?DB?1AH
?
;===============================================================================?
;===? 歌曲表? ===
TABLE:
?DW?2202H,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??;苞也無一個
?DW?0000H?????;
?
?END?
非常好我支持^.^
(0) 0%
不好我反對
(0) 0%
下載地址
蜂鳴器奏樂-多種音樂分享下載
相關電子資料下載
- 基于啟明RA6M5的物聯網居家環境健康監控設備設計 57
- 基于51單片機溫度監控Proteus仿真設計_報警值可調 226
- 51單片機數字溫度報警器_DS18B20可調上下限 252
- 火遍童年的FC游戲是使用什么語言編寫的 330
- 51單片機停車場車位管理系統仿真設計 488
- 分析五種蜂鳴器驅動電路 130
- 匯編語言中常見的兩個指令 167
- 相序表使用注意事項 100
- 求一種基于RJM8L151S的智能提醒藥盒解決方案 279
- 匯編語言的產生 匯編語言的組成 233