📄 music.asm
字号:
;用定时器T1方式1来产生歌谱中各音符对应频率的方波,由P1.0输出驱动喇叭。
;节拍控制可通过调用延时子程序次数来实现。
ORG 0000H
AJMP START
ORG 001BH
AJMP TIME
;
;***************************************************************
; /*主程序*/ *
;***************************************************************
;
ORG 0030H
START: MOV TMOD,#10H ;定时器1方式1
MOV IE,#88H ;允许中断
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 NEXT0 ;是休止符转停止发音
MOV A,R0
ANL A,R1
CJNE A,#0FFH,NEXT ;没有结束转下一拍
AJMP START
NEXT: MOV TH1,R1
MOV TL1,R0
SETB TR1
SJMP NEXT1
NEXT0: CLR TR1 ;是休止符关闭定时器,停止发音
NEXT1: CLR A
INC DPTR
MOVC A,@A+DPTR ;取延时常数
MOV R2,A
LOOP1: CALL DELAY200MS
DJNZ R2,LOOP1
INC DPTR
AJMP LOOP
;
;***************************************************************
; /*延时子程序*/ *
;***************************************************************
;
DELAY200MS: MOV R4,#81H
DEL1: MOV R3,#0FFH
DJNZ R3,$
DJNZ R4,DEL1
RET
TIME: MOV TH1,R1
MOV TL1,R0
CPL P1.0
RETI
TAB: DB 0FCH,4AH,04H,0FCH,4AH,04H
DB 0FCH,4AH,08H,0FBH,00H,08H
DB 0FDH,08H,04H,0FDH,08H,04H
DB 0FDH,08H,08H,0FCH,4AH,08H
DB 0FCH,4AH,04H,0FDH,08H,04H
DB 0FDH,80H,08H,0FDH,80H,08H
DB 0FDH,30H,04H,0FDH,08H,04H
DB 0FCH,0AEH,08H,00H,00H,08H
DB 0FFH,0FFH
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -