基于单片机的贪食蛇设计(编辑修改稿)内容摘要:

开定时器。 ==============================================================================================。 游戏主程序 判断键盘 , 移动 , 是否死亡 , 吃食 , 显示。 ============================================================================================== MAIN_GAME: JNB BT0,MAIN_GAME。 等待 T0 中断 CLR BT0。 清除 T0 中断标志 CALL KEYTEST。 调用键盘测试程序 JNB B_KEYTEST,NOKEY。 判断是否有键按下 CALL READKEY_X_Y。 有键按下调用键盘操作子程序 CJNE A,0F0H,XX_X_YY_Y。 再次判断是否有键按下 JMP NOKEY XX_X_YY_Y:。 有键按下将取得的方向值送入 X,Y MOV X,XX MOV Y,YY NOKEY: DJNZ TIME_400,MAINDISP。 等待 400MS 到 MOV TIME_400,TIME。 重送初值 CLR INC PUT_FOOD。 对移动次数进行计数从而产生随机码 CALL SNAKE_MOVE。 调用蛇身移动子程序==================1 CALL SNAKE_DED。 判断蛇是否死亡子程序================2 JB B_SNAKE_DED,GAMEOVER。 死亡则显示 GAMEOVER CALL SNAKE_FOOD。 判断是否吃到食物子程序==============3 JNB B_SNAKE_FOOD,MAINDISP CALL SNAKE_ZHANGCHANG。 吃到食物则增长一节并重放食物========4 JNB B_PASS,MAINDISP CLR TR0 CALL SNAKE_PASS MOV A,PASS_NUM CJNE A,10,GOTO_START JMP START_1 16 MAINDISP: CALL GAME_DISP。 显示蛇==============================5 JB B_GAME_ON_OFF,GAMEOVER JMP MAIN_GAME。 继续循环 GAMEOVER: CLR TR0 CLR B_GAME_ON_OFF CALL DISP_GAMEOVER。 启 停键在游戏中按下则结束显示GAMEOVER JNB B_GAME_ON_OFF,GAMEOVER。 再次按下启停键则进入 SNAKE 进行等待 CLR B_GAME_ON_OFF。 清除启停标志位 GOTO_START: JMP START。 ===============================================================================================。 T0 中断服务子程序 重送初值 置标志位。 =============================================================================================== T0_SET: MOV DPTR,6553620xx0 MOV TH0,DPH MOV TL0,DPL SETB BT0 RETI。 ================================================================================================。 INTO 中断服务子程序 启 , 停。 ================================================================================================ GAME_ON_OFF:。 INTO 中断服务子程序 CLR EX0 JB ,OUT CALL DEL_10MS JB ,OUT SETB B_GAME_ON_OFF。 置启停标志位为 1 表示按下 OUT: SETB EX0 17 RETI。 ===============================================================================================。 键盘测试子程序 有键按下则 B_KEYTEST=1。 ============================================================================================== KEYTEST: SETB B_KEYTEST MOV A,P1 ANL A,0F0H CJNE A,0F0H,KEYTEST_OUT CLR B_KEYTEST KEYTEST_OUT: RET。 ===============================================================================================。 读键值并得出方向 ,即 X, Y 的值。 =============================================================================================== READKEY_X_Y: JNB ,PD_UP_DOWN1。 判断是否为向上键按下 JMP KEY_DOWN PD_UP_DOWN1: MOV A,Y CJNE A,0,KEY_DOWN MOV YY,1。 向上键按下则置方向标志 MOV XX,0 JMP READKEY_OUT KEY_DOWN: JNB ,PD_UP_DOWN2。 判断是否为向下键按下 JMP KEY_LEFT PD_UP_DOWN2: MOV A,Y CJNE A,0,KEY_LEFT MOV YY,1。 向下键按下 则置方向标志 MOV XX,0 JMP READKEY_OUT KEY_LEFT: JNB ,PD_LEFT_RIGHT1。 判断是否为向左键按下 JMP KEY_RIGHT 18 PD_LEFT_RIGHT1: MOV A,X CJNE A,0,KEY_RIGHT MOV XX,1。 向左键按下则置方向标志 MOV YY,0 JMP READKEY_OUT KEY_RIGHT: JNB ,PD_LEFT_RIGHT2。 判断是否为向右键按下 JMP READKEY_OUT PD_LEFT_RIGHT2: MOV A,X CJNE A,0,READKEY_OUT MOV XX,1。 向右键按下则置方向标志 MOV YY,0 READKEY_OUT: MOV A,P1。 去抖 ANL A,0F0H RET。 ===============================================================================================。 蛇移动子程序。 =============================================================================================== SNAKE_MOVE: MOV R1,SNAKE_CHANG MOV A,SNAKE_TOU_X ADD A,X。 蛇头 X 坐标加上 方向 X 坐标 MOV R0,SNAKE_TOU_X MOVE_CHANGE_X:。 依次将前一个蛇身 X 坐标转向下一蛇身 X 坐标 XCH A,@R0 INC R0 DJNZ R1,MOVE_CHANGE_X。 MOV SNAKE_TAIL_X,A MOV R1,SNAKE_CHANG MOV A,SNAKE_TOU_Y ADD A,Y。 蛇头 Y 坐标加上 方向 Y 坐标 MOV R0,SNAKE_TOU_Y MOVE_CHANGE_Y:。 依次将前一个蛇 19 身 Y 坐标转向下一蛇身 Y 坐标 XCH A,@R0 INC R0 DJNZ R1,MOVE_CHANGE_Y。 MOV SNAKE_TAIL_Y,A RET。 =======================================================================================。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。