基于51单片机的推箱子游戏设计方案_第1页
基于51单片机的推箱子游戏设计方案_第2页
基于51单片机的推箱子游戏设计方案_第3页
基于51单片机的推箱子游戏设计方案_第4页
基于51单片机的推箱子游戏设计方案_第5页
已阅读5页,还剩51页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

0 基于 51 单片机的推箱子游戏设计方案 1、课程设计目的 程设计是与 51 单片机课程相配套的实践教学环节。 51单片机是一门实践性很强的专业基础课,通过课程设计,达到进一步理解单片机的硬件、软件和综合应用方面的知识,培养实践能力和综合应用能力,开拓学习积极性、主动性, 学会灵活运用已经学过的知识,并能不断接受新的知识。培养大胆发明创造的设计理念, 为今后就业打下良好的基 础。 通过课程设计,掌握以下知识和技能: 2、 课程设计题目和实现目标 程设计题目: 基于 51单片机的推箱子游戏设计 设计一款在以 51 单片机为核心的硬件系统中运行的推箱子游戏。 游戏一共 9关,功能包括: ( 1)显示游戏开机界面和游戏界面; ( 2)按键处理包括移动小人和移动箱子,通过移动上下左右键来控制小人的移动,通过小人推动箱子,把箱子推到指定的目的地为过 关,箱子只能推不能拉; ( 3)用于可以任意选关,并能随时退出、进入游戏; ( 4)每一关都有时间计时,显示当前玩家的游戏耗时。 1 3、设计方案 根据设计目标,整个系统框图如下 : 图 1 系统框图 制模块 选用 生产的 是 是一个低电压,高性能位 单片机 , 主要功能特性如下: 1、 兼容 2、 8大于 1000次) 7、 2个串行中断,可编程 8、 2个外部中断源,共 8个中断源; 9、 2个读写中断口线, 3级加密位; 10、 低功耗空闲和掉电模式, 软件 设置睡眠和唤醒功能; 本次课设选用 ,其引脚功能如图 2所示,图 3为最小系统: 2 图 2 引脚功能 图 3 最小系统 220120示模块 选用内置 制控制器的 12864图形点阵液晶(以下简称 为显示模 块。 示驱动所需的参数,例如:占空比系数、每行驱动传输的字节数、字符的字体选择等均由引脚电平设置。所以,液晶显示模块在上电时 制器就进行初始化设置,软件操作的主要精力就可以全部用于显示界面的设计上。 市场上出售此控制器的液晶很多,本次课设选用深圳市晶日达科技有限公司生产 通过模拟操作时序的方法控制液晶显 3 示。具体的接线图如图 4所示 图 4 显示模块 于做 16个轻触按键连接成 4*4矩阵键盘,做为按键模块,如图 5所示 图 5 4*4矩阵键盘 最终系统的硬件系统如下: 4 图 6 硬件系统 4、 真原理图 在 5 图 7 硬件系统 图 8 开机画面 6 图 9 游戏画面 图 10 游戏画面 7 图 11 读写指令 /数据时序图 准备向 行操作时,首先要读取 当前的状态 ,只有关程序如下: /* 函数名: 功能:状态位 /写指令 ), /写数据)判断 入口参数: 返回值:状态值 i */ i; ; ; i=10;i0; =0 ; i; /* 函数名 :功能:写数据 入口参数: 8位数据 8 返回值: */ =0); ; P0=; /* 函数名 :功能:写命令,无参数 入口参数: 8位命令 回值: */ =0); ; P0=; /* 函数名 :功能:写单参数命令 入口参数: 8位数据 8位命令 回值: */ /* 函 数名 :功能:写双参数命令 入口参数: 8位数据 8位数据 8位命令 回值: */ 9 图 12 为 指令集,向 入相关的指令,即可控制其显示。 图 12 使用液晶前必须对其进行初始化操作,初始化的内容包括 光标指针设置,图形区首地址,图形区宽度,显示方式设置,图形方式显示,标形状设置。相关程序如下: /* 函数名 : 功能:初始化 口参数: 返回值: */ ;/初始化 (0(16,0(0,正常显示 ,不显示字母,只打点 键扫描程序 初始 有按键下时,电平发生变化,开始程序开始扫描判断哪个按键被按下,并返回按键号,相关程序如下: /* 函数名 : 功能:按键扫描 入口参数: 返回值:按键号 */ 1 != 0 0 ); 0 : 0;: 1;: 2;: 3; 16; 0); ( 4) 0 := 0;:= 4;:= 8;:= 12; 11 戏元素设计 出现在显示画面中的游戏元素总共有 6种:墙壁,箱子,小人,目的地,空白,箱子在目的地。每个元素在液晶上以一个字符显示,即 8 8的点阵。在字模提取软件设计各个元素,并获得元素的显示码。显示码的每 8位构成字符的一行, 8就行有 8个字节。其中 1表示该点显示, 0表示该点不显示。 图 13 图 13 小人 图 14 墙壁 图 15 箱子 图 16 目的地 图 17 箱子在目的地 图 18空白 定义一个二维数组 8,存储这些点阵信息。其中第一个地址为元素代号 8= 0 /0 空白 0 /1人物 0 /2 砖头 0 /3箱子 0 /4 目标 0 /5箱子到达目标 ; 由于 字符( 8点),行 1点来定位的,所以 显示时,要先定位显示字符位的列字符和行字符首地址,即行 *0;再定义一个循环 12 变量 i,从 0,到 7,定位该字符位的 8个点行,即行 *0 +i*0位到每个点行后,写入对应的元素字节,即 素代号 i,就可以在液晶的指定字符位置上显示该元素了。相关元素显示子函数如下: /* 函数名 : 功能:指定字符位置 ,显示元素 入口参数 :列字符地址 字符地址 素代码 回值: */ yh, i; i=0;i # # # ; /初始化 51 ; /初始化 12864 ; ; ; ) /等待确定键按下 6; 1!=0 /若没有这句,有可能在按键扫描后执行 1!=0就得不到按键值,使按键失效 ; 1!=0 : ; ; 28 ;/清屏 ; /显示第一关 ; ; /游戏中 . ; ; * 函数名 :x) 功能:按键扫描延时 入口参数: x=延迟时间 返回值: */ x) i; i=0;i 4) 0 := 0;:= 4;:= 8;:= 12; * 函数名 :x) 功能:按键扫描延时 入口参数: x=延迟时间 返回值: */ ; /* 函数名 : 功能:按键扫描 入口参数: 返回值:按键号 */ x); 30 /* 功能: 1、 示的相关函数 2、游戏操作函数 */ #* 函数名: 功能:状态位 /写指令 ), /写数据)判断 入口参数: 返回值:状态值 i */ i; ; ; i=10;i0; =0 ; i; /* 函数名 :功能:写数据 入口参数: 8 位数据 回值: */ =0); ; P0=; /一定要有这一句,补完后面的时序! 31 /* 函数名 :功能:写命令,无参数 入口参数: 8 位命令 回值: */ =0); ; P0=; /一定要有这一句,补完后面的时序! /* 函数名 :功能:写单参数命令 入口参数: 8 位数据 8 位命令 回值: */ /* 函数名 :功能:写双参数命令 入口参数: 8 位数据 8 位数据 8 位命令 回值: */ /* 函数名 : 功能:初始化 口参数: 返回值: */ 32 ;/初始化 (0(16,0(0,正常显示 ,不显示字母,只打点 /* 函数名 : 功能:清屏 入口参数: 返回值: */ i; ,0, i = 0; i 33 /*脚位定义 */ ; ; ; 23; /*令宏定义 */ /地址指针设置 #0:逻辑或 #:逻辑异或 #:逻辑与 #:文本特征 /显示状态设置 #: 0标占的行数: 1 行 8 行 /数据自动读写设置 /数据一次读写设置 #,地址 +1 #,地址 +1 #,地址 ,地址 ,地址不变 #,地址不变 34 # /纪录当前小人所在位置 /记录当前关卡 * 函数 名 : 功能:定位 入口参数 :列字符地址 x,行位地址 y 返回值: */ x, y) y * 0 x; /* 函数名 : 功能:指定字符位置 ,显示元素 入口参数 :列字符地址 字符地址 素代码 回值: */ yh, i; i=0;i8;i+) /行地址加 +1 0i*0 i, /* 函数名 : 功能:定位字符位置 入口参数 :列字符 地址 x,行字符地址 y 返回值: 35 */ x, y) y * 0 x; /* 函数名 : 功能:开机画面 入口参数 : 返回值: */ i; ,0); i=0;i1024;i+) i, i,j; j=0;j16;j+) /第 i=0;i2;i+) +i,j); j*2+i, /数组的地址不要乱! i=0;i2;i+) 2+i,j); j*2+i, /关 36 j=0;j16;j+) i=0;i2;i+) /列式按字符寻址的,行是按位寻址的 +i,16+j); j*2+i, /用 j=0;j16;j+) i=0;i2;i+) 2+i,16+j); j*2+i, /时 j=0;j16;j+) i=0;i2;i+) 4+i,32+j); j*2+i, /时 /3+i,32+j); /* 功能:分解计时值的各位,并显示在响应的位置上 函数名 : 入口参数:计时值 返回值: */ a5=0; j=0;j16;j+) / i=0;i1;i+) 37 +i,32+j); j, j=0;j16;j+) / i=0;i1;i+) 0+i,32+j); j, j=0;j16;j+) / i=0;i1;i+) 1+i,32+j); j, / j=0;j16;j+) / i=0;i1;i+) 2+i,32+j); j, / /* 函数名 : 功能:显示游戏本关卡游戏界面 入口参数 :关卡代号 g 返回值: */ g) i,j; i=0;i8;i+) /行 38 j=0;j8;j+) /列 if(gij=1) j; i; ij=gij; /当前关卡存入游戏缓冲 j,i,ij); /显示当前关卡 ; /* 函数名 : 功能:判断是否通过本关卡 入口参数 : 返回值: */ i,j,k=1; i = 0; i 8; i+) /行 if(k=0) j = 0; j 8; j+) /列 if(ij=4|ij=5) /循环扫描目标位置都有箱子在,此关卡就通过 if(ij=5) k=1; /此位置箱子在目标位置上 k=0; /有目标位置没有箱子 39 if(k=1) /所有目标位置都有箱子 if() 1; ; /通关后重新从第一关开始 ; /计时清零 65536256; 65536256; ; /* 函数名 : 功能:按向上键的操作 入口参数 : 返回值: 注释含义: ?=:是否等与 上:本位置的上一个位置 目 : 箱子的目标位置 成:箱子在目标位置上 位置 箱:箱子 */ if(=0|=4) /上? =目 /成 if(=4|=5) /本,源? =目 /成 4; /本=目 ); 0; /本=空 ); 40 /上=人 /完成一次移动 1; ); if(=3) /上? =箱 if(=0) /再上?=空白 if(=4|=5) /本 ,源? =目 /成 4; /本=目 ); /本 =空 0; ); /上=人 1; ); 3; /再上 =箱 /完成一次移动 ); if(=4) /再上?=目 if(=4|=5) /本,源? =目/成 4; /本=目 ); /本 =空 0; 41 ); 1; /上=人 ); 5; /再上 =成 ); if(=5) /上? =成 if(=0) /再上? =空 if(=4|=5) /本,源? =目 /成 4; /本 =目 ); /本 =空 0; ); /上 =人 1; ); 3; /再上 =箱 ); if(=4) /再上 ?=目 if(=4|=5) /本,源? =目 /成 42 4; /本 =目 ); /本 =空 0; ); /上 =人 1; ); 5; /再上 =成 ); ; /判断是否完成本关 /* 函数名 : 功能:按向下键的操作 入口参数 : 返回值 : */ if(=0|=4) if ); 0; ); ; 1;

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论