?? music.asm
字號:
;**************************************************************
;All rights Reserved
;voice.asm
;單片機發聲程序,播放梁祝歌曲
;用定時器中斷產生音調,用程序延時來產生節拍
;***************************************************************
SoundOut bit P1.0 ;定義輸出引腳
ORG 0000H
LJMP START
ORG 001BH
AJMP TIME1 ;中斷服務,中斷計數器加1
ORG 20H
START: MOV TMOD,#10H ;用定時器1,方式1
MOV SP,#50H
SETB EA
SETB ET1
MOV DPTR,#TAB
;判斷合適的數據,進行定時器初始值設置
LOOP: CLR A
MOVC A,@A+DPTR
MOV R1,A ;保存第一個值
INC DPTR
CLR A
MOVC A,@A+DPTR
MOV R0,A ;保存第二個值
ORL A,R1 ;看相鄰兩個值是否相等
JZ XZF ;若acc等于0則跳轉
MOV A,R0
ANL A,R1 ;兩個數是否都為ff是否為最后一個
CJNE A,#0FFH,NEXT
SJMP START
NEXT: MOV TH1,R1
MOV TL1,R0
SETB TR1
SJMP NEXT1
XZF: CLR TR1 ;關閉定時器
NEXT1: CLR A
INC DPTR
MOVC A,@A+DPTR
MOV R2,A
SETB TR1
LOOP1: LCALL D130 ;取節拍
DJNZ R2,LOOP1
INC DPTR
AJMP LOOP
D130: MOV R5,#160
D2: MOV R4,#200
D1: NOP
NOP
DJNZ R4,D1
DJNZ R5,D2
RET
;定時中斷服務程序
TIME1: MOV TH1,R1
MOV TL1,R0
CPL SoundOut
RETI
TAB: DB 0FAH,15H,08H
DB 0FBH,05H,06H
DB 0FBH,8CH,02H
DB 0FCH,44H,04H
DB 0FCH,0ACH,02H
DB 0FBH,8CH,02H
DB 0FCH,44H,02H
DB 0FBH,05H,04H
DB 0FDH,82H,04H
DB 0FEH,22H,04H
DB 0FDH,0C8H,02H
DB 0FDH,82H,02H
DB 0FDH,09H,02H
DB 0FDH,82H,02H
DB 0FCH,0ACH,10H
DB 0FBH,8CH,01H
DB 0FCH,0ACH,06H
DB 0FDH,09H,02H
DB 0FCH,0CH,04H
DB 0FBH,08CH,04H
DB 0FBH,05H,04H
DB 0FCH,8CH,02H
DB 0FCH,44H,04H
DB 0FCH,0ACH,04H
DB 0FAH,15H,04H
DB 0FCH,44H,04H
DB 0FBH,8CH,02H
DB 0FBH,05H,02H
DB 0FBH,8CH,02H
DB 0FCH,44H,02H
DB 0FBH,05H,10H
DB 0FFH,0FFH
END
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -