嘉义市网站建设_网站建设公司_博客网站_seo优化
2025/12/19 8:49:01 网站建设 项目流程

基于51单片机贪吃蛇游戏设计( proteus仿真+程序+设计报告+讲解视频)

仿真图proteus8.17(有低版本)

程序编译器:keil 4/keil 5

编程语言:C语言

设计编号:P24

1主要功能:

基于51单片机的贪吃蛇游戏设计

1、采用8*8点阵作为贪吃蛇游戏的显示装置;

2、贪吃蛇在吃到食物后会变长;

3、贪吃蛇在撞到墙或者撞到身体后将会重新开始游戏;

4、使用独立按键控制贪吃蛇的运动方向。

5、需要在Proteus软件和普中51开发板实现功能验证。

主要硬件 51单片机 8*8点阵 独立按键

(目前仅完全适配普中51-实验板234,其他普中开发板型号需要接线)

需注意仿真中51单片机芯片是兼容的,AT89C51,AT89C52是51单片机的具体型号,内核是一样的。相同的原理图里,无论stc还是at都一样,引脚功能都是一样的,程序是兼容的,芯片可以替换为STC89C52/STC89C51/AT89C52/AT89C51等51单片机芯片。

以下为本设计资料展示图:

2.实物图:

3.仿真设计

打开仿真工程,双击proteus中的单片机,选择hex文件路径,然后开始仿真。开始仿真后贪吃蛇静止不动,需要任意按键按下启动。

独立按键控制贪吃蛇的运动方向,贪吃蛇在吃到食物后会变长。

贪吃蛇在撞到墙或者撞到身体后将会重新开始游戏。

4.程序代码

使用keil4或者keil5编译,代码有注释,可以结合视频理解代码含义。

#include<reg51.h>// 51单片机头文件#include<intrins.h>// 包含空操作指令_nop_()#defineucharunsignedchar// 定义无符号字符类型#defineuintunsignedint// 定义无符号整数类型#defineSNAKE10// 蛇的最大长度#defineTIME20// 显示延时时间#defineSPEED71// 游戏速度控制值// 方向按键定义sbit up=P3^0;// 上键sbit down=P3^1;// 下键sbit right=P3^2;// 右键sbit left=P3^3;// 左键// 74HC595移位寄存器控制引脚sbit SRCLK=P3^6;// 移位寄存器时钟sbit RCLK=P3^5;// 存储寄存器时钟sbit SER=P3^4;// 串行数据输入// 游戏数据结构uchar x[SNAKE+1];// 蛇身和食物的x坐标数组(0:食物, 1:蛇头, 2~SNAKE:蛇身)uchar y[SNAKE+1];// 蛇身和食物的y坐标数组uchar time,n,i,e,state;// time:延时计数, n:当前蛇长, i:循环变量, e:速度控制, state:游戏状态(0=初始/结束,1=运行)charaddx,addy;// 蛇头移动方向偏移量(x,y方向)/******************** 延时函数 功能:产生指定毫秒的延时 参数:MS - 延时毫秒数 *********************/voiddelay(charMS){charus,usn;while(MS!=0){usn=0;while(usn!=0){us=0xff;while(us!=0){us--;};// 内层循环延时usn--;}MS--;}}/******************************************************************************* * 函数名 : Hc595SendByte * 功能 : 向74HC595发送一个字节的数据 * 参数 : dat - 要发送的数据 * 说明 : 通过串行方式将数据发送到74HC595移位寄存器 *******************************************************************************/voidHc595SendByte(chardat){chara;SRCLK=0;// 移位时钟置低RCLK=0;// 存储时钟置低// 循环8次发送一个字节for(a=0;a<8;a++){SER=dat>>7;// 取最高位发送dat<<=1;// 左移准备下一位// 产生移位时钟上升沿SRCLK=1;_nop_();// 空操作延时_nop_();SRCLK=0;}// 产生存储时钟上升沿(将移位寄存器内容输出到存储寄存器)RCLK=1;_nop_();_nop_();RCLK=0;}/***************** 主函数 功能:游戏主循环,控制游戏流程 *****************/完整代码见文章下载链接voidmain(void){// 初始化游戏参数e=SPEED;// 初始速度state=0;// 初始状态(游戏未开始)// 主游戏循环while(1){// 检测按键(更新方向)turnkey();// 游戏初始/结束状态if(state==0){// 初始化多余的蛇身位置为无效值(100,不显示)for(i=3;i<SNAKE+1;i++){x[i]=100;y[i]=100;}// 设置食物初始位置x[0]=4;// 食物x坐标y[0]=4;// 食物y坐标// 初始化蛇身n=3;// 初始蛇长(头+2节身体)x[1]=1;// 蛇头x坐标y[1]=0;// 蛇头y坐标x[2]=0;// 第一节身体x坐标y[2]=0;// 第一节身体y坐标// 初始化移动方向addx=0;// x方向无偏移addy=0;// y方向无偏移// 显示初始游戏画面timer0(e);}// 游戏运行状态elseif(state==1){// 显示当前游戏画面timer0(e);// 碰撞检测if(knock()){// 游戏结束,重置参数e=SPEED;// 恢复初始速度state=0;// 返回初始状态}// 检查是否吃到食物(蛇头位置与食物位置重合)if((x[0]==x[1]+addx)&(y[0]==y[1]+addy)){// 增加蛇身长度n++;// 当蛇达到最大长度时重置if(n==SNAKE+1){n=3;// 重置蛇长为初始长度e=e-10;// 增加游戏速度(减少延时)// 隐藏多余的蛇身(设置为无效坐标)for(i=3;i<SNAKE+1;i++){x[i]=100;y[i]=100;}}// 设置新的食物位置(暂时放在蛇尾位置)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;}}}

5.设计报告

8261字设计报告,内容包括硬件设计、软件设计、软硬件框图、调试、结论等

6.设计资料内容清单&&下载链接

资料设计资料包括仿真,程序代码、讲解视频、功能要求、设计报告、软硬件设计框图等。

0、常见使用问题及解决方法–必读!!!!

1、程序

2、proteus仿真

3、功能要求

4、软硬件流程图

5、开题报告

6、设计报告

7、烧录工具

8、讲解视频

9、实物图

Altium Designer 安装破解

KEIL+proteus 单片机仿真设计教程

KEIL安装破解

Proteus元器件查找

Proteus安装

Proteus简易使用教程

单片机学习资料

相关数据手册

答辩技巧

设计报告常用描述

鼠标双击打开查找嘉盛单片机51 STM32单片机课程毕业设计.url

资料下载链接(可点击):
P24 8X8点阵贪吃蛇游戏
链接: https://pan.baidu.com/s/1rahcHhqpAv2tD13qKJziSw?pwd=megb
提取码: megb

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询