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

📄 atlast.asm

📁 在Power-I 51 Mini开发板上
💻 ASM
字号:
         SPK  EQU       P3.7        ; 蜂鸣器所在端口
    COUNT50  EQU       39H
         SEC  EQU       R0
         MIN  EQU       R1
         SEG  EQU       P2
         NUM  EQU       P0
        SEG7  EQU       30H
        SEG6  EQU       31H
        SEG5  EQU       32H
        SEG4  EQU       33H
        SEG3  EQU       36H
	SEG1  EQU	3AH

        DLAY  EQU       34H
      H_CNT1  EQU       37H
      H_CNT2  EQU       38H
	FLAG  BIT	00H

      KEYVAL  EQU       40H
        XUN1  EQU       41H
        XUN2  EQU       42H
       MUSIC  EQU       43H
              ORG       0000H
              LJMP       MAIN
              ORG       0003H
	      LJMP	PLY_PAU
              ORG       0013H
	      LJMP	STOP
              ORG       000BH       ;定时0中断服务程序
	      LJMP	COUNT
              
;------------------------------------------------------
              ORG       100H
       MAIN:  MOV       SP,#60H     ;初始化堆栈
              MOV       SEC,#0H     ;初始化秒
              MOV       MIN,#0H     ;初始化分
              MOV       COUNT50,#50           ;一秒定时
              CLR  	FLAG
              


              MOV       IE,#8FH
              MOV       TMOD,#11H
              MOV       TH0,#0A5H
              MOV       TL0,#0FFH
              MOV       TH1,#0EDH
              MOV       TL1,#0FFH
              SETB      IT0
              SETB      IT1
             
              MOV       KEYVAL,#00H
              MOV       MUSIC,#01H
              MOV       DPTR,#TABLE1
              MOV       37H,#0FFH
              MOV       38H,#05H

;**************欢迎界面**********************	
      HELLO:  MOV       30H,#7FH
              MOV       31H,#0BFH
              MOV       32H,#0DFH
              MOV       33H,#0EFH
              MOV       36H,#0F7H
	      MOV	3AH,#0FDH
              MOV       P2,SEG3     ;H
              MOV       P0,#89H
		LCALL	LDELAY


              MOV       P2,SEG4     ;E
              MOV       P0,#86H
		LCALL	LDELAY


              MOV       P2,SEG5     ;L
              MOV       P0,#0C7H
		LCALL	LDELAY


              MOV       P2,SEG6     ;L
              MOV       P0,#0C7H
		LCALL	LDELAY

              MOV       P2,SEG7     ;O
              MOV       P0,#0C0H
		LCALL	LDELAY

              MOV       A,KEYVAL
              JNZ       KEYJDG
		DJNZ	H_CNT1,	HELLO
	        DJNZ	H_CNT2,HELLO
;==========================================================
           SETB      TR0			
           LJMP SING
KEYGET:    LCALL KEY
              MOV       A,KEYVAL
              JZ        KEYGET
KEYJDG:    CJNE A,#12H,SECON
     FIRST1:  MOV       DPTR,#TABLE1
              MOV       MUSIC,#01H
              MOV       KEYVAL,#00H
              ;SETB      FLAG
              MOV       SEC,#00H
              MOV       MIN,#00H
              MOV       COUNT50,#50
              SETB      TR0

           LJMP SING
SECON:       CJNE A,#11H,THIR
     SECON1:  MOV       DPTR,#TABLE2
              MOV       MUSIC,#02H
              MOV       KEYVAL,#00H
              ;SETB      FLAG
              MOV       SEC,#00H
              MOV       MIN,#00H
              MOV       COUNT50,#50
              SETB      TR0
              LJMP SING
THIR:         CJNE A,#0FH,FORTH
      THIR1:  MOV       DPTR,#TABLE3
              MOV       MUSIC,#03H
              MOV       KEYVAL,#00H
              ;SETB      FLAG
              MOV       SEC,#00H
              MOV       MIN,#00H
              MOV       COUNT50,#50
              SETB      TR0
           LJMP SING 
FORTH:     CJNE A,#0BH,UP
     FORTH1:  MOV       DPTR,#TABLE4
              MOV       MUSIC,#04H
              MOV       KEYVAL,#00H
              ;SETB      FLAG
              MOV       SEC,#00H
              MOV       MIN,#00H
              MOV       COUNT50,#50
              SETB      TR0
           LJMP SING 
UP:        CJNE A,#02H,DOWN
           MOV       KEYVAL,#00H
           MOV       R5,MUSIC
           CJNE R5,#00H,N1
           LJMP KEYGET
N1:        CJNE R5,#01H,N2
           LJMP FORTH1
N2:        CJNE R5,#02H,N3
           LJMP FIRST1
N3:        CJNE R5,#03H,N4
           LJMP SECON1
N4:        LJMP THIR1
DOWN:     ; LCALL	VLDELAY
		MOV       R5,MUSIC
           MOV       KEYVAL,#00H
           CJNE R5,#00H,M1
           LJMP KEYGET
M1:        CJNE R5,#01H,M2
           LJMP SECON1
M2:        CJNE R5,#02H,M3
           LJMP THIR1
M3:        CJNE R5,#03H,M4
           LJMP FORTH1
M4:        LJMP FIRST1 
;----------------------------------------------------------- 
        KEY: PUSH ACC
     MOV       P1,#0F0H    ;置列线为0,行线为1		;^^^^^^^^^^^^
              MOV       A,P1
           ANL  A,#0F0H
              MOV       B,A
              MOV       P1,#0FH     ;置列线为1,行线为0
              MOV       A,P1
           ANL  A,#0FH
           ORL  A,B 
           CJNE A,#0FFH,UUU
           AJMP QICH
UUU:       CLR  C
           SUBB A,#0DCH
              JNC       HAHA
QICH:      CLR  A

       HAHA:  MOV       KEYVAL,A
     
      POP ACC
              RET
;-------------------------------------------------------------
  
          
        
;-------------------------------------------------------------
;**************定时中断服务程序***********************
      COUNT:  MOV       TH0,#0A5H
              MOV       TL0,#0FFH
	       LCALL KEY
              JNB       FLAG,RETURN
	      DJNZ	COUNT50,RETURN				;是否到一秒
	;*****一秒处理****************
              MOV       COUNT50,#50
              INC       SEC
	      CJNE	SEC,#60,RETURN
              MOV       SEC,#0H
              INC       MIN
	      CJNE	MIN,#100,RETURN				;一百分钟以后自动清零
              MOV       MIN,#00H
RETURN:	      LCALL	DISPLAY
	      RETI
;**************************************************
;**************显示子程序*******************
    DISPLAY:  PUSH      ACC
              PUSH      B
	      PUSH	DPH
	      PUSH	DPL

	     
	      
              MOV       A,MIN
              MOV       B,#0AH
              DIV       AB
              MOV       SEG,SEG4
	      LCALL	TODIS
	      LCALL	DELAY

              MOV       SEG,SEG5
              MOV       A,B
              MOV       DPTR,#TABLE
	      MOVC	A,@A+DPTR
	      ANL	A,#7FH
              MOV       NUM,A
	      LCALL	DELAY


              MOV       A,SEC
              MOV       B,#10
              DIV       AB
              MOV       SEG,SEG6
       	      LCALL	TODIS
	      LCALL	DELAY

	
              MOV       SEG,SEG7
              MOV       A,B
	      LCALL	TODIS
	      LCALL	DELAY
	      	
		 MOV       A,MUSIC
              MOV       SEG,SEG1
	      LCALL	TODIS
	      
	
		POP	DPL
		POP	DPH
              POP       B
              POP       ACC

              RET
;******数字到字型*****************
      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 ;辉赣肽惴值K

⌨️ 快捷键说明

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