标题:
flappybird游戏在51单片机上实现的汇编程序
[打印本页]
作者:
fancyss
时间:
2019-11-22 16:59
标题:
flappybird游戏在51单片机上实现的汇编程序
$include(t89c51cc01.inc)
KEYBOARD equ 00H
height equ 10111111B ; THE HEIGHT OF BIRD
delay1 equ 08H
org 0000h
LJMP init1
ORG 02FBh ; Initializing of interrupt
LJMP TIMER_INTERRUPT
init1: mov sp, #70h ;Showing "bird go!"
CLR TR1
MOV R1, #00H
MOV R4, #08H
LJMP main
main:
MOV R2, #08H
MOV R3, #06H
CLR C
DJNZ R4, AROW ;Loop of row
LJMP init1
AROW:
MOV A, R1
MOV DPTR, #DATA1
MOVC A, @A+DPTR
ROLL: ;Starting of game
MOV P0, #7FH
JNB P0.0,init2
LJMP LATER
LATER:
RRC A
MOV P4.1, C
CLR P4.0
SETB P4.0
DJNZ R2, ROLL
INC R1
MOV R2, #08H
DJNZ R3, AROW
CLR P3.2
SETB P3.2
CLR P3.2
LJMP main
init2:
mov R3, #25h
mov R4, #00h
JB P2.5, HARD
mov R5, #0FFh
LJMP AVOID
HARD:
MOV R5, #60H
AVOID:
MOV TMOD,#11h
SETB EA ;Initialize interrupts
SETB ET1
CLR TR1
MOV TH1,#08Fh ;Setting the time of interrupts
MOV TL1,#00Fh
setb TR1
ljmp start11
start11:
SETB KEYBOARD
MOV DPTR, #MOVEMENT ;Initializing of showing bird
MOV A, R3
MOVC A, @A+DPTR
MOV R0, A
MOV A, R4
MOVC A, @A+DPTR
MOV R1, A
mov R2, #08h
LJMP Rightmove
displaybird: ;Showinging bird in one row
setb P4.1
CLR P4.0
SETB P4.0
djnz R0, displaybird
CLR P4.1
CLR P4.0
SETB P4.0
displaybird1:
setb P4.1
CLR P4.0
SETB P4.0
djnz R1, displaybird1
mov A, height
ActiveRow:
RRC A
mov p4.1, C
CLR P4.0
SETB P4.0
djnz R2, ActiveRow
CLR P3.2
SETB P3.2
CLR P3.2
ljmp init
Rightmove:
djnz R5, displaybird ;Controlling the speed of game
mov A, height
LCALL DIEORNOT
DOWN:
INC R4
DEC R3
mov A, height ;;move right
RR A ;;move down
MOV height, A
JB P2.5, HARD1
MOV R5, 0FFH
LJMP AVOID1
HARD1:
mov R5, #90h
AVOID1:
LCALL DIEORNOT ;Judge dying or not
LJMP displaybird
DEAD1: ;The effect of game over
mov R5, #00h
mov R6, #03h
DEAD12: MOV R1, #00H
MOV R4, #08H
LJMP main76
main76:
MOV R2, #08H
MOV R7, #06H
CLR C
DJNZ R4, AROW76
LJMP DEAD12
AROW76:
lcall value
MOV A, R1
MOV DPTR, #DATA3
MOVC A, @A+DPTR
ROLL76:
RRC A
MOV P4.1, C
CLR P4.0
SETB P4.0
DJNZ R2, ROLL76
INC R1
MOV R2, #08H
DJNZ R7, AROW76
CLR P3.2
SETB P3.2
CLR P3.2
LJMP main76
CHECK4:
MOV A,R3
INC A
MOV B, #08H
DIV AB
ADD A, #12H
MOV DPTR, #DATA2
MOVC A, @A+DPTR
MOV R7, A
MOV A, #08H
SUBB A, B
MOV B, A
MOV A, R7
MOV R7, B
ROLLING4:
RLC A
DJNZ R7,ROLLING4
JNC DEAD1
RET
CHECK5:
MOV A, R3
INC A
MOV B, #08H
DIV AB
ADD A, #18H
MOV DPTR, #DATA2
MOVC A, @A+DPTR
MOV R7, A
MOV A, #08H
SUBB A, B
MOV B, A
MOV A, R7
MOV R7, B
ROLLING5:
RLC A
DJNZ R7,ROLLING5
JNC DEAD1
RET
CHECK6:
MOV A,R3
INC A
MOV B, #08H
DIV AB
ADD A, #1EH
MOV DPTR, #DATA2
MOVC A, @A+DPTR
MOV R7, A
MOV A, #08H
SUBB A, B
MOV B, A
MOV A, R7
MOV R7, B
ROLLING6:
RLC A
DJNZ R7,ROLLING6
JNC DEAD
RET
CHECK7:
MOV A, R3
INC A
MOV B, #08H
DIV AB
ADD A, #24H
MOV DPTR, #DATA2
MOVC A, @A+DPTR
MOV R7, A
MOV A, #08H
SUBB A, B
MOV B, A
MOV A, R7
MOV R7, B
ROLLING7:
RLC A
DJNZ R7,ROLLING7
JNC DEAD
RET
DIEORNOT:
RRC A ;Judging which row is the bird in
RRC A
JNC CHECK1
RRC A
JNC CHECK2
RRC A
JNC CHECK3
RRC A
JNC CHECK4
RRC A
JNC CHECK5
RRC A
JNC CHECK6
RRC A
JNC CHECK7
RET
CHECK3:
MOV A,R3
INC A
MOV B, #08H
DIV AB
ADD A, #0CH
MOV DPTR, #DATA2
MOVC A, @A+DPTR
MOV R7, A
MOV A, #08H
SUBB A, B
MOV B, A
MOV A, R7
MOV R7, B
ROLLING3:
RLC A
DJNZ R7,ROLLING3
JNC DEAD
RET
DEAD: ;The effect of game over
mov R5, #00h
mov R6, #03h
DEAD2: MOV R1, #00H
MOV R4, #08H
LJMP main7
main7:
MOV R2, #08H
MOV R7, #06H
CLR C
DJNZ R4, AROW7
LJMP DEAD2
AROW7:
lcall value
MOV A, R1
MOV DPTR, #DATA3
MOVC A, @A+DPTR
ROLL7:
RRC A
MOV P4.1, C
CLR P4.0
SETB P4.0
DJNZ R2, ROLL7
INC R1
MOV R2, #08H
DJNZ R7, AROW7
CLR P3.2
SETB P3.2
CLR P3.2
LJMP main7
CHECK1:
MOV A, R3
INC A
MOV B, #08H
DIV AB
MOV DPTR, #DATA2
MOVC A, @A+DPTR
MOV R7, A
MOV A, #08H
SUBB A, B
MOV B, A
MOV A, R7
MOV R7, B
ROLLING1:
RLC A
DJNZ R7,ROLLING1
JNC DEAD
RET
CHECK2:
MOV A, R3
INC A
MOV B, #08H
DIV AB
ADD A, #06H
MOV DPTR, #DATA2
MOVC A, @A+DPTR
MOV R7, A
MOV A, #08H
SUBB A, B
MOV B, A
MOV A, R7
MOV R7, B
ROLLING2:
RLC A
DJNZ R7,ROLLING2
JNC DEAD
RET
init: ;Showing the map of game
MOV R6, #00H
MOV R2, #08H
LJMP main11
main11:
MOV R0, #08H
MOV R1, #06H
CLR C
DJNZ R2, AAROW
ljmp start11
AAROW:
MOV A, R6
MOV DPTR, #DATA2
MOVC A, @A+DPTR
RROLL:
clr C
RRC A
MOV P4.1, C
CLR P4.0
SETB P4.0
DJNZ R0, RROLL
INC R6
MOV R0, #08H
DJNZ R1, AAROW
CLR P3.2
SETB P3.2
CLR P3.2
LJMP main11
TIMER_INTERRUPT: ;judging winning or not
mov P0, #0EFH ;judging jumping or not
MOV TH1,#08Fh
MOV TL1,#00Fh
setb TR1
jnb p0.2, goup
INC R3
INC R3
DJNZ R3,NOWIN
LJMP WIN
NOWIN:
DEC R3
reti
goup: ;keeping stability of jumping
jnb KEYBOARD, KEYOFF
ljmp goup1
goup1:
nop
nop
jnb P0.2, goup1
CPL P2.3
MOV A, height
RL A
MOV height, A
CLR KEYBOARD
KEYOFF:
reti
WIN:
MOV R1, #00H
MOV R4, #08H
LJMP main8
main8:
MOV R2, #08H
MOV R7, #06H
CLR C
DJNZ R4, AROW8
LJMP WIN
AROW8:
MOV A, R1
MOV DPTR, #DATA4
MOVC A, @A+DPTR
ROLL8:
RRC A
MOV P4.1, C
CLR P4.0
SETB P4.0
DJNZ R2, ROLL8
INC R1
MOV R2, #08H
DJNZ R7, AROW8
CLR P3.2
SETB P3.2
CLR P3.2
LJMP main8
value: MOV A, R5
MOV DPTR, #DATA5
MOVC A, @A+DPTR
mov R3, A
increase:
djnz R6, gogogo
mov R6, 02h
DELAY:
DJNZ delay1, NEXT
INC R5
NEXT: LJMP continue
gogogo: ret
continue: djnz R3,function2
ljmp main1
function2: djnz R3,function3
ljmp main2
function3: djnz R3,function4
ljmp main3
function4: djnz R3,function5
ljmp main4
function5: djnz R3,function6
ljmp main5
function6: djnz R3,function7
ljmp main6
function7: djnz R3,function8
ljmp main77
function8: ljmp main88
main1:
mov tcon,#00010000b
mov tmod,#00000001b
mov th0,#0f8h
mov tl0,#08bh
ljmp loop1
main2:
mov tcon,#00010000b
mov tmod,#00000001b
mov th0,#0f9h
mov tl0,#05bh
ljmp loop1
main3:
mov tcon,#00010000b
mov tmod,#00000001b
mov th0,#0fah
mov tl0,#014h
ljmp loop1
main4:
mov tcon,#00010000b
mov tmod,#00000001b
mov th0,#0fah
mov tl0,#087h
ljmp loop1
main5:
mov tcon,#00010000b
mov tmod,#00000001b
mov th0,#0fbh
mov tl0,#004h
ljmp loop1
main6:
mov tcon,#00010000b
mov tmod,#00000001b
mov th0,#0fbh
mov tl0,#08fh
ljmp loop1
main77:
mov tcon,#00010000b
mov tmod,#00000001b
mov th0,#0fbh
mov tl0,#0b3h
ljmp loop1
main88:
mov tcon,#00010000b
mov tmod,#00000001b
mov th0,#0fch
mov tl0,#044h
ljmp loop1
loop1:
jnb tf0,loop1
cpl p2.2
ljmp value
MOVEMENT:
DB 01H, 02H, 03H, 04H, 05H, 06H, 07H, 08H, 09H, 0AH, 0BH, 0CH, 0DH, 0EH, 0FH, 10H, 11H, 12H, 13H, 14H, 15H, 16H, 17H, 18H, 19H, 1AH, 1BH, 1CH, 1DH, 1EH, 1FH, 20H
DB 21H, 22H, 23H, 24H, 25H, 26H
DATA1:
DB 11111111B,11111111B,11111111B,11111111B,11111111B,11111101B
DB 11111101B,11000111B,10001011B,11101111B,10011110B,11111011B
DB 00111111B,11110111B,01101101B,11101111B,10101110B,11110111B
DB 11011101B,11100110B,10001111B,11101111B,10011110B,11101111B
DB 00111101B,11010111B,11101111B,11100111B,10101111B,11011111B
DB 11111101B,11100111B,11101111B,11101011B,10011110B,10111111B
DB 11111111B,11111111B,11111111B,11111111B,11111111B,01111111B
DATA2:
DB 10001100B,10100000B,00010000B,00000000B,11110000B,11111101B
DB 11001111B,11100001B,01110111B,00011000B,11110000B,11111011B
DB 11111010B,10111010B,11011110B,00111000B,11110000B,11110111B
DB 01111100B,00110111B,11111100B,01111011B,11110000B,11101111B
DB 00001100B,00011010B,00000000B,11101111B,11110011B,11011111B
DB 00001000B,00010000B,00000000B,00001110B,11111111B,10111111B
DB 00000000B,00000000B,00000000B,00000000B,11111100B,01111111B
DATA3:
DB 11111111B,11111111B,11111111B,11111111B,11111111B,11111101B
DB 10000011B,01110001B,10011100B,11001111B,11101111B,11111011B
DB 10111111B,10111011B,01101101B,10110111B,11101111B,11110111B
DB 10000011B,11011011B,11110101B,01111010B,11101111B,11101111B
DB 10111111B,10111011B,11110101B,10110110B,11010111B,11011111B
DB 10000011B,01110001B,11110100B,11001110B,10111011B,10111111B
DB 11111111B,11111111B,11111111B,11111111B,11111111B,01111111B
DATA4:
DB 11111111B,10111101B,11110111B,11111111B,11111111B,11111101B
DB 11111111B,11011011B,11110111B,11111111B,11111111B,11111011B
DB 11111111B,01100111B,00000000B,11111111B,11111111B,11110111B
DB 11111111B,11100111B,11110111B,11111111B,11111111B,11101111B
DB 11111111B,11011011B,10000001B,11111111B,11111111B,11011111B
DB 11111111B,10111101B,11010111B,11111111B,11111111B,10111111B
DB 11111111B,11111111B,11110111B,11111111B,11111111B,01111111B
DATA5:
DB 01h,02h,03h,04h,05h,06h,07h,08h,07h,06H,05h,04h,03h,02h,01h,01h,03h,05h,07h,02h,04h,06h,08h,08h,06h,04h,02h,02h,03h,07h,01h
end
复制代码
flappy bird.rar
2019-11-22 16:59 上传
点击文件名下载附件
下载积分: 黑币 -5
266.7 KB, 下载次数: 3, 下载积分: 黑币 -5
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1