📄 music.asm
字号:
;音乐定义字符
;低音为数字前加D,高音前加F,中音前不加数字
;例如低音2,中音3,高音4表示为D2,3,F4
;延时用FFH表示,FEH表示1/8节拍开始与结束
;采用查表算法,计算频率
;晶振12MHZ
;如果仅仅间的唱歌,也许不要这么长的
;但是为了写成万能的歌唱,写了不少哦。
KG1_8 BIT 20H.0
GE_QU BIT 20H.1
ORG 0000H
JMP MAIN
ORG 000BH
JMP INT
MAIN:
MOV 20H,#00H
START:
MOV TMOD, #01H
MOV IE, #82H;T0 --INT
MOV IP, #00H
MOV 35H,#00 ; MUSIC POINTER
MOV 36H,#00
MOV 37H,#00
MOV 38H,#00
MOV DPTR,#MUSIC
QUZHI:
CLR TR0
MOV A,35H
JB P2.0,QU1
QU:
INC 38H
MOV R1,38H
CALL DL187MS
CJNE R1,#01,TIAO0
MOV DPTR,#MUSIC0
JMP QU0
TIAO0:
CJNE R1,#02,TIAO1
MOV DPTR,#MUSIC1
JMP QU0
TIAO1:
CJNE R1,#03,TIAO2
MOV DPTR,#MUSIC2
JMP QU0
TIAO2:
CJNE R1,#04,TIAO3
MOV DPTR,#MUSIC3
JMP QU0
TIAO3:
CJNE R1,#05,MAIN
MOV DPTR,#MUSIC4
MOV R1,#00
QU0: MOV 35H,#00
QU1:
MOVC A,@A+DPTR
JZ QU0
MOV 36H,A ; 存储A值 ,YIN DIAO
INC 35H
CJNE A,#0FEH,NEXT
CPL KG1_8
JMP QUZHI
NEXT:
CJNE A,#0FFH,NEXT0
MOV TH0,24H
MOV TL0,25H
SETB TR0
CALL DL187MS
JMP QUZHI
NEXT0:
CLR C
SUBB A,#10
JNC BJ ; C=1,BU SHI ZHONG YIN
MOV A,36H
ADD A,#07H ;TIAO ZHENG DAO ZHONG YIN
JMP SING
BJ: CLR C
MOV A,36H
SUBB A,#0E0H
JNC GAOYIN ;C=0,GAO YIN
DIYIN:
MOV A,36H
ANL A,#0FH
JMP SING
GAOYIN:
MOV A,36H
ANL A,#0FH
ADD A,#14
JMP SING
SING:
PUSH DPH
PUSH DPL
MOV DPTR,#MSC_F
DEC A
RL A
MOV 37H,A ;STORE MUSIC POINTER
MOVC A,@A+DPTR
MOV 24H,A
MOV A,37H
INC A
MOVC A,@A+DPTR
MOV 25H,A
MOV TH0,24H
MOV TL0,25H
SETB TR0
JB KG1_8,KG
CALL DL187MS
CALL DL187MS
POP DPL
POP DPH
JMP QUZHI
KG:CALL DL94MS
CALL DL94MS
POP DPL
POP DPH
OK: JMP QUZHI
INT:
PUSH PSW
PUSH A
MOV TH0,24H
MOV TL0,25H
CPL P3.7
POP A
POP PSW
RETI
MUSIC: ; 生日快乐歌 ,1=F3/4拍,1/4拍=187ms*2,1/8拍=94MS*2
DB 0FEH,0D5H,0D5H,0FEH,0D6H,0D5H,01H,0D7H,0FFH
; | 1/8 1/8 |
DB 0FEH,0D5H,0D5H,0FEH,0D6H,0D5H,02H,01H,0FFH
DB 0FEH,0D5H,0D5H,0FEH,05H,03H,01H,0D7H,0D6H
DB 0FEH,04H,04H,0FEH,03H,01H,02H,01H,0FFH,00H
MUSIC0: ;两只老虎
DB 1,2,3,1,1,2,3,1,3,4,5,0FFH,3,4,5,0FFH,
DB 0FEH,5,6,5,4,0FEH,3,1,0FEH,5,6,5,4,0FEH,3,1
DB 2,0D5H,1,0FFH,0FFH,2,0D5H,1,0FFH,0FFH,00H
MUSIC1: ;白龙马
DB 3,3,0D6H,0FFH,1,0FEH,0D6H,0D5H,0FEH,0D6H,0FFH
DB 0FEH,0D6H,1,1,1,0FEH,1,0FEH,1,0D6H,0FEH,1,0FEH,2,3,0FEH
DB 3,0FFH,3,5,0D6H,1,0D6H,0FEH,0D6H,0D5H,0FEH,0D3H,0FFH
DB 0FEH,2,2,2,3,0FEH,0D5H,0D7H,0D6H,0FFH,0FFH,0FFH
DB 0FEH,6,6,6,6,0FEH,3,0FEH,5,5,0FFH,5,5,5,3,6,5,0FFH,
DB 4,4,4,4,0FEH,4,0FEH,1,1,1,1,2,1,2,3,6,6,6,6,0FEH
DB 3,0FEH,5,5,0FFH,5,5,5,3,6,5,6,6,6,6,0FEH,0F1H,0FEH,6,5,0FFH
DB 5,5,5,5,0FEH,3,5,0FEH,2,2,1,2,3,2,1,2,3,2,3,5,0FEH,5,0FFH
DB 0FEH,1,2,3,5,0FEH,5,0D7H,0D6H,0FFH,0FFH,0FFH,00
MUSIC2: ; 北京欢迎你1=A2/4 1PAI=1/4 CHANGDU
DB 3,5,3,2,3,2,3,0FFH,3,2,0D6H,1,3,0FFH,2,0FFH
DB 2,1,0D6H,1,2,3,5,2,3,6,5,0D5H,2,0FFH,1,0FFH
DB 2,1,0D6H,1,2,3,5,2,3,6,5,5,3,0FFH,0FFH,0FFH
DB 2,3,2,1,5,6,3,0FFH,0D6H,3,2,2,1,0FFH,0FFH,0FFH
DB 3,5,0F1H,5,6,0FFH,5,6,5,3,3,5,0FFH,5,0FFH
DB 3,5,6,0F1H,0F2H,0F1H,5,3,2,5,3,3,0FFH,00
MUSIC3: ;丢手绢1=4/4
DB 5,3,5,3,0FEH,5,3,2,3,0FEH,5,0FFH,
DB 5,0FEH,5,3,0FEH,6,5,0FEH,3,5,3,2,0FEH,1,2
DB 3,5,0FEH,3,2,1,2,0FEH,3,0FFH,0FEH,6,5,6,5,0FEH
DB 3,6,5,0FFH,0FEH,6,5,6,5,0FEH,2, 3,1,0FFH,0FFH,00
MUSIC4:;我和你,主题曲1=4/4
DB 3,0FFH,5,0FFH,1,0FFH,0FFH,2,0FFH,3,0FFH,0D5H,0FFH,0FFH
DB 1,0FFH,2,0FFH,3,0FFH,0FFH,5,0FFH,2,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,
DB 3,0FFH,5,0FFH,1,0FFH,0FFH,2,0FFH,3,0FFH,0D6H,0FFH,2,0FFH,
DB 0D5H,0FFH,2,0FFH,3,0FFH,1,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH
DB 6,0FFH,0FFH,0FFH,5,0FFH,0FFH,0FFH,6,0FFH,0FFH,0FFH,1,0FFH,
DB 0FFH,0FFH,3,0FFH,0D6H,0FFH,3,0FFH,5,0FFH,2,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH
DB 3,0FFH,5,0FFH,1,0FFH,0FFH,0FFH,2,0FFH,3,0FFH,0D6H,0FFH,0FFH,0FFH,2,
DB 0FFH,0D5H,0FFH,2,0FFH,3,0FFH,1,0FFH,0FFH,0FFH,0FFH,00
MSC_F:;音乐频率表
DW 63628,63835,64021,64103,64260,64400,64524
;低音 1 2 3 4 5 6 7
DW 64580,64684,64777,64820,64898,64968,65030
;中音
DW 65058,65110,65157,65178,65217,65252,65283
;高音
DL187MS: ;1/4 PAI
MOV R6,#187
JMP DL
DL94MS: ;1/8 PAI
MOV R6,#94
DL:
MOV R7,#2
DL0:
MOV R5,#248
DJNZ R5,$
DJNZ R7,DL0
DJNZ R6,DL
RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -