X_X EQU 6CH ;异地旋转X-X
Y_Y EQU 6DH ;异地旋转Y-Y
HANGSHU EQU 2BH
BT0 BIT 2FH.0 ;节拍法标志位
SANFEIJI BIT 2FH.1 ;闪烁标志位
CHONGTU BIT 2FH.2 ;冲突标志位,冲突就合成
HANZI BIT 2FH.3 ;显示汉字标志位
GUANSHU EQU 2DH
ANJIAN1 BIT 2FH.4
ANJIAN2 BIT 2FH.5
ANJIAN3 BIT 2FH.6
ANJIAN4 BIT 2FH.7
TINGZHI BIT 2EH.2 ;停止标志位
ZANTING BIT 2EH.3 ;加速标志位
GUOGUAN BIT 2EH.4
FENSHUZHI EQU 6EH
FENSHUZHI1 EQU 78H
SUDU EQU 79H
SUIJISHU EQU 6FH
FXUAN EQU 24H ;用来存储旋转溢出
BEI0 EQU 30H ;第0列数据
BEI1 EQU 31H ;第1列数据
BEI2 EQU 32H ;第2列数据
BEI3 EQU 33H ;第3列数据
BEI4 EQU 34H ;第4列数据
BEI5 EQU 35H ;第5列数据
BEI6 EQU 36H ;第6列数据
BEI7 EQU 37H ;第7列数据
BEI8 EQU 38H ;第8列数据
BEI9 EQU 39H ;第9列数据 背景数据 上面两排左边10列
BEI10 EQU 3AH ;第0列数据
BEI11 EQU 3BH ;第1列数据
BEI12 EQU 3CH ;第2列数据
BEI13 EQU 3DH ;第3列数据
BEI14 EQU 3EH ;第4列数据
BEI15 EQU 3FH ;第5列数据
BEI16 EQU 40H ;第6列数据
BEI17 EQU 41H ;第7列数据
BEI18 EQU 42H ;第8列数据
BEI19 EQU 43H ;第9列数据 背景数据 下面两排左边10列
XIAN0 EQU 44H ;第0列显示数据
XIAN1 EQU 45H ;第1列显示数据
XIAN2 EQU 46H ;第2列显示数据
XIAN3 EQU 47H ;第3列显示数据
XIAN4 EQU 48H ;第4列显示数据
XIAN5 EQU 49H ;第5列显示数据
XIAN6 EQU 4AH ;第6列显示数据
XIAN7 EQU 4BH ;第7列显示数据
XIAN8 EQU 4CH ;第8列显示数据
XIAN9 EQU 4DH ;第9列显示数据 显示数据 上面两排左边10列
XIAN10 EQU 4EH ;第0列显示数据
XIAN11 EQU 4FH ;第1列显示数据
XIAN12 EQU 50H ;第2列显示数据
XIAN13 EQU 51H ;第3列显示数据
XIAN14 EQU 52H ;第4列显示数据
XIAN15 EQU 53H ;第5列显示数据
XIAN16 EQU 54H ;第6列显示数据
XIAN17 EQU 55H ;第7列显示数据
XIAN18 EQU 56H ;第8列显示数据
XIAN19 EQU 57H ;第9列显示数据 显示数据 下面两排左边10列
YIDONG0 EQU 58H ;第0列移动数据
YIDONG1 EQU 59H ;第1列移动数据
YIDONG2 EQU 5AH ;第2列移动数据
YIDONG3 EQU 5BH ;第3列移动数据
YIDONG4 EQU 5CH ;第4列移动数据
YIDONG5 EQU 5DH ;第5列移动数据
YIDONG6 EQU 5EH ;第6列移动数据
YIDONG7 EQU 5FH ;第7列移动数据
YIDONG8 EQU 60H ;第8列移动数据
YIDONG9 EQU 61H ;第9列移动数据
YIDONG10 EQU 62H ;第0列移动数据
YIDONG11 EQU 63H ;第1列移动数据
YIDONG12 EQU 64H ;第2列移动数据
YIDONG13 EQU 65H ;第3列移动数据
YIDONG14 EQU 66H ;第4列移动数据
YIDONG15 EQU 67H ;第5列移动数据
YIDONG16 EQU 68H ;第6列移动数据
YIDONG17 EQU 69H ;第7列移动数据
YIDONG18 EQU 6AH ;第8列移动数据
YIDONG19 EQU 6BH ;第9列移动数据
ORG 00H
LJMP START
ORG 000BH
JMP T_0
START:
MOV R0,#7FH
FUWEI: MOV @R0,#00H
DJNZ R0,FUWEI
MOV FENSHUZHI,#00 ;最开始的时候分数为0
MOV FENSHUZHI1,#00
MOV GUANSHU,#0
MOV SUDU,#50
START1:
CALL CHUZHI1
CALL CHUZHI2 ;最开始的时候产生的积木
; MOV SUIJISHU,#6 ;最开始的时候产生的随机数为6(随机产生积木)
CLR HANZI
;在最开始的时候,把HANZI置成1用来显示汉字
MAIN1:
MOV SP,#79H
MOV TMOD,#01H
MOV DPTR,#65536-20000
MOV TH0,DPH
MOV TL0,DPL
MOV CBUFTH0,DPH
MOV CBUFTL0,DPL
SETB EA
SETB ET0
SETB TR0
CLR BT0 ;中断标志位
;CLR CHONGTU ;数据冲突标志位,等于0表示不冲突,能选择等
CLR ANJIAN1 ;按键1已经按下的的标志位
CLR ANJIAN2 ;按键2已经按下的的标志位
CLR ANJIAN3 ;按键3已经按下的的标志位
CLR ANJIAN4 ;按键4已经按下的的标志位
CLR ZANTING
CLR GUOGUAN
; CLR CHONGHE ;用来出1S的标志
MOV R2,#0
MOV R3,#0 ;X坐标
MOV 73H,#0 ;显示汉字的初始值
MOV R0,73H
MOV 74H,#0
MAIN: JNB BT0,MAIN ;等待中断的到来(执行中断返回后,BT0等于1)
CLR BT0
JNB HANZI,HUNAN ;HANZI等于0就去显示汉字
LJMP YUANDIAN
HUNAN: MOV R0,73H
LCALL KAISHIXIANSHI
jb xuanjian,taiqi44
jb anjian1,taiqi44
setb anjian1
SETB HANZI ;旋转键按下就开始游戏
LJMP MAIN1
taiqi44: jnb xuanjian,GGG
clr anjian1
GGG: INC R2
CJNE R2,#5,MAIN
MOV R2,#0
INC 73H
INC 73H
MOV A,73H
CJNE A,#228,MAIN
MOV 73H,#0
LJMP MAIN
YUANDIAN:
CALL FENSHU
CALL FENSHU1
JNB GUOGUAN,CCRR ;是否过关
MOV FENSHUZHI,#0
LCALL FUWEI4
MOV A,SUDU ;过关后速度加快
CJNE A,#5,HHRR
MOV A,#50
HHRR: SUBB A,#5
MOV SUDU,A
LJMP START1
CCRR: CALL CHUFEIJI
CALL HECHENG ;背景合成显示
CALL XIANSHI ;调用显示子程序
CALL JIANPAN ;按键判断子程序
JNB ZANTING,MAIN
JB HANZI,HHH
LCALL FUWEI4
LCALL BAOCUN
LJMP START1
HHH:
INC R2
MOV A,R2 ;判断是否来了
CJNE A,SUDU,MAIN ;1S没有来什么事情都不干
MOV R2,#0 ;来了
CALL XIAYI ;下移子程序
JNB HANZI,JJJ
LJMP MAIN
JJJ:
LCALL FUWEI4
LCALL BAOCUN
LJMP START1
BAOCUN:
MOV A,GUANSHU
MOV B,#10
MUL AB
MOV FENSHUZHI1,A
RET
CHUSUIJI:
MOV A,TL0
MOV B,#08
DIV AB
MOV A,B
MOV SUIJISHU,A
RET
CHUFEIJI:
CLR PSW.7
MOV A,R3
SUBB A,#8
JB PSW.7,III
MOV R3,#0
; CJNE R3,#8,III
; MOV R3,#0
; CPL SANFEIJI
; JNB SANFEIJI,III
CALL CHUSUIJI
CALL SUIJI
III:
RET
SUIJI:
MOV A,SUIJISHU
CLR C
RLC A
MOV DPTR,#TAB
JMP @A+DPTR
TAB: AJMP SUB0
AJMP SUB1
AJMP SUB2
AJMP SUB3
AJMP SUB4
AJMP SUB5
AJMP SUB6
AJMP SUB7
SUB0:
ORL YIDONG0,#0AH
ORL YIDONG1,#0FH
ORL YIDONG2,#0AH
RET
SUB1:
ORL YIDONG1,#0AH
ORL YIDONG2,#0FH
ORL YIDONG3,#0AH
RET
SUB2:
ORL YIDONG2,#0AH
ORL YIDONG3,#0FH
ORL YIDONG4,#0AH
RET
SUB3:
ORL YIDONG3,#0AH
ORL YIDONG4,#0FH
ORL YIDONG5,#0AH
RET
SUB4:
ORL YIDONG4,#0AH
ORL YIDONG5,#0FH
ORL YIDONG6,#0AH
RET
SUB5:
ORL YIDONG5,#0AH
ORL YIDONG6,#0FH
ORL YIDONG7,#0AH
RET
SUB6:
ORL YIDONG6,#0AH
ORL YIDONG7,#0FH
ORL YIDONG8,#0AH
RET
SUB7:
ORL YIDONG7,#0AH
ORL YIDONG8,#0FH
ORL YIDONG9,#0AH
RET
FUWEI4:
MOV R0,#6BH
FUWEI78:MOV @R0,#00h
DEC R0
CJNE R0,#2FH,FUWEI78
RET
;///////////////替换子程序////////////////////
;输入:""
;输出: ""
;实现的功能:将飞机模型载入BEI里面
TIHUAN1:
MOV BEI13,XUAN1
MOV BEI14,XUAN2
MOV BEI15,XUAN3
RET
;///////////////替换子程序////////////////////
;输入:""
;输出: ""
;实现的功能:将飞机模型载入BEI里面
TIHUAN2:
MOV YIDONG3,XUAN1
MOV YIDONG4,XUAN2
MOV YIDONG5,XUAN3
RET
;///////////////初值1子程序///////////////////
;输入:""
;输出: ""
;实现的功能:产生飞机模型2
CHUZHI1:MOV XUAN1,#0A0H
MOV XUAN2,#0F0H
MOV XUAN3,#0A0H
CALL TIHUAN1
RET
;///////////////初值1子程序///////////////////
;输入:""
;输出: ""
;实现的功能:产生飞机模型
CHUZHI2:MOV XUAN1,#0AH
MOV XUAN2,#0FH
MOV XUAN3,#0AH
CALL TIHUAN2
RET
;///////////////合成子程序///////////////////
;输入:"背景与移动"
;输出: "显示"
;实现的功能:把背景与移动合成到显示
HECHENG:MOV 73H,#XIAN0
MOV R0,#BEI0
MOV 74H,#YIDONG0
WANG1: MOV A,@R0
MOV R1,74H
ORL A,@R1
MOV R1,73H
MOV @R1,A
INC R0
INC 74H
INC 73H
CJNE R0,#44H,WANG1
RET
;///////////////显示子程序///////////////////
;输入:""
;输出: ""
;实现的功能:显示 XIAN0- XIAN9 XIAN10- XIAN19的内容
XIANSHI:
MOV SHUJU,#00H
CLR LATCH_L ;下面的两个点阵不亮
SETB LATCH_H ;开上面的两个点阵
MOV R0,#XIAN0
MOV R1,#00
WANG: MOV PIANXUAN,R1 ;片选
MOV SHUJU,@R0 ;数据
CALL DELAY ;延时
MOV SHUJU,#00 ;关屏幕
INC R0
INC R1
CJNE R0,#4EH,WANG
MOV PIANXUAN,#10
MOV SHUJU,#0FFH
CALL DELAY
MOV SHUJU,#00
;显示分数
LCALL FENSHU1
LCALL FENSHU2
MOV PIANXUAN,#12
MOV SHUJU,44H
CALL DELAY
MOV SHUJU,#00
MOV PIANXUAN,#13
MOV SHUJU,45H
CALL DELAY
MOV SHUJU,#00
;
MOV PIANXUAN,#14
MOV SHUJU,46H
CALL DELAY
MOV SHUJU,#00
MOV PIANXUAN,#15
MOV SHUJU,47H
CALL DELAY
MOV SHUJU,#00
CLR LATCH_H
SETB LATCH_L
MOV R0,#XIAN10
MOV R1,#00
ZHENG: MOV PIANXUAN,R1
MOV SHUJU,@R0 ;数据
CALL DELAY ;延时
MOV SHUJU,#00 ;关屏幕
INC R0
INC R1
CJNE R0,#58H,ZHENG
MOV PIANXUAN,#10
MOV SHUJU,#0FFH
CALL DELAY
MOV SHUJU,#00H
LCALL FENSHU1
MOV A,B
LCALL FENSHU2
MOV PIANXUAN,#12
MOV SHUJU,44H
CALL DELAY
MOV SHUJU,#00
MOV PIANXUAN,#13
MOV SHUJU,45H
CALL DELAY
MOV SHUJU,#00
MOV PIANXUAN,#14
MOV SHUJU,46H
CALL DELAY
MOV SHUJU,#00
MOV PIANXUAN,#15
MOV SHUJU,47H
CALL DELAY
MOV SHUJU,#00
RET
;///////////////显示汉字子程序///////////////////
;输入:""
;输出: ""
;实现的功能:滚动显示湖南源点教育
KAISHIXIANSHI:
LOOP:
MOV SHUJU,#00H
CLR LATCH_H ;下面的两个点阵不亮
SETB LATCH_L ;开上面的两个点阵
MOV PIANXUAN,74H
MOV DPTR,#TAB4
MOV A,R0
MOVC A,@A+DPTR
MOV SHUJU,A
CALL DELAY
MOV SHUJU,#00
CLR LATCH_L
SETB LATCH_H
INC R0
MOV PIANXUAN,74H
MOV DPTR,#TAB4
MOV A,R0
MOVC A,@A+DPTR
MOV SHUJU,A
CALL DELAY
MOV SHUJU,#00
INC R0
INC 74H
MOV A,74H
CJNE A,#16,LOOP
MOV 74H,#0
OUT3: RET
TAB4:
DB 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h
DB 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h
DB 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h
DB 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h
;湖[16*16]下上列排
DB 04h, 10h, 0FCh, 21h, 02h, 62h, 01h, 16h
DB 7Fh, 90h, 20h, 90h, 20h, 0FFh, 20h, 90h
DB 0BFh, 0D0h, 40h, 90h, 3Fh, 0FEh, 42h, 22h
DB 82h, 22h, 7Fh, 0FFh, 00h, 02h, 00h, 00h
;南[16*16]下上列排
DB 00h, 04h, 0FFh, 0E4h, 00h, 24h, 09h, 24h
DB 09h, 64h, 09h, 0A4h, 09h, 24h, 7Fh, 3Fh
DB 09h, 24h, 09h, 0A4h, 09h, 64h, 49h, 24h
DB 80h, 24h, 7Fh, 0F6h, 00h, 24h, 00h, 00h
;源[16*16]下上列排
DB 04h, 10h, 04h, 22h, 0FEh, 64h, 41h, 0Ch
DB 30h, 80h, 0Fh, 0FEh, 20h, 02h, 13h, 0E2h
DB 5Ah, 0A2h, 82h, 0B2h, 7Eh, 0AEh, 02h, 0A2h
DB 0Ah, 0A2h, 13h, 0F3h, 30h, 22h, 00h, 00h
;点[16*16]下上列排
DB 80h, 00h, 40h, 00h, 37h, 0C0h, 04h, 40h
DB 14h, 40h, 64h, 40h, 04h, 7Fh, 14h, 48h
DB 24h, 48h, 64h, 48h, 04h, 48h, 17h, 0E8h
DB 20h, 4Ch, 0C0h, 08h, 00h, 00h, 00h, 00h
;教[16*16]下上列排
DB 02h, 20h, 12h, 24h, 51h, 24h, 90h, 0A4h
DB 7Eh, 0FFh, 0Ah, 0A4h, 89h, 0B4h, 40h, 0ACh
DB 20h, 20h, 0Bh, 9Fh, 04h, 10h, 0Bh, 10h
DB 60h, 0F0h, 0C0h, 18h, 40h, 10h, 00h, 00h
;育[16*16]下上列排
DB 00h, 04h, 00h, 04h, 00h, 24h, 0FFh, 0A4h
DB 0Ah, 0B4h, 0Ah, 0ACh, 0Ah, 0A5h, 0Ah, 0A6h
DB 0Ah, 0A4h, 4Ah, 0A4h, 8Ah, 0A4h, 7Fh, 0B4h
DB 00h, 64h, 00h, 06h, 00h, 04h, 00h, 00h
DB 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h
DB 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h
DB 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h
DB 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h
FENSHU:
CLR PSW.7
MOV A,FENSHUZHI
SUBB A,#9
JB PSW.7,TTTT
INC FENSHUZHI1
MOV FENSHUZHI,#0
TTTT:
RET
FENSHU1:
MOV B,#10
MOV A,FENSHUZHI1
DIV AB
CJNE A,GUANSHU,VVVV
RET
VVVV: MOV GUANSHU,A
SETB GUOGUAN
RET
FENSHU2:
CLR C
RLC A
MOV DPTR,#TAB1
JMP @A+DPTR
TAB1:
AJMP SUB00
AJMP SUB10
AJMP SUB20
AJMP SUB30
AJMP SUB40
AJMP SUB50
AJMP SUB60
AJMP SUB70
AJMP SUB80
AJMP SUB90
SUB00:
MOV 44H,#70H ;分数0的显示
MOV 45H,#88H
MOV 46H,#88H
MOV 47H,#70H
RET
SUB10:
MOV 44H,#00H
MOV 45H,#00H
MOV 46H,#00H
MOV 47H,#0F8H
RET
SUB20:
MOV 44H,#0E8H
MOV 45H,#0A8H
MOV 46H,#0A8H
MOV 47H,#0B8H
RET
SUB30:
MOV 44H,#0A8H
MOV 45H,#0A8H
MOV 46H,#0A8H
MOV 47H,#0F8H
RET
SUB40:
MOV 44H,#38H
MOV 45H,#20H
MOV 46H,#20H
MOV 47H,#0F8H
RET
SUB50:
MOV 44H,#0B8H
MOV 45H,#0A8H
MOV 46H,#0A8H
MOV 47H,#0E8H
RET
SUB60:
MOV 44H,#0F8H
MOV 45H,#0A8H
MOV 46H,#0A8H
MOV 47H,#0E8H
RET
SUB70:
MOV 44H,#08H
MOV 45H,#08H
MOV 46H,#08H
MOV 47H,#0F8H
RET
SUB80:
MOV 44H,#0F8H
MOV 45H,#0A8H
MOV 46H,#0A8H
MOV 47H,#0F8H
RET
SUB90:
MOV 44H,#0B8H
MOV 45H,#0A8H
MOV 46H,#0A8H
MOV 47H,#0F8H
RET
;///////////////下移子程序////////////////////
;输入:""
;输出: ""
;实现的功能:将BEI1-BEI9里面的数左移
XIAYI:
CALL XIAYI3 ;先下移
INC R3
INC FENSHUZHI
CALL CHONGTUPANDUAN ;是否能下移
CCCC: RET
XIAYI3: MOV R0,#YIDONG0
MOV R1,#YIDONG10
WANG3: CLR C
MOV A,@R0
RLC A
MOV @R0,A
MOV A,@R1
RLC A
MOV @R1,A
INC R0
INC R1
CJNE R0,#62H,WANG3
RET
;///////////////左移子程序////////////////////
;输入:""
;输出: ""
;实现的功能:
ZUOYI:
MOV A,BEI0 ;判断能不能左移
JZ ZUOYI1
RET
ZUOYI1: MOV A,BEI10
JZ ZUOYI2
RET
ZUOYI2:
MOV 73H,BEI0 ;30H-3DH
MOV R0,#31H
WANG4: MOV A,@R0 ;31H-30H
DEC R0
MOV @R0,A
INC R0
INC R0
CJNE R0,#44H,WANG4
MOV 43H,73H
CALL CHONGTUPANDUAN ;是否能下移
WANG50: RET
;///////////////右移子程序////////////////////
;输入:""
;输出: ""
;实现的功能:
YOUYI:
MOV A,BEI9 ;判断能不能再右移
JZ YOUYI1
RET
YOUYI1: MOV A,BEI19
JZ YOUYI2
RET
YOUYI2:
INC X_X
CALL YOUYI3 ;坐标加一用于异地旋转
RET
YOUYI3:
CALL YOUYI4
CALL CHONGTUPANDUAN ;是否能下移
WANG51: RET
YOUYI4: MOV 73H,BEI19 ;30H-3DH
MOV R0,#42H
WANG5: MOV A,@R0 ;31H-30H
INC R0
MOV @R0,A
DEC R0
DEC R0
CJNE R0,#2FH,WANG5
MOV 30H,73H
RET
;///////////////判断按键子程序///////////////////
;输入:"无"
;输出: ""
;实现的功能:
jianpan:
jb xuanjian,taiqi ;设置按键
jb anjian1,taiqi ;有键按下R4加1(设置那个部分)
setb anjian1 ;把ANJIAN1设置为1(防止1次按键 多次响应)
CPL zanting
taiqi: jnb xuanjian,panzuo ;抬起后anjina1等于0
clr anjian1
JNB ZANTING,outtT
panzuo: ;加按键
jb zuojian,taiqi2
CPL ANJIAN2
jb anjian2,taiqi2
;setb anjian2
call zuoyi
taiqi2: ;jnb zuojian,panyou
; clr anjian2
panyou: jb youjian,taiqi3 ;减按键
; jb anjian3,taiqi3
; setb anjian3
call youyi
taiqi3: ;jnb youjian,panxia
; clr anjian3
panxia: jb xiajian,taiqi5 ;转换按键
;jb anjian4,taiqi5 ;有键按下R4加1(设置那个部分)
;setb anjian4
call xiayi
taiqi5: ;jnb xiajian,outtt
;clr anjian4
outtt: ret
;///////////////冲突判断子程序///////////////////
;输入:""
;输出: ""
;实现的功能:判断两个飞机是否相撞,相撞后冲突变为0
CHONGTUPANDUAN:
MOV R0,#BEI0
MOV R1,#YIDONG0
WANG34: MOV A,@R0
ANL A,@R1
JZ ZHENG34
ZHENG334:
CLR HANZI ;相撞了
RET
ZHENG34:
INC R0
INC R1
CJNE R0,#44H,WANG34
SETB HANZI ;没相撞
RET
;///////////////中断子程序///////////////////
;输入:""
;输出: ""
;实现的功能:把A的数输出到P2口显示
T_0: MOV TL0,CBUFTL0
MOV TH0,CBUFTH0
SETB BT0
RETI
;///////////////延时子程序///////////////////
;输入:""
;输出: ""
;实现的功能:
DELAY: MOV R6,#8
DD1: MOV R7,#40
DJNZ R7,$
DJNZ R6,DD1
RET
;///////////////结束子程序///////////////////
END