普中开发板基于51单片机贪吃蛇游戏设计

基于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编译,代码有注释,可以结合视频理解代码含义。

c 复制代码
#include <reg51.h>       // 51单片机头文件
#include <intrins.h>     // 包含空操作指令_nop_()
#define uchar unsigned char  // 定义无符号字符类型
#define uint unsigned int    // 定义无符号整数类型
#define SNAKE 10             // 蛇的最大长度
#define TIME 20              // 显示延时时间 
#define SPEED 71             // 游戏速度控制值 

// 方向按键定义
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=运行)
char addx, addy;      // 蛇头移动方向偏移量(x,y方向)

/********************
 延时函数
 功能:产生指定毫秒的延时
 参数:MS - 延时毫秒数
*********************/
void delay(char MS) {
    char us, usn;
    while(MS != 0) {
        usn = 0;
        while(usn != 0) {
            us = 0xff;
            while (us != 0) { us--; };  // 内层循环延时
            usn--;
        }
        MS--;
    }
}

/*******************************************************************************
* 函数名         : Hc595SendByte
* 功能           : 向74HC595发送一个字节的数据
* 参数           : dat - 要发送的数据
* 说明           : 通过串行方式将数据发送到74HC595移位寄存器
*******************************************************************************/
void Hc595SendByte(char dat) {
    char a;
    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;
}

/*****************
 主函数
 功能:游戏主循环,控制游戏流程
*****************/	
完整代码见文章下载链接
void main(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);
        }
        // 游戏运行状态
        else if(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

相关推荐
驴友花雕2 小时前
【花雕动手做】CanMV K230 AI视觉识别模块之使用CanMV IDE调试运行人脸代码
ide·人工智能·单片机·嵌入式硬件·canmv k230 ai视觉·canmv ide 人脸代码
90后小陈老师3 小时前
Unity教学 项目2 2D闯关游戏
游戏·unity·游戏引擎
点灯小铭5 小时前
基于单片机的酒驾报警刹车系统设计
单片机·嵌入式硬件·毕业设计·课程设计·期末大作业
boneStudent5 小时前
Day29:I2C 高级应用
stm32·单片机·嵌入式硬件
@good_good_study6 小时前
STM32 I2C配置函数及实验
stm32·单片机
芯联智造7 小时前
【stm32简单外设篇】- 28BYJ-48 步进电机(配 ULN2003 驱动板)
c语言·stm32·单片机·嵌入式硬件
喜喜安7 小时前
CoreS3 屏幕背光
单片机·嵌入式硬件·m5stack cores3
星期天27 小时前
1.4光敏传感器控制蜂鸣器
stm32·单片机·嵌入式硬件·江科大
沐欣工作室_lvyiyi9 小时前
基于无线互联的电源健康监测与控制系统设计(论文+源码)
stm32·单片机·毕业设计·电源健康监测