⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 音乐发生器.asm

📁 关于ADUC841(51内核)的各种实验程序,有串口,ADC,DAC,PWM,的应用及基于ADUC841设计的万用表源程序
💻 ASM
字号:
      $MOD841
      SP0    EQU   50H
      CLK81  EQU   P3.5
      DAT81  EQU   P3.3
      KEYVAL EQU   30H
      LO     EQU   31H
      HI     EQU   32H
      TC     EQU   33H
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
      ORG    0000H
      LJMP   MAIN
      ORG    0003H
      LJMP   SERVE1
      ORG    000BH
      LJMP   T0_INT
      ORG    0060H
MAIN:   MOV    R0,#0FFH
        CLR    A
QING:   MOV    @R0,A
        DJNZ   R0,QING
        MOV    SP,#SP0
        LCALL  YS
        LCALL  INI8281
        LCALL  INI841
HERE:   LJMP   HERE
;---------------------------------------
INI841: MOV    TMOD,#01H
        SETB   EA
        SETB   EX0
        SETB   ET0
        SETB   PT0
RUN:    LCALL  SOUND_ON
        MOV    R4,#1
        MOV    R3,#1
        LCALL  PLAY
        MOV    R4,#2
        MOV    R3,#1
        LCALL  PLAY
        MOV    R4,#3
        MOV    R3,#1
        LCALL  PLAY
        LCALL  SOUND_OFF
        SETB   P3.4
        RET
;----------------------------------
INI8281:SETB   CLK81
        SETB   DAT81
        MOV    A,#12H
        LCALL  WTO81
        MOV    A,#80H
        LCALL  WTO81
        RET
;----------------------------------
SERVE1: MOV   A,#93H
        LCALL WTO81
        LCALL RDKVAL
        MOV   A,KEYVAL
        CJNE  A,#00H,S1
        LCALL FUNCTION1
        LJMP  S5
S1:     CJNE  A,#01H,S2
        LCALL FUNCTION2
        LJMP  S5
S2:     CJNE  A,#02H,S3
        LCALL FUNCTION3
        LJMP  S5
S3:     CJNE  A,#03H,S4
        LCALL FUNCTION4
        LJMP  S5
S4:     CJNE  A,#04H,S5
        LCALL FUNCTION5
S5:     SETB  P3.4
        RETI
;---------------------------------
T0_INT: MOV   TL0,LO
        MOV   TH0,HI
        CPL   P3.4
        RETI
;----------------------------------
FUNCTION1:LCALL  SOUND_ON
          LCALL  PLAY_SONG1
          LCALL  SOUND_OFF
          RET
;--------------------------------
FUNCTION2:LCALL  SOUND_ON
          LCALL  PLAY_SONG2
          LCALL  SOUND_OFF
          RET
;-------------------------------
FUNCTION3:LCALL  SOUND_ON
          LCALL  PLAY_SONG3
          LCALL  SOUND_OFF
          RET
;-----------------------------------
FUNCTION4:LCALL  SOUND_ON
          LCALL  PLAY_SONG4
          LCALL  SOUND_OFF
          RET
;------------------------------
FUNCTION5:LCALL  SOUND_ON
          LCALL  PLAY_SONG5
          LCALL  SOUND_OFF
          RET
;------------------------------------
PLAY:     LCALL  LOAD_VALUE
L1:       MOV    R5,#50
          LCALL  DELAY
          DJNZ   R3,L1
          LCALL  SOUND_OFF
          SETB   P3.4
          MOV    R5,#15
          LCALL  DELAY
          LCALL  SOUND_ON
          RET
;-------------------------------
PLAY_SONG1: MOV    TC,#0
X0:         MOV    DPTR,#SONG1
            MOV    A,TC
            MOVC   A,@A+DPTR
            MOV    R4,A
            CJNE   A,#0FFH,X1
            RET
X1:         MOV    DPTR,#LEN1
            MOV    A,TC
            MOVC   A,@A+DPTR
            MOV    R3,A
            LCALL  PLAY
  ;---------------------------
            INC    TC
            LJMP   X0
            RET
;--------------------------------
PLAY_SONG2: MOV    TC,#0
X2:         MOV    DPTR,#SONG2
            MOV    A,TC
            MOVC   A,@A+DPTR
            MOV    R4,A
            CJNE   A,#0FFH,X3
            RET
X3:         MOV    DPTR,#LEN2
            MOV    A,TC
            MOVC   A,@A+DPTR
            MOV    R3,A
            LCALL  PLAY
  ;---------------------------
            INC    TC
            LJMP   X2
            RET
;--------------------------------
PLAY_SONG3: MOV    TC,#0
X4:         MOV    DPTR,#SONG3
            MOV    A,TC
            MOVC   A,@A+DPTR
            MOV    R4,A
            CJNE   A,#0FFH,X5
            RET
X5:         MOV    DPTR,#LEN3
            MOV    A,TC
            MOVC   A,@A+DPTR
            MOV    R3,A
            LCALL  PLAY
  ;---------------------------
            INC    TC
            LJMP   X4
            RET
;--------------------------------
PLAY_SONG4: MOV    TC,#0
X6:         MOV    DPTR,#SONG4
            MOV    A,TC
            MOVC   A,@A+DPTR
            MOV    R4,A
            CJNE   A,#0FFH,X7
            RET
X7:         MOV    DPTR,#LEN4
            MOV    A,TC
            MOVC   A,@A+DPTR
            MOV    R3,A
            LCALL  PLAY
  ;---------------------------
            INC    TC
            LJMP   X6
            RET
;--------------------------------
PLAY_SONG5: MOV    TC,#0
X8:         MOV    DPTR,#SONG5
            MOV    A,TC
            MOVC   A,@A+DPTR
            MOV    R4,A
            CJNE   A,#0FFH,X9
            RET
X9:         MOV    DPTR,#LEN5
            MOV    A,TC
            MOVC   A,@A+DPTR
            MOV    R3,A
            LCALL  PLAY
  ;---------------------------
            INC    TC
            LJMP   X8
            RET
;--------------------------------
SOUND_ON:   SETB   TR0
            RET
;--------------------------------
SOUND_OFF:  CLR    TR0
            RET
;--------------------------------
LOAD_VALUE:MOV   DPTR,#HI_LIST
           MOV   A,R4
           MOVC  A,@A+DPTR
           MOV   HI,A
           MOV   DPTR,#LO_LIST
           MOV   A,R4
           MOVC   A,@A+DPTR
           MOV   LO,A
           RET
;----------------------------------
WTO81:	MOV	R6,#08H
WAT:	CLR	CLK81
	LCALL	DELAY1
	SETB	CLK81
	JB	DAT81,WAT
	CLR	CLK81
	LCALL	DELAY1
	SETB	CLK81
	JNB	DAT81,$
WTB81:	RLC	A
	MOV	DAT81,C
        CLR	CLK81
	LCALL	DELAY1
	SETB	CLK81
	LCALL	DELAY1
	LCALL	DELAY1
	DJNZ	R6,WTB81
	SETB	DAT81
        RET
;-----------------------------------
RDKVAL: CLR	CLK81
	LCALL	DELAY1
	SETB	CLK81
	JB	DAT81,$
        CLR	CLK81
	LCALL	DELAY1
	SETB	CLK81
        MOV	R6,#08H
RD1:
        LCALL	DELAY1
        LCALL	DELAY1
        LCALL	DELAY1
        MOV	C,DAT81
	 LCALL	DELAY1
	 RLC	A
        CLR	CLK81
	 LCALL	DELAY1
	 SETB	CLK81
        DJNZ	R6,RD1
        MOV	KEYVAL,A
        RET
;---------------------------------
DELAY1:  NOP
        NOP
        NOP
        NOP
        NOP
        NOP
        NOP
        NOP
        NOP
        NOP
        NOP
        NOP
        RET
;----------------------------------------
YS:	MOV	R5,#00H
	MOV	R4,#50H
YS1:	DJNZ	R5,$
	DJNZ	R4,YS1
	RET
;--------------------------------------------
DELAY:MOV    R6,#150
D1:   MOV    R7,#150
      DJNZ   R7,$
      DJNZ   R6,D1
      DJNZ   R5,DELAY
      RET
;-------------------------------------------------
HI_LIST:DB 0,0D6H,0DBH,0DFH,0E1H,0E4H,0E7H,0EAH,0EBH,0EDH,0EFH,0F0H,0F2H,0F3H,0F5H
LO_LIST:DB 0,0B3H,03DH,41H,12H,7BH,76H,24H,5AH,0A4H,0A1H,89H,38H,0BBH,12H
;-------------------------------------------------------------------------------------
SONG1:DB 3,5,5,3,2,1,2,3,5,3,2,3,5,5,3,2,1,2,3,2,1,1,0FFH
LEN1: DB 2,1,1,2,1,1,1,2,1,1,1,2,1,1,2,1,1,1,2,1,1,1,0FFH
;-----------------------------------------------------------------------------
SONG2:DB 3,3,3,3,3,3,3,5,1,2,3,4,4,4,4,3,3,3,2,2,3,2,5,3,3,3,3,3,3,3,5,1,2,3,4,4,4,4,3,3,3,5,5,4,2,1,2
      DB 3,3,3,3,3,3,3,5,1,2,3,4,4,4,4,3,3,3,2,2,3,2,5,3,3,3,3,3,3,3,5,1,2,3,4,4,4,4,3,3,3,5,5,4,2,1,2,0FFH
LEN2: DB 1,1,2,1,1,2,1,1,1,1,4,1,1,2,1,1,2,1,1,1,1,2,2,1,1,2,1,1,2,1,1,1,1,4,1,1,1,1,1,1,1,1,1,1,1,1,4
      DB 1,1,2,1,1,2,1,1,1,1,4,1,1,2,1,1,2,1,1,1,1,2,2,1,1,2,1,1,2,1,1,1,1,4,1,1,1,1,1,1,1,1,1,1,1,1,4,0FFH
;-------------------------------------------------------------------------------------------------------
SONG3:DB 10,9,8,7,6,5,4,3,2,1,0FFH
LEN3: DB  1,1,1,1,1,1,1,1,1,1,0FFH
;----------------------------------------
SONG4:DB 3,5,5,3,2,1,2,3,5,3,2,3,5,5,3,2,1,2,3,2,1,1,0FFH
LEN4: DB 2,1,1,2,1,1,1,2,1,1,1,2,1,1,2,1,1,1,2,1,1,1,0FFH
;-------------------------------------------------------------
SONG5:DB 10,9,8,7,6,5,6,7,8,9,0FFH
LEN5: DB  1,1,1,1,1,1,1,1,1,1,0FFH
;-----------------------------------
      END

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -