;******数字到字型*****************
TODIS: PUSH DPH
PUSH DPL
MOV
DPTR,#TABLE
MOVC A,@A+DPTR
MOV
NUM,A
POP DPL
POP DPH
RET
;******************************************
;*********短延时子程序1.38毫秒*****************
DELAY:
PUSH
ACC
MOV
DLAY,#01H
LOOP:
MOV
ACC,#0FFH
DJNZ ACC,$
DJNZ DLAY,LOOP
POP
ACC
RET
;******************************************
;*********长延时子程序24.9毫秒*****************
LDELAY:
PUSH
ACC
MOV
DLAY,#01H
LLOOP:
MOV
ACC,#0FDH
DJNZ ACC,$
DJNZ DLAY,LLOOP
POP
ACC
RET
;******************************************
;****************外部中断0服务程序(播放/暂停)***************************
PLY_PAU:
SETB
TR0
CPL FLAG
RETI
;***************外部中断1服务程序(停止)***********************************
STOP:
MOV
SEC,#00H
MOV
MIN,#00H
MOV
COUNT50,#50
CLR FLAG
MOV R3,#02H
; CLR TR0
;*******
RETI
;**************************************************
;==============================================================
SING:
MOV
R3,#02H
NEXT:
MOV
A,KEYVAL
JZ
PPB
LJMP
KEYJDG
PPB:
JNB
FLAG,NEXT ;?
MOV A,R3
CJNE
A,#00H,XIA
INC
DPH
XIA:
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
START:
CLR FLAG
LJMP
KEYGET
;===============================================================================
;===
歌曲播放子程序 ===
SONG:
PUSH
DPH
PUSH
DPL
MOV
A,R2
; 取出节拍
RL A
; RL A
JNZ
KEEP
MOV
A,#01H
KEEP:
MOV
R2,A
REPEAT:
ACALL EIGHTH
DJNZ R2,REPEAT
SETB
SPK
MOV
R6,#05H
YU:
MOV
R4,0FFH
ACALL SDELAY
DJNZ R6,YU
POP
DPL
POP
DPH
RET
;===============================================================================
;===
产生1/8拍延时子程序
===
EIGHTH:
CJNE R7,#20H,NEXT1
MOV
R5,15H
Y3:
MOV
R4,0FAH
Y2:
MOV
R6,#09H
NOP
Y1:
DJNZ R6,Y1
DJNZ
R4,Y2
DJNZ R5,Y3
RET
NEXT1:
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
XUN1,A
XL2:
MOV
XUN2,#03H
DL1:
DJNZ XUN2,DL1
DJNZ XUN1,XL2
RET
;===============================================================================
;===
1/8拍周期表
===
S_PARA:
DB
10H,12H,14H,16H,18H,1BH,1FH
DB
21H,24H,29H,2CH,31H,37H,3EH
DB
3FH,45H,52H,57H,62H,6EH,7BH
;===============================================================================
;===
延时参数表
===
DELAY_T:
DB
0C3H,0AEH,9BH,92H,83H,74H,68H
;00-06
DB
62H,57H,4DH,49H,41H,3AH,34H
;07-0DH
DB
31H,2EH,27H,24H,20H,1DH,19H
;0E-14H
;===============================================================================
;**************************************************
TABLE:
DB
0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,88H,83H,0C6H,0A1H,86H,83H
;===
歌曲表
===
TABLE1:
DW
0000H,0504H,0806H,0802H,0802H,0802H,0702H,0802H,0906H,0702H,0506H
DW
0502H,0A04H,0804H,0302H,0302H,0402H,0402H,0504H,0504H,0504H,2004H
DW
0502H,0806H,0902H,0A02H,0902H,0801H,0701H,0601H,0501H,0406H,0602H,0804H,0902H
DW
0802H,0506H,0602H,0502H,0402H,0202H,0302H,0104H,0102H,2004H
DW
0504H,0806H,0802H,0802H,0802H,0702H,0802H,0B06H,0A01H,0901H,0906H
DW
0902H,0A04H,0804H,0302H,0302H,0402H,0402H,0504H,0504H,0504H,2004H
DW
0502H,0806H,0902H,0A02H,0902H,0801H,0701H,0601H,0501H,0406H,0602H,0804H,0902H
DW
0802H,0506H,0602H,0502H,0402H,0202H,0302H,0104H,2002H
DW
0502H,0806H,0902H,0A02H,0902H,0801H,0701H,0601H,0501H,0406H,0602H,0804H,0902H
DW
0802H,0506H,0602H,0502H,0402H,0202H,0302H,0106H,2004H
DW
0000H
TABLE2:
DW
0000H,0901H,0A01H,0B02H,0B02H,0B02H,0702H,0801H,0702H,0904H,2002H
;人生路上甜苦和喜忧
DW
0801H,0702H,0702H,0502H,0701H,0502H,0403H,2004H ;
DW0901H,0A01H,0B02H,0B02H,0B02H,0702H,0801H,0702H,0904H,2002HDW0801H,0702H,0701H,0501H,0501H,0702H,0803H,0802H,2004H;
DW0901H,0801H,0102H,0701H,0801H,0701H,0501H,0501H,0401H,0401H,0902H,0901H,0902H,2001H ;DW0901H,0901H,0801H,0701H,0701H,0501H,0701H,0801H,0701H,0901H,0904H,2002H ;DW0901H,0801H,0702H,0701H,0801H,0701H,0501H,0501H,0401H,0401H,0902H,0901H,0902H,2002H ;DW0901H,0901H,0801H,0701H,0501H,0701H,0C02H,0B01H,0B04H,2004H ;
DW0B02H,0B01H,0901H,0902H,0B02H,0C01H,0901H,0901H,0B01H,0B02H,2002H;
DW0702H,0701H,0701H,0801H,0902H,0B01H,0B02H,0B02H,2004H;DW0C03H,0C01H,0B01H,0901H,0902H,0B01H,0C02H,0701H,0703H,2002H ;
DW0901H,0801H,0901H,0801H,0701H,0702H,0501H,0701H,0701H,0801H,0802H,0802H,2004H;DW0B02H,0B01H,0901H,0902H,0B02H,0C01H,0901H,0901H,0B01H,0B02H,2002H;DW0702H,0E01H,0D01H,0C01H,0902H,0B01H,0B04H,2004H ;DW0C03H,0C01H,0B01H,0901H,0902H,0B01H,0C02H,0701H,0703H,2002H ;风风雨雨都接受
DW0901H,0801H,0901H,0801H,0701H,0701H,0502H,0801H,0701H,0703H,0702H,2003H ;
DW0C03H,0C01H,0B01H,0901H,0902H,0B01H,0C02H,0901H,0903H,2002H ;
DW0901H,0801H,0901H,0B01H,0C01H,0901H,0702H,0502H,0703H,0702H,0702H,2004H ;;我一直会在你的左右
DW0000H
TABLE3:
DW0000H,0902H,0902H,0A02H,0B02H,0B02H,0A02H,0902H,2002H
DW0802H,0702H,0702H,0802H,0902H,0903H,0801H,0802H,0802H,2002H
DW0902H,0902H,0A02H,0B02H,0B02H,0A02H,0902H,0802H,2002H
DW0702H,0702H,0802H,0902H,0803H,0701H,0702H,0702H,2002H
DW0802H,0802H,0902H,0702H,0802H,0901H,0A01H,0902H,0702H,0802H,0901H,0A01H,0902H,0802H,0702H,0802H,0B02H,2002H
DW0902H,0902H,0902H,0A02H,0B02H,0B02H,0A02H,0902H,0A01H,0801H,0702H,0702H,0802H,0902H,0803H,0701H,0702H,0702H,2002H
DW0000H
TABLE4:
DW0000H,0804H,0904H,0904H,0906H,0802H,0704H,0504H,0706H,0802H,0708H,0804H,0904H,0904H,0906H,0B02H,0904H,0904H,0804H,0904H
DW 0908H,0B04H,0C04H,0C04H,0C06H,0B02H,0904H,0904H,0B04H,0C04H,0B08H,0804H,0904H,0904H,0806H,0902H,0904H,0804H,0904H,0508H
DW 0508H,0802H,0802H,0802H,0702H,0504H,0802H,0802H,0802H,0702H,0504H,0804H,0904H,0704H,0806H,0902H,0B04H,0C02H,0C02H,0C02H,0B02H
DW 0904H,0802H,0802H,0802H,0702H,0504H,0504H,0404H,0504H,0508H,0000H
END
关键词:
51单片机数字音乐盒C语言驱