普中开发板基于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

相关推荐
雾削木1 小时前
STM32 HAL + FreeRTOS(CMSIS-RTOS V1)完整开发攻略
stm32·单片机·嵌入式硬件
wuyk55510 小时前
第2章:六步换相原理全解+STM32工程实战
c语言·开发语言·stm32·单片机·嵌入式硬件
五仁烧饼13 小时前
Unity Addressables 静默资源策略
游戏·unity·addressables
小僧景贤14 小时前
单片机全方位调试实战指南:串口/RTT/逻辑分析仪/示波器/内核排错分层避坑教程
单片机·嵌入式硬件·物联网
LeoZY_18 小时前
LinkScope 使用笔记:基于 OpenOCD 的通用硬件芯片调试助手
笔记·单片机·嵌入式硬件·开源软件
星空真迷人20 小时前
嵌入式鸿蒙并非精简版,核心究竟是什么?
stm32·单片机·嵌入式硬件·物联网·华为·harmonyos·iot
iCxhust20 小时前
8088单板机VScode集成开发环境使用方法二(汇编版)
汇编·单片机·微机原理·8088单板机
MyBili20 小时前
游戏报错缺少dll、无法启动?GRLPackage 运行库合集一键修复指南
游戏·.net·directx·运行库·xna·openal·vc++ redis
2301_801434981 天前
STM32F407移植TinyUSB
stm32·单片机·嵌入式硬件
国产HT1621B1 天前
YL4056 NTC 外围电阻 R3/R4 计算:从公式推导到工程选型
科技·单片机·嵌入式硬件