单片机贪吃蛇课程设计报告模板.docx

上传人:b****6 文档编号:16092578 上传时间:2023-07-10 格式:DOCX 页数:13 大小:349.45KB
下载 相关 举报
单片机贪吃蛇课程设计报告模板.docx_第1页
第1页 / 共13页
单片机贪吃蛇课程设计报告模板.docx_第2页
第2页 / 共13页
单片机贪吃蛇课程设计报告模板.docx_第3页
第3页 / 共13页
单片机贪吃蛇课程设计报告模板.docx_第4页
第4页 / 共13页
单片机贪吃蛇课程设计报告模板.docx_第5页
第5页 / 共13页
单片机贪吃蛇课程设计报告模板.docx_第6页
第6页 / 共13页
单片机贪吃蛇课程设计报告模板.docx_第7页
第7页 / 共13页
单片机贪吃蛇课程设计报告模板.docx_第8页
第8页 / 共13页
单片机贪吃蛇课程设计报告模板.docx_第9页
第9页 / 共13页
单片机贪吃蛇课程设计报告模板.docx_第10页
第10页 / 共13页
单片机贪吃蛇课程设计报告模板.docx_第11页
第11页 / 共13页
单片机贪吃蛇课程设计报告模板.docx_第12页
第12页 / 共13页
单片机贪吃蛇课程设计报告模板.docx_第13页
第13页 / 共13页
亲,该文档总共13页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

单片机贪吃蛇课程设计报告模板.docx

《单片机贪吃蛇课程设计报告模板.docx》由会员分享,可在线阅读,更多相关《单片机贪吃蛇课程设计报告模板.docx(13页珍藏版)》请在冰点文库上搜索。

单片机贪吃蛇课程设计报告模板.docx

单片机贪吃蛇课程设计报告模板

 

电气与信息工程学院

单片机课程设计报告

 

设计题目:

基于单片机的贪吃蛇设计

 

专业:

学生姓名:

班级:

指导教师:

成绩:

2016年11月22日

一、设计任务及要求

基本功能:

制作一个8*8点阵的贪吃蛇游戏,系统以单片机的C语言的软件设计,系统通过LED点阵屏为载体显示数据,并用五个输入端表示五个控制键(上下左右及加速)。

系统硬件部分由STC89C52RC单片机,8*8点阵屏,5个按键,软件部分在keil环境下用C51语言编写,包括游戏初始化蛇的节数,以及障碍墙壁,游戏结束时自动复位。

具体要求:

1、用四个按钮控制贪吃蛇的行径,一个按钮控制贪吃蛇的加速,蛇的初始长度为2点,设置墙壁。

2、蛇吃到长度为1点的食物时,自身长度增加1点。

2、速度按钮带有一次加速,按两下速度按钮蛇的行进速度回到初始值。

3、当蛇碰到墙壁或自己的身体时游戏结束。

4、用proteus设计,仿真基于STC89C52RC单片机的8x8点阵贪吃蛇的硬件电路。

5、游戏结束,系统自动复位。

二、硬件电路设计

本系统以STC89C52RC为核心,设置12MHz的晶振,使得单片机有合理的运行速度。

LED点阵屏通过LED(发光二极管)组成,以灯珠亮灭来显示程序的运行情况,是模块化的显示组件,本设计采用8*8共阳红色点阵显示屏,用来显示贪吃蛇的游戏画面。

五个独立按键控制蛇的游走方向(上下左右)和加速减速的功能。

贪吃蛇是一款经典的小游戏,玩家通过按键操控贪吃蛇不断地吃食物,蛇身逐渐伸长,当蛇碰到蛇身和墙壁时游戏结束。

需要注意的是实际元件中,点阵的封装不尽相同,因此需要测试出每个引脚的功能,以便正确连线。

注意,每个像素点的额定电压在3v左右,电压过大将会彻底损坏。

三、系统软件设计

 软件方面采用了C51编写代码,代码编写模块如下图:

核心代码主要为游戏处理、信息处理和按键处理。

编写游戏的功能代码,先定义游戏的数据结构和常量。

其中食物的数据结构采用结构体定义,两个unsignedchar变量分别定义为食物的横纵坐标;蛇的身体定义为长度最大值为20的数组,游戏中贪吃蛇长度达到39,游戏通关结束。

游戏处理模块为贪吃蛇在游玩过程中遇到的需要被处理的情况,主要实现的功能包括以下四个方面,即移动、食物、死亡和加速。

 

1、移动

 

游戏开始后,贪吃蛇在固定的周期内会向前移动一格,此时“贪吃蛇”身体从尾巴至头部每一个后序节点会向前序节点移动,后序节点移动完毕后,头部会根据此时按键的方向对相应的横纵坐标进行加减。

 

2、食物放置

 

贪吃蛇向前移动后,此时要判断蛇头是否与食物的横纵坐标一一对应,如果不是则退出该模块,进入下一模块;如果是,则贪吃蛇的节数增加一。

随后将进入创建新的食物模块,为了避免食物与贪吃蛇的节点坐标重复,食物在创建后要与贪吃蛇的每个节点的坐标一一比较,如果重合则重新创建食物的坐标,直到创建成功为止。

 

3、加速处理

 

在游戏过程中,贪吃蛇的初始速度很慢,为了提高游戏娱乐性,设置独立按键加速键,当按下加速键,则贪吃蛇的移动速度即时间间隔变短,使游戏更具有挑战性,当再按下则恢复原来的速度。

 

4、结束

 

贪吃蛇在向前移动后,有可能撞到墙壁或自己的身体,也有可能吃到食物,或者只是向前移动一格,移动完毕后如果吃到了食物,如果贪吃蛇的节数达到了最大值,那么玩家将会通关游戏,并且游戏退出,此时需要判断游戏是否结束,一共有三种判别,前两种为失败结局,即撞到了墙壁或自己的身体,最后一种为通关结局,游戏将初始化。

 

源代码如下:

#include

#defineucharunsignedchar

#defineSNAKE20

#defineTIME50

#defineSPEED80

sbitup=P3^3;

sbitdown=P3^1;

sbitright=P3^2;

sbitleft=P3^4;

sbitspeedup=P3^5;

sbitLATCH1=P3^6;

sbitLATCH2=P3^7;

ucharx[SNAKE+1];

uchary[SNAKE+1];

uchartime,n,i,e;

unsignedcharconstseg[]={0x81,0x42,0x24,0x18,0x18,0x24,0x42,0x81};

unsignedcharcodewei[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};

charaddx,addy;

voiddelay(charMS)

{

charus,usn;

while(MS!

=0)

{

usn=0;

while(usn!

=0)

{

us=0xff;

while(us!

=0){us--;};

usn--;

}

MS--;

}

}

bitknock()

{bitk;

k=0;

if(x[1]>7||y[1]>7)k=1;

for(i=2;i

returnk;

}

voidgameOver()

{

while(!

i==8)

{

P2=0x00;P1=0xff;

LATCH1=1;LATCH1=0;

P2=wei[i];

LATCH2=1;LATCH2=0;

P1=seg[i];

delay(1000);

i++;

}

}

voidturnkey()

{

if(!

left){addy=0;if(addx!

=1)addx=-1;elseaddx=1;}

if(!

right){addy=0;if(addx!

=-1)addx=1;elseaddx=-1;}

if(!

up){addx=0;if(addy!

=-1)addy=1;elseaddy=-1;}

if(!

down){addx=0;if(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(temp==3)return8;

if(temp==2)return4;

if(temp==1)return2;

if(temp==0)return1;

return0;

}

voidtimer0(uchark)

{while(k--)

{for(i=0;i

{P2=mux(x[i]);P1=255-mux(y[i]);

turnkey();

delay(TIME);

P2=0x00;P1=0xff;

}}

}

voidmain(void)

{e=SPEED;

P0=0x00;

P1=0xff;

P2=0x00;

P3=0xff;

while

(1)

{

for(i=3;i

x[0]=4;y[0]=4;

n=3;

x[1]=1;y[1]=0;

x[2]=0;y[2]=0;

addx=0;addy=0;

while

(1){if(!

left||!

right||!

up||!

down)break;timer0

(1);}

while

(1)

{timer0(e);

if(knock()){gameOver();e=SPEED;break;}

if((x[0]==x[1]+addx)&(y[0]==y[1]+addy))

{n++;

if(n==SNAKE+1)

{n=3;

for(i=3;i

for(i=3;i

}

x[0]=x[n-2];

y[0]=y[n-2];

}

for(i=n-1;i>1;i--){x[i]=x[i-1];y[i]=y[i-1];}

x[1]=x[2]+addx;y[1]=y[2]+addy;

}

}

}

四、调试结果与分析

结果:

本次设计未能在硬件上调试成功,但在proteus上的仿真可以实现。

程序软件编译器使用uVision4。

在用uVision4编写单片机程序时,因uVisio4往往只能修改语法上的错误,对于算法上的错误不好检查,而直接下载到单片机中又受电路板的限制不方便调试,所以采用Proteus仿真。

先在Proteus上绘制出硬件电路,电路设计完成后就可以进行仿真。

先双击单片机,把用uVision4生成的hex文件指定为下载文件,最后点击play按钮即可进行仿真。

系统上电后首先对LED进行初始化,接着对定时器初始化,并启动定时器,接着执行程序主体逻辑,程序主体逻辑执行一遍后检查是否中断发生,中断源有两个,一个是驱动贪吃蛇自行前进时的定时中断,另一个是用户控制贪吃蛇移动方向的键盘中断,任意中断的发生都会改变贪吃蛇的当前状态。

若中断没有发生,主程序继续判断蛇头是否碰到墙壁或蛇头尾相撞,若是,结束游戏,否则,继续执行主程序循环。

四、总结

六、参考文献【下载本文档,可以自由复制内容或自由编辑修改内容,更多精彩文章,期待你的好评和关注,我将一如既往为您服务】

 

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 工程科技

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2