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 ;延时 ......
>>返回讨论的主题
|