导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→发表看法:[长沙卖菜王筝]用51单片机做的飞机游戏(代码量较小)



No.48450
作者:长沙卖菜王筝
邮件:408864998@qq.com
ID:127618
登陆:1次
文章数:1篇
最后登陆IP:
最后登陆:2009/4/16 19:52:04
注册:2009/4/16 19:52:04
财富:100
发帖时间:2009/4/16 19:55:07
发贴者IP:119.39.21.226
标题:长沙卖菜王筝:用51单片机做的飞机游戏(代码量较小)
摘要:No.48450用51单片机做的飞机游戏(代码量较小) 在16*16点阵,俄罗斯方块的基础上,花了一下午的时间,做了一个飞机游戏!请各位大虾指导!拜谢!
;///////////////////////////////////////////
;王筝 QQ:408864998
;本程序利用LED点阵实现飞机游戏
;/////////开始自定义及初始化////////////////
SHUJU  EQU P0        ;数据口高电平亮
PIANXUAN EQU P1    ; 已经外接154
LATCH_H EQU P3.0   ;上锁存信号 1表示片选  不片选的时候输出低电平
LATCH_L EQU P3.1   ;下锁存信号
XUANJIAN EQU P2.5   ;旋转按键
ZUOJIAN EQU P2.7   ;左移按键
YOUJIAN EQU P2.6   ;右移按键
XIAJIAN EQU P2.4   ;下移按键
CBUFTH0 EQU 75H    ;定时器TH0基数存储单元
CBUFTL0 EQU 76H    ;定时器TL0基数存储单元 
XUAN0  EQU 20H    ;第0列旋转数据
XUAN1  EQU 21H    ;第1列旋转数据
XUAN2  EQU 22H    ;第2列旋转数据
XUAN3  EQU 23H    ;第3列旋转数据
XUAN11  EQU 25H
XUAN12    EQU 26H
XUAN13  EQU 27H

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    ;延时
 ......

>>返回讨论的主题



  发表回复
用户名   *您没有注册?
密码   *
验证码   * .
标题   *
心情
随便说说    我回答你    最新发现    得意的笑   
气死我了    真是没劲    坚决同意    表示反对   
大家过来    好奇怪哟    懒得理它    大家小心   
文件上传
内容


字体:      字体大小:    颜色:
粗体 斜体 下划线 居中 超级连接 Email连接 图片 Flash图片 Shockwave文件 realplay视频文件 Media Player视频文件 QuickTime视频文件 引用 飞行字 移动字 发光字 阴影字 查看更多的心情图标 背景音乐
点击加入表情
                         
选项
有回复时用短消息通知您?

   




老古网执行:47毫秒 最大:7276毫秒 查询6次