《基于单片机贪吃蛇设计模板.docx》由会员分享,可在线阅读,更多相关《基于单片机贪吃蛇设计模板.docx(7页珍藏版)》请在优知文库上搜索。
1、电气与信息工程学院单片机课程设计报告设计题目:基于单片机的贪吃蛇设计专业:-一学生姓名:班级:指导教师:-成绩:2016年11月22日一、设计任务及要求基本功能:制作一个8*8点阵的贪吃蛇游戏,系统以单片机的C语言的软件设计,系统通过LED点阵屏为载体显示数据,并用五个输入端表示五个控制键(上下左右及加速系统硬件局部由STC89C52RC单片机,8*8点阵屏,5个按键,软件局部在keil环境下用C51语言编写,包括游戏初始化蛇的节数,以及障碍墙壁,游戏完毕时自动复位。具体要求:1、用四个按钮控制贪吃蛇的行径,一个按钮控制贪吃蛇的加速,蛇的初始长度为2点,设置墙壁。2、蛇吃到长度为1点的食物时,
2、自身长度增加1点。2、速度按钮带有一次加速,按两下速度按钮蛇的行进速度回到初始值。3、当蛇碰到墙壁或自己的身体时游戏完毕。4、用ProteUS设计,仿真基于STC89C52RC单片机的8x8点阵贪吃蛇的硬件电路。5、游戏完毕,系统自动复位。二、硬件电路设计本系统以STC89C52RC为核心,设置12MHZ的晶振,使得单片机有合理的运行速度。LED点阵屏通过LED(发光二极管)组成,以灯珠亮灭来显示程序的运行情况,是模块化的显示组件,本设计采用8*8共阳红色点阵显示屏,用来显示贪吃蛇的游戏画面。五个独立按键控制蛇的游走方向(上下左右)和加速减速的功能。贪吃蛇是一款经典的小游戏,玩家通过按键操控贪
3、吃蛇不断地吃食物,蛇身逐渐伸长,当蛇碰到蛇身和墙壁时游戏完毕。需要注意的是实际元件中,点阵的封装不尽一样,因此需要测试出每个引脚的功能,以便正确连线。注意,每个像素点的额定电压在3v左右,电压过大将会彻底损坏。三、系统软件设计软件方面采用了C51编写代码,代码编写模块如以以下图:核心代码主要为游戏处理、信息处理和按键处理。编写游戏的功能代码,先定义游戏的数据构造和常量。其中食物的数据构造采用构造体定义,两个UnSignedChar变量分别定义为食物的横纵坐标;蛇的身体定义为长度最大值为20的数组,游戏中贪吃蛇长度到达39,游戏通关完毕。游戏处理模块为贪吃蛇在游玩过程中遇到的需要被处理的情况,主
4、要实现的功能包括以下四个方面,即移动、食物、死亡和加速。1、移动游戏开场后,贪吃蛇在固定的周期内会向前移动一格,此时“贪吃蛇身体从尾巴至头部每一个后序节点会向前序节点移动,后序节点移动完毕后,头部会根据此时按键的方向对相应的横纵坐标进展加减。2、食物放置贪吃蛇向前移动后,此时要判断蛇头是否与食物的横纵坐标一一对应,如果不是那么退出该模块,进入下一模块;如果是,那么贪吃蛇的节数增加一。随后将进入创立新的食物模块,为了防止食物与贪吃蛇的节点坐标重复,食物在创立后要与贪吃蛇的每个节点的坐标一一比较,如果重合那么重新创立食物的坐标,直到创立成功为止。3、加速处理开场在游戏过程中,贪吃蛇的初始速度很慢,
5、为了提高游戏娱乐性,设置独立按键加速键,当按下加速键,那么贪吃蛇的移动速度即时间间隔变短,使游戏更具有挑战性,当再按下那么恢复原来的速度。4、完毕贪吃蛇在向前移动后,有可能撞到墙壁或自己的身体,也有可能吃到食物,或者只是向前移动一格,移动完毕后如果吃到了食物,如果贪吃蛇的节数到达了最大值,那么玩家将会通关游戏,并且游戏退出,此时需要判断游戏是否完毕,一共有三种判别,前两种为失败结局,即撞到了墙壁或自己的身体,最后一种为通关结局,游戏将初始化。源代码如下:#include#defineucharunsignedchar#defineSNAKE20#defineTIME50#defineSPEED
6、80sbitup=P33;sbitdown=P3l;sbitright=P32;sbitleft=P34;sbitspeedup=P35;sbitLATCH1=P36;sbitLATCH2=P37;ucharxSNAKE+1;ucharySNAKE+IJ;uchartime,n,i,e;unsignedcharconstseg=0x81,0x42,0x24,Ox18,Ox18,0x24,0x42,0x81;unsignedcharcodewei=0x7f,Oxbf,Oxdf,Oxef,0xf7,Oxfb,Oxfd,Oxfe;charaddx,addy;voiddelay(charMS)char
7、us,usn;while(MS!=0)usn=O;while(usn!=O)(us=Oxff;while(us!=O)us-usn;)MS-;bitknock()bitk;k=0;if(xl7yl7)k=l;for(i=2;in;i+)if(x1=xi)&(y1=yi)k=l;returnk;)voidgamever()(while(!i=8)(P2=0x00;Pl=0xff;1.atchi=i;latchi=o;P2=weii;1.ATCH2=1;LATCH2=0;Pl=segi;delay(1000);i+;)voidturnkey()(if(!left)(addy=O;if(addx!=
8、1)addx=-1;elseaddx=1;)if(!right)addy=O;if(addx!=-l)addx=l;elseaddx=-l;)if(!up)addx=O;if(addy!=-1)addy=1;elseaddy=-l;)if(!down)addx=Oif(addy!=1)addy=-1;elseaddy=1;)if(!speedup)e=e-40;while(e=39)e=SPEED;ucharmux(uchartemp)(if(temp=7)return128;if(temp=6)return64;if(temp=5)return32;if(temp=4)return16;if
9、(lemp=3)retum8;if(temp=2)return4;iKtemp=1)return2;if(temp=O)return1;return0;voidtimer(uchark)vvhile(k-)fbr(i=O;iSNAKE+1;i+)P2=mux(xi);Pl=255-mux(y(i);tumkey();delay(TIME);P2=0x00;PI=Oxff;)1)voidmain(void)e=SPEED;PO=OxOO;Pl=Oxff;P2=0x00;P3=0xff;while(l)fr(i=3jiSNAKE+lji+)xi=100;for(i=3;iSNAKE+l;i+)yi
10、=100;x0=4;y0=4;n=3;xi=l;yl=O;x2=0;y2=0;addx=O;addy=O;while(1)if(!left!right!up|!down)break;timerO(1);)while(l)(timer(e);if(knock()gameOver();e=SPEED;break;)if(xO=xl+addx)fe(yO=yIJ+addy)n+;if(n=SNAKE+l)(n=3;for(i=3uSNAKE+l;i+)xi=100;for(i=3jlji-)xi=xi-l;yi=yi-l;xl=x2+addx;yl=y2+addy;)四、调试结果与分析结果:本次设计
11、未能在硬件上调试成功,但在PrOteUS上的仿真可以实现。程序软件编译器使用UViSiOn4。在用UViSiOn4编写单片机程序时,因UViSiO4往往只能修改语法上的错误,对于算法上的错误不好检查,而直接下载到单片机中又受电路板的限制不方便调试,所以采用ProteUS仿真。先在Proteus上绘制出硬件电路,电路设计完成后就可以进展仿真。先双击单片机,把用uVision4生成的hex文件指定为下载文件,最后点击play按钮即可进展仿真。系统上电后首先对LED进展初始化,接着对定时器初始化,并启动定时器,接着执行程序主体逻辑,程序主体逻辑执行一遍后检查是否中断发生,中断源有两个,一个是驱动贪吃蛇自行前进时的定时中断,另一个是用户控制贪吃蛇移动方向的键盘中断,任意中断的发生都会改变贪吃蛇的当前状态。假设中断没有发生,主程序继续判断蛇头是否碰到墙壁或蛇头尾相撞,假设是,完毕游戏,否那么,继续执行主程序循环。四、总结六、参考文献