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

📄 123.asm

📁 基于AT89C51的单片机乒乓球游戏机设计。
💻 ASM
📖 第 1 页 / 共 2 页
字号:
;*****************************************;右下左移END

;*****************************************;左上左移BEGIN
 Rmovlu:
LCALL   InitSpeed
           MOV P1 ,#00H            ;
           MOV P0, #00H
           MOV R5 ,#01H           ;
           MOV R7 ,#03H
           SETB C
           CLR A
  Rmovlu1:
           RLC A
           MOV P0,A
           INC R5
           CJNE R5 , #02H,Rmovlu4
                                            ;已经到了最后两列
  Rmovlu2:
             MOV DPARM ,R6                   ;延时系数
  Rmovlu3:

           LCALL DELAY20                  ;20msDELAY
           JB  P2.3   ,Rmovlu6            ;左方提前按键右方得分
           JB  P2.2   ,Rmovlu6
           DJNZ DPARM ,Rmovlu3           ;延时未结束则继续延时
           AJMP Rmovlu1                   ;右移
  Rmovlu4:
           MOV DPARM  ,R6                 ;延时系数
  Rmovlu5:
LCALL DELAY20
           JB  P2.3  ,Rmovlu7            ;有没有击中球
           DJNZ  DPARM,Rmovlu5
           NOP
           NOP
DJNZ R7, Rmovlu1
  Rmovlu6:
           INC  R3                        ;没有击中或提前击
           AJMP Justicer
  Rmovlu7:
           AJMP Rmovru                    ;跳转到左上右移
;*****************************************;左上左移END

;*****************************************;左下左移BEGIN
 Rmovld:
LCALL   InitSpeed
           MOV P1   ,#00H                ;关行选,黑屏,准备刷新
MOV P0   ,#00H
           SETB C        ;右移一次后第4行亮
           CLR A
           MOV R5,#01H
           MOV R7,#03H
  Rmovld1:
           RRC A
           MOV P0,A
           INC R5
           CJNE R5 , #02H,Rmovld4               ;没有传到最后两列
  Rmovld2:
           MOV DPARM ,R6                  ;延时系数
  Rmovld3:
           LCALL Delay20                  ;20msDELAY
           JB  P2.2   ,Rmovld6            ;左方提前按键右方得分
           JB  P2.3   ,Rmovld6
           DJNZ DPARM ,Rmovld3            ;延时未结束则继续延时
           AJMP Rmovld1                   ;右移
Rmovld4:
           MOV DPARM  ,R6                 ;延时系数
Rmovld5:  LCALL DELAY20
           JB  P2.2   ,Rmovld7            ;有没有击中球
           NOP
           NOP
           DJNZ  DPARM,Rmovld5
           DJNZ R7, Rmovld1
Rmovld6:
           INC  R3                        ;没有击中或提前击
           AJMP JUSTICER                  ;
Rmovld7:
           AJMP Rmovrd ;跳转到左下右移
;*****************************************;左下左移END

;*****************************************;Justicer Start
;***判定程序执行方向,显示缓冲区赋值***;
Justicer:
       MOV P0,#00H
       MOV P1,#00H
       LCALL Delay1S
       CJNE R2,#11,Four                ;R2同11比较
       AJMP Two                      ;R2等于11
One:
       CJNE R3,#11,Five               ;R3同11比较
Two:                                 ;R2超过11
       MOV A,R2
       SUBB A,R3
       JBC CY,Three
       SUBB A,#2
       JBC CY,Continue                ;R2等于11,但未比R3大2
       AJMP Lwininning                 ;R2等于11
Three:                                ;R3超过11并比R2大2
       MOV A,R3
       SUBB A,R2
       SUBB A,#2
       JBC CY,Continue                ;R3超过11,但未比R2大2
       AJMP Rwininning                 ;R3超过11并比R2大2
Four:
       JBC CY,One                     ;R2小于11
       AJMP Two                        ;R2大于11
Five:
       JNC Two                        ;R2小于11,R3大于11
       AJMP Continue                   ;R2小于11,R3小于11
Continue:
       MOV A,R2
       MOV B,#10
       DIV AB                         ;A中存放10位数,B中存放个位数
       MOV 6Ah,A
       MOV 6Bh,B
       MOV 6Ch,R4
       MOV 6Dh,10H
       MOV A,R3
       MOV B,#10
       DIV AB
       MOV 6Eh,A
       MOV 6Fh,B                      ;向缓冲区赋值
       LCALL  Display                 ;显示新比分
       ACALL Musicsuccess
       LJMP Play
Lwininning:                           ;左方胜出一局
       INC R4
       CJNE R4,#3,Newinning           ;判断左方是否已胜3局
       ACALL  LWin
       AJMP Newinning                    ;左方胜出
Rwininning:                           ;右方胜出一局
       INC 10H
       MOV R7,10H
       CJNE R7,#3,Newinning           ;判断右方是否已胜3局
       ACALL  RWin                     ;右方胜出
Newinning:                            ;开始新的一局
       MOV 6Ah,#00h
       MOV 6Bh,#00h
       MOV 6Ch,R4
       MOV 6Dh,10H
       MOV 6Eh,#00h
       MOV 6Fh,#00h
       LCALL  Display                 ;显示比分
       ACALL LWin
       MOV R2,#00H                    ;左拍清零
       MOV R3,#00H                    ;右拍清零
       LJMP Play                      ;继续游戏
;*************************************;Justicer End

;*************显示子程序**************;需要修改
;*************************************;Display End
Display:
        MOV SCON,#00H
        MOV R1,#06H
        MOV R0,#6FH
MOV DPTR,#NUMTAB    ;指向字型码
LOOP:
       MOV A,@R0
       MOVC A,@A+DPTR
       MOV SBUF,A
DLAY:  JNB TI,DLAY
        CLR TI
        DEC R0
        DJNZ R1,LOOP
        RET
NUMTAB:  DB 0FCH,60H,0DAH,0F2H,66H,0B6H,0BEH,0E0H,0FEH,0F6H

;***********DisplayEND*****显示程序结束

  ;*************胜利音乐**************
MusicInit1:
       PUSH PSW
       SETB RS1
       CLR  RS0

       MOV TH1,#0D8H
       MOV TL1,#0EFH
       MOV TMOD,#10H
       MOV IE,#88H
MUSIC01:
       MOV DPTR,#MusicTab2             ;表头地址送DPTR
       MOV 21H,#00H                   ;中断计数器清0
MUSIC11:
       NOP
       CLR A
       MOVC A,@A+DPTR
       JZ END01                        ;是00H,则结束
       CJNE A,#0FFH,MUSIC51            ;如果是休止符,往下执行
       LJMP MUSIC31
MUSIC51:
       NOP
       MOV R6,A                       ;R6音符的频率
       INC DPTR                       ; DPTR++
       MOV A,#0
       MOVC A,@A+DPTR                 ;取节拍代码送R7
       MOV R7,A                       ;R7音符发音的时间
       SETB TR1                         ;启动计数
MUSIC21:
       NOP
       CPL P3.2                       ;P3.2是音乐输出引脚
       MOV A,R6
       MOV R3,A
       LCALL DEL1
       MOV A,R7
       CJNE A,21H,MUSIC21              ;中断计数器(21H)=R7否?
                                      ;不等,则继续循环
       MOV 21H,#00H                   ;等于,则取下一代码
       INC DPTR
       LJMP MUSIC11
MUSIC31:
       NOP                            ;休止100毫秒
       CLR TR1
       MOV R2,#0DH ;R2=13
MUSIC41:
       NOP
       MOV R3,#0FFH ;R3=255
       LCALL DEL1
       DJNZ R2,MUSIC41
       INC DPTR
       LJMP MUSIC11
END01: POP PSW
       RET
DEL1:                                  ;
       NOP
DEL31:
       MOV R4,#02H
DEL41:
       NOP
       DJNZ R4,DEL41
       NOP
       DJNZ R3,DEL31
       RET
;.....................................;左方胜出
Lwin: ACALL MusicInit1
        RET
;.....................................;右方胜出
Rwin:
      ACALL MusicInit1
        RET
;*************************************;Win End
;***************  击球音乐******************
MusicInit2:
       PUSH PSW
       SETB RS1
       CLR  RS0
       MOV TH1,#0D8H
       MOV TL1,#0EFH
       MOV TMOD,#10H
       MOV IE,#88H
MUSIC02:
       MOV DPTR,#MusicTab3            ;表头地址送DPTR
       MOV 21H,#00H                   ;中断计数器清0
MUSIC12:
       NOP
       CLR A
       MOVC A,@A+DPTR
       JZ END02                        ;是00H,则结束
       CJNE A,#0FFH,MUSIC52            ;如果是休止符,往下执行
       LJMP MUSIC32
MUSIC52:
       NOP
       MOV R6,A                       ;R6音符的频率
       INC DPTR                       ; DPTR++
       MOV A,#0
       MOVC A,@A+DPTR                 ;取节拍代码送R7
       MOV R7,A                       ;R7音符发音的时间
       SETB TR1                         ;启动计数
MUSIC22:
       NOP
       CPL P3.2                       ;P3.2是音乐输出引脚
       MOV A,R6
       MOV R3,A
       LCALL DEL2
       MOV A,R7
       CJNE A,21H,MUSIC22              ;中断计数器(21H)=R7否?
                                      ;不等,则继续循环
       MOV 21H,#00H                   ;等于,则取下一代码
       INC DPTR
       LJMP MUSIC12
MUSIC32:
       NOP                            ;休止100毫秒
       CLR TR1
       MOV R2,#0DH ;R2=13
MUSIC42:
       NOP
       MOV R3,#0FFH ;R3=255
       LCALL DEL2
       DJNZ R2,MUSIC42
       INC DPTR
       LJMP MUSIC12
END02:
       POP PSW
       RET
DEL2:                                  ;
       NOP
DEL32:
       MOV R4,#02H
DEL42:
       NOP
       DJNZ R4,DEL42
       NOP
       DJNZ R3,DEL32
       RET
 ;***************** 得分奖励音乐********************
Musicsuccess:
       PUSH PSW
       SETB RS1
       CLR  RS0
       MOV TH1,#0D8H
       MOV TL1,#0EFH
       MOV TMOD,#10H
       MOV IE,#88H
MUSIC04:
       MOV DPTR,#MusicTab4             ;表头地址送DPTR
       MOV 21H,#00H                   ;中断计数器清0
MUSIC14:
       NOP
       CLR A
       MOVC A,@A+DPTR
       JZ END04                        ;是00H,则结束
       CJNE A,#0FFH,MUSIC54            ;如果是休止符,往下执行
       LJMP MUSIC34
MUSIC54:
       NOP
       MOV R6,A                       ;R6音符的频率
       INC DPTR                       ; DPTR++
       MOV A,#0
       MOVC A,@A+DPTR                 ;取节拍代码送R7
       MOV R7,A                       ;R7音符发音的时间
       SETB TR1                         ;启动计数
MUSIC24:
       NOP
       CPL P3.2                       ;P3.2是音乐输出引脚
       MOV A,R6
       MOV R3,A
       LCALL DEL5
       MOV A,R7
       CJNE A,21H,MUSIC24              ;中断计数器(21H)=R7否?
                                      ;不等,则继续循环
       MOV 21H,#00H                   ;等于,则取下一代码
       INC DPTR
       LJMP MUSIC14
MUSIC34:
       NOP                            ;休止100毫秒
       CLR TR1
       MOV R2,#0DH ;R2=13
MUSIC44:
       NOP
       MOV R3,#0FFH ;R3=255
       LCALL DEL5
       DJNZ R2,MUSIC44
       INC DPTR
       LJMP MUSIC14
END04:
       POP PSW
       RET
DEL5:                                  ;
       NOP
DEL34:
       MOV R4,#02H
DEL44:
       NOP
       DJNZ R4,DEL44
       NOP
       DJNZ R3,DEL34
       RET
MUSICTAB:
       DB 18H, 30H, 1CH, 10H
       DB 20H, 40H, 1CH, 10H
       DB 18H, 10H, 20H, 10H
       DB 1CH, 10H, 18H, 40H
       DB 1CH, 20H, 20H, 20H
       DB 1CH, 20H, 18H, 20H
       DB 20H, 80H, 0FFH, 20H
       DB 30H, 1CH, 10H , 18H
       DB 20H, 15H, 20H , 1CH
       DB 20H, 20H, 20H , 26H
       DB 40H, 20H , 20H , 2BH
       DB 20H, 26H, 20H , 20H
       DB 20H, 30H , 80H , 0FFH
       DB 20H, 20H, 1CH , 10H
       DB 18H, 10H, 20H , 20H
       DB 26H, 20H , 2BH , 20H
       DB 30H, 20H ,00H
MusicTab2:
       DB 14H,10H,12H,10H,10H,10H,12H,04H,10H,10H,12H,04H,10H,10H,12H,10H
       DB 10H,10H,0DH,10H,0CH,10H,10H,10H,12H,04H,10H,10H,12H,04H,10H,10H
       DB 12H,10H,14H,10H,21H,10H,10H,10H,0CH,10H,10H,10H
       DB 12H,20H,14H,04H,12H,10H,10H,10H,12H,20H,14H,10H,12H,40H,0FFH
       DB 18H,10H,20H,04H,18H,10H,20H,04H,18H,10H,1BH,10H,18H,10H,14H,20H,12H,10H
       DB 10H,10H,12H,04H,10H,10H,12H,04H,10H,10H,12H,10H,10H,10H,1BH,10H,0FFH
       DB 18H,10H,1BH,10H,18H,10H,14H,10H,12H,10H,10H,10H,12H,10H
       DB 14H,10H,12H,60H,00H

MusicTab3:
         DB 50H,20H,14H,10H,00H
MusicTab4:
         DB 18H,10H,1BH,10H,18H,10H,14H,10H,12H,10H,10H,10H,12H,10H,00H
;.....................................;

⌨️ 快捷键说明

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