基于51单片机的推箱子游戏

上传人:re****.1 文档编号:486191165 上传时间:2023-01-31 格式:DOC 页数:17 大小:436KB
返回 下载 相关 举报
基于51单片机的推箱子游戏_第1页
第1页 / 共17页
基于51单片机的推箱子游戏_第2页
第2页 / 共17页
基于51单片机的推箱子游戏_第3页
第3页 / 共17页
基于51单片机的推箱子游戏_第4页
第4页 / 共17页
基于51单片机的推箱子游戏_第5页
第5页 / 共17页
点击查看更多>>
资源描述

《基于51单片机的推箱子游戏》由会员分享,可在线阅读,更多相关《基于51单片机的推箱子游戏(17页珍藏版)》请在金锄头文库上搜索。

1、推箱子 (以前做的,现在加以整理传上来给初学者做个参考,也整点分用用。)演示:上电显示游戏的名字及我的qq开始游戏1. 红外:不同的遥控器用的芯片不同,发射出来的数据长度都不同。12864:不同的12864的指令可能是不同的,需要根据具体的模块来编写代码。具体怎么用,去看数据手册吧。我用的是汉升的 12864-15c。2. 游戏实现:A、我把屏幕分成了8*8的区域,箱子,目的地,人墙,都是8*8的。所以这个屏幕是16*8的了B、我的这块12864,在基本指令集是写入文字,再在扩展指令集时绘制图形,文字会反白显示,我的菜单模块就是根据这个特点来实现的。注释中也叫文本模式,图形模式。C、数据表示:

2、a、在地图中用0、1、2、3、4分别表示 空地、墙、人、目的地、箱子,他们的点阵数据保存在全局变量unsigned char code yuansu_code58中。b、在程序ROM中,各关的地图保存在全局变量unsigned char code ditu_ju_code3128(我只做了3关)中。如:第一关的地图数据: 第一关游戏画面:0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,1,4,4,4,0,1,0,0,0,0,0,

3、0,0,1,1,1,3,3,1,0,0,1,0,0,0,0,0,0,0,1,0,4,3,3,0,0,1,1,0,0,0,0,0,0,0,1,0,0,0,0,0,2,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0c、一个重要的全局变量unsigned char idata ditu816,游戏开始时,ROM中的地图数据会被加载到这个数组中,之后,所有的游戏操作都会围绕着这个数组展开。根据用户的操作去修改这个数组,然后根据这个数组刷新屏幕。如,第一关开始时,将人左移一格,idata ditu816=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,

4、0,0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,1,4,4,4,0,1,0,0,0,0,0,0,0,1,1,1,3,3,1,0,0,1,0,0,0,0,0,0,0,1,0,4,3,3,0,0,1,1,0,0,0,0,0,0,0,1,0,0,0,0,2,0,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0电路:推箱子地图编辑器: (关闭本Word文件再打开,下面的flash可以重新开始。没写好,惭愧)(0空地 1墙 2人 3目的地 4箱子)源代码:#i

5、nclude/*定义引脚连接*/ #define lcd_shuju P0 /12864的引脚#define lcd_en P3_4#define lcd_rs P3_5#define lcd_rw P3_6#define lcd_psb P3_7#define fm P2_3/蜂鸣器引脚/*定义按键常数*/ #definekey_shang 48#definekey_xia 176#definekey_zuo 232#definekey_you 104#definekey_quxiao 40#definekey_queding 24#definekey_caidan 136/*红外用的变量*

6、/char IR_timer=0;/脉冲周期unsigned char IR_DATAH=0; /存储8位数据码unsigned char IR_DATAL=0; /存储8位数据反码bit IR_OK=0;/接收完bit starflag=0;/等于1时,表示帧已经开始/*游戏时用的变量*/unsigned char biaoti0=;unsigned char biaoti1=推箱子;unsigned char biaoti2=;unsigned char shengming=QQ:857448526;unsigned int shengyi =0; /当不为0时,就用T1定时器播放声音un

7、signed char ren_x,ren_y;/人的座标unsigned char jushu=0;/用来保存玩的是第几局游戏bit wancheng =0;/是否全部完成char chexiao22=0,0,0,0;/记录移动箱子时,人的x,y 及运动方向dx,dy 最大撤销1步unsigned char idata ditu816;/当作内存来使用,用来保存游戏的地图,整个游戏都围绕着这个数组展开unsigned char caidan_biaoqian0=打开:; /菜单上的文字unsigned char caidan_biaoqian1=;unsigned char caidan_b

8、iaoqian2=;unsigned char caidan_biaoqian3=;/*游戏元素的点阵数据*/unsigned char code yuansu_code58=0,0,0,0,0,0,0,0,/空地 0 255,255,255,255,255,255,255,255,/墙的点阵数据 1 0x00,0x18,0x5A,0x7E,0x18,0x24,0x42,0x00,/人的点阵数据 20x00,0x42,0x24,0x18,0x18,0x24,0x42,0x00,/目的地的点阵数据 30x00,0x7E,0x56,0x6A,0x56,0x6A,0x7E,0x00/箱子的点阵数据

9、4;unsigned char code ditu_ju_code3128=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,1,4,4,4,0,1,0,0,0,0,0,0,0,1,1,1,3,3,1,0,0,1,0,0,0,0,0,0,0,1,0,4,3,3,0,0,1,1,0,0,0,0,0,0,0,1,0,0,0,0,0,2,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,/第 1 局

10、的地图数据0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,1,0,2,1,0,0,1,1,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,1,0,4,0,4,0,4,1,0,0,0,0,0,0,0,0,1,0,0,1,1,4,0,1,0,0,0,0,0,0,0,0,1,1,0,1,0,4,0,1,1,1,0,0,0,0,0,0,0,1,0,0,3,3,3,3,3,1,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,/第 2 局的地图数据0,0,0,0,1,1,1,1,1,1,0,0,0,0,

11、0,0,0,0,0,0,1,3,3,3,0,1,0,0,0,0,0,0,0,0,0,0,1,3,3,3,3,1,1,1,1,0,0,0,0,0,1,1,1,0,4,1,1,1,0,0,1,0,0,0,0,0,1,0,4,4,0,0,4,0,4,0,1,0,0,0,0,0,1,0,0,0,0,4,0,4,0,0,1,0,0,0,0,0,1,0,0,0,1,1,1,0,0,2,1,0,0,0,0,0,1,1,1,1,1,0,1,1,1,1,1,0,0,0/第 3 局的地图数据;/* 延时函数*/void yanshi(int us) us*=3; for(us;us0;us-);/*与红外有关的函

12、数*/void T0_FUNC() interrupt 1/定时器T0 中断服务函数,有两个作用IR_timer+;/1、播放声音。shengyi 是一个全局变量,if(shengyi1)/ 当它等于0时,蜂鸣器连接的引脚输出低电平,fm=0;/ 当它不等于0时,输出高电平,使蜂鸣器发声shengyi-;/所以呢, shengyi值越大,蜂鸣器响的时间越长if(shengyi=1)/2、测量红外脉冲的长度,用IR_timer保存。IR_timer=7时,认为该脉冲是1。 fm=1; shengyi=0;void INT0_FUNC() interrupt 0 /外部中断INT0中断服务函数,用来 解析红外 /这个只能用来解析帧长度为32个下降沿的红外帧,/并且不处理长按一个键的情况,/在这里,开发板的硬件上面将红外接收头的OUT脚已经经过反向后再接单片机/所以刚好这里数的是下降沿static char i=0;/i用来保存这是第几个脉冲 if(starflag)/starflag=0,认为这个脉冲是前导码,下一个脉冲开始依次是/地址码,地址反码,数据码,数据反码,这里只处理了数据码和数据反码 if(IR_timer=33&IR_timer63)/如果IR_timer太大,则认为这个脉冲跟上一个脉冲不是同/一个数据帧的,而是一个新的数据帧的开始

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 商业/管理/HR > 商业计划书

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号