【Proteus仿真】【51单片机】贪吃蛇游戏
文章目录
- 一、功能简介
- 二、软件设计
- 三、实验现象
- 联系作者
一、功能简介
本项目使用Proteus8仿真51单片机控制器,使用8*8LED点阵、按键模块等。
主要功能:
系统运行后,可操作4个按键控制小蛇方向。
二、软件设计
/*
作者:嗨小易(QQ:3443792007)*/#include "PBDATA.H"/****************************************蛇体 和 食物 相关的数据 和 函数
*****************************************/
uchar bodyRow[16], bodyCol[16]; // 蛇身的数组uchar code dirRow[4] = {-1, 0, 1, 0}; // 上右下左方向X增量
uchar code dirCol[4] = {0, 1, 0, -1}; // 上右下左方向Y增量
extern uchar dir;
uchar maxRow = 8, maxCol = 8; // 行的范围 [0, maxRow), 列范围同理
uchar speed = 5; // 蛇的速度,单位是50ms
uchar snakeBodyLength = 0; // 蛇身体的长度
uchar isDead = 0; // 表示蛇是否死亡uchar foodRow = 0, foodCol = 0, needCreate = 1; // 食物坐标和食物是否被吃标志void InitSnake()
{bodyRow[0] = 7;bodyCol[0] = 2;bodyRow[1] = 7;bodyCol[1] = 1;snakeBodyLength = 2;dir = 1;// 生成蛇打印的内容Matrix_GenerateTab(bodyRow, bodyCol, snakeBodyLength);// 设置时间种子srand(0);
}void GenerateFood()
{uchar i = 0;while(needCreate) {// 随机生成 Row 和 ColfoodRow = rand() % maxRow;foodCol = rand() % maxCol;// 判断食物是否和当前蛇身体冲突 for(i = 0; i < snakeBodyLength; i++) {if(bodyRow[i] == foodRow && bodyCol[i] == foodCol) {break;}}if(i == snakeBodyLength) {needCreate = 0;bodyRow[snakeBodyLength] = foodRow;bodyCol[snakeBodyLength] = foodCol;} }
}/****************************************定时器相关的代码
*****************************************/uchar count; // time = count * 50msvoid InitTimer()
{TMOD = 0x01;// 初始值 : 50msTH0 = (65536 - 50000) / 256; // 初始值取高八位TL0 = (65536 - 50000) % 256; // 初始值取低八位// 中断开启ET0 = 1; // 开启定时器0的中断EA = 1; // 开启总的中断// 配置TCON// TR0 : 1, 启动定时器0TR0 = 1;
}void TimerIsr() interrupt 1
{uchar nextHeadRow = 0, nextHeadCol = 0, i = 0;// 重新装填// 初始值 : 50msTH0 = (65536 - 50000) / 256; // 初始值取高八位TL0 = (65536 - 50000) % 256; // 初始值取低八位if(count == speed && !isDead) { // count * 50ms 触发一次count = 0;// 生成食物GenerateFood();// 预测蛇头nextHeadRow = bodyRow[0] + dirRow[dir];nextHeadCol = bodyCol[0] + dirCol[dir];if(nextHeadRow >= maxRow || nextHeadRow < 0 || nextHeadCol >= maxCol || nextHeadCol < 0) {isDead = 1;return;}// 身体撞击for(i = 0; i < snakeBodyLength; i++) {if(nextHeadRow == bodyRow[i] && nextHeadCol == bodyCol[i]) {isDead = 1;return;}}// 吃到食物与否if(nextHeadRow == foodRow && nextHeadCol == foodCol) {snakeBodyLength += 1;needCreate = 1;// 再生成新的食物GenerateFood();}// 蛇身体移动for(i = snakeBodyLength - 1; i > 0; i--) {bodyRow[i] = bodyRow[i - 1];bodyCol[i] = bodyCol[i - 1];}// 新的蛇头bodyRow[0] = nextHeadRow;bodyCol[0] = nextHeadCol;// 生成需要显示的图形Matrix_GenerateTab(bodyRow, bodyCol, snakeBodyLength + 1);}count++; // 每50ms进行一次按键扫描DirKeyScan();
}void main()
{uchar i = 0, a = 0;count = speed;InitSnake();InitTimer();while(1){if(isDead) {Matrix_ShowAll();} else {// 打印蛇的身体Matrix_ShowPointByCode(); }}
}
三、实验现象
B站演示视频:https://space.bilibili.com/444388619
联系作者
视频地址:https://space.bilibili.com/444388619/video
专注于51单片机、STM32、国产32、DSP、Proteus、arduino、ESP32、物联网软件开发,PCB设计,视频分享,技术交流。
相关文章:

【Proteus仿真】【51单片机】贪吃蛇游戏
文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用Proteus8仿真51单片机控制器,使用8*8LED点阵、按键模块等。 主要功能: 系统运行后,可操作4个按键控制小蛇方向。 二、软件设计 /* 作者:嗨小易…...
Android 原生定位开发(解决个别手机定位失败问题)
文章目录 前言一、实现步骤二、使用步骤1.服务启动工具类2.实现LocationService 总结 前言 在android开发中地图和定位是很多软件不可或缺的内容,这些特色功能也给人们带来了很多方便。定位一般分为三种发方案:即GPS定位、Google网络定位以及基站定位。…...
uni-app 中如何实现数据组件间传递?
在 uni-app 中,实现数据组件间传递可以使用 Props 或 Vuex。 Props 是一种组件通信的方式,通过向子组件传递数据来实现组件间的数据传递。下面是一个示例: 父组件: <template><child :message"hello">&l…...

SpringBoot整合自签名SSL证书,转变HTTPS安全访问(单向认证服务端)
前言 HTTP 具有相当优秀和方便的一面,然而 HTTP 并非只有好的一面,事物皆具两面性,它也是有不足之处的。例如: 通信使用明文(不加密),内容可能会被窃听。不验证通信方的身份,因此有可能会遭遇…...

k8s:endpoint
在 Kubernetes 中,Endpoint 是一种 API 对象,它用于表示集群内某个 Service 的具体网络地址。换句话说,它连接到一组由 Service 选择的 Pod,从而使它们能够提供服务。每个 Endpoint 对象都与相应的 Service 对象具有相同的名称&am…...

最新版星火官方搬运工具6.0,高级搬运,100%过原创,短视频上热门搬运软件黑科技【搬运脚本+使用技术教程】
软件介绍: 高级搬运,条条过原创 短视频暴力热门搬运黑科技 自研摄像头内录突破性技术6.0 无需任何繁琐准备工作安装即用 无需复杂售后培训看教程即可学会 直装直用自研技术更好卖 无需root 无需框架 更方便 无需xposed 无需vcam更安全 适配99%以…...

轧钢厂安全生产方案:AI视频识别安全风险智能监管平台的设计
一、背景与需求 轧钢厂一般都使用打包机对线材进行打包作业,由于生产需要,人员需频繁进入打包机内作业,如:加护垫、整包、打包机检修、调试等作业。在轧钢厂生产过程中,每个班次生产线材超过300件,人员在一…...
Linux Dotnet 程序堆栈监控
# 查看进程 dotnet-stack ps #显示如下2014067 dotnet /usr/share/dotnet/dotnet k1 --LogLevel4 2014087 dotnet /usr/share/dotnet/dotnet --LogLevel4 2014089 dotnet /usr/share/dotnet/dotnet --LogLevel4 # 根据PID查看这个进程每个线程的堆栈 dotnet-stack repor…...

后端设计PG liberty的作用和增量式生成
Liberty(俗称LIB和DB),是后端设计中重要的库逻辑描述文件,这里边包含了除过physical(当然也有一点点涉及)以外所有的信息,对整个后端设计实现有非常大的作用。借此机会,一起LIB做一个…...

Linux 安装 RocketMq
RocketMq是阿里出品(基于MetaQ)的开源中间件,已捐赠给Apache基金会并成为Apache的顶级项目。基于java语言实现,十万级数据吞吐量,ms级处理速度,分布式架构,功能强大,扩展性强。 官网…...

大数据Doris(十六):Doris表的数据划分
文章目录 Doris表的数据划分 一、Partition 二、 Bucket 三、PROPERTIES 四、 ENGINE Doris表的数据划分 Doris支持单分区和复合分...

管理文件:文件批量重命名,轻松删除文件名中的空格
在文件管理中,我们经常会遇到文件名中带有空格的情况。这些空格可能会使文件在某些情况下难以被正确识别或使用,因此我们需要掌握一些技巧来轻松删除文件名中的空格。现在使用云炫文件管理器批量重命名进行批量处理。以下是如何操作的步骤详解࿱…...

Docker容器技术实战3
8、docker原生网络 Docker原生网络基于Linux桥接技术和虚拟网络接口,使用了Linux内核的网络功能。每个Docker容器都有自己的网络命名空间,这使得容器之间可以使用独立的IP地址,并隔离了容器的网络栈。 当创建一个Docker原生网络时ÿ…...

数字处理-第10届蓝桥杯省赛Python真题精选
[导读]:超平老师的Scratch蓝桥杯真题解读系列在推出之后,受到了广大老师和家长的好评,非常感谢各位的认可和厚爱。作为回馈,超平老师计划推出《Python蓝桥杯真题解析100讲》,这是解读系列的第3讲。 数字处理ÿ…...
Go并发编程
一、goroutine 和 通道 在Go语言中,每一个并发执行的活动成为goroutine。通道则是每一个goroutine之间传递消息的工具。 1、Goroutine 在一个Go程序中,只有一个主Goroutine来调用main函数。生成新的goroutine也十分简单,例如有一个函数&…...
Nignx及负载均衡动静分离
核心要点:部署后台项目 1.配置jdk环境 1.先将jdk的Linux版本的压缩包上传虚拟机中服务器 2.解压上传的jdk压缩包 tar -zxvf jdk.gz 3.先进入jdk的解压目录,再通过pwd查看当前解压包的路径 4.将 解压包路径 配置到 /etc/profile 5…...

HDFS架构介绍
数新网络_让每个人享受数据的价值浙江数新网络有限公司是一家开源开放、专注于云数据智能操作系统和数据价值流通的服务商。公司自主研发的DataCyber云数据智能操作系统,主要包括数据平台CyberData、人工智能平台CyberAI、数据智能引擎CyberEngine、数据安全平台Cyb…...
微信小程序提示确认框 wx.showModal
核心实现代码如下 wx.showModal({ title: 确认, content: 确定要删除吗?, success (res) { if (res.confirm) { console.log(用户点击确定) } else if (res.cancel) { console.log(用户点击取消) } } })title 是确认框的标题,content 是确认…...

如何设置OBS虚拟摄像头给钉钉视频会议使用
环境: OBS Studio 29.1.3 Win10 专业版 钉钉7.1.0 问题描述: 如何设置OBS虚拟摄像头给钉钉视频会议使用 解决方案: 1.打开OBS 底下来源这添加视频采集设备 选择OBS虚拟摄像头 2.源那再建一个图像,随便选一张图片 3.点击虚…...

SpringCloud 微服务全栈体系(十一)
第十章 RabbitMQ 三、SpringAMQP SpringAMQP 是基于 RabbitMQ 封装的一套模板,并且还利用 SpringBoot 对其实现了自动装配,使用起来非常方便。 SpringAmqp 的官方地址:https://spring.io/projects/spring-amqp SpringAMQP 提供了三个功能&…...

大数据学习栈记——Neo4j的安装与使用
本文介绍图数据库Neofj的安装与使用,操作系统:Ubuntu24.04,Neofj版本:2025.04.0。 Apt安装 Neofj可以进行官网安装:Neo4j Deployment Center - Graph Database & Analytics 我这里安装是添加软件源的方法 最新版…...

Python:操作 Excel 折叠
💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...

python/java环境配置
环境变量放一起 python: 1.首先下载Python Python下载地址:Download Python | Python.org downloads ---windows -- 64 2.安装Python 下面两个,然后自定义,全选 可以把前4个选上 3.环境配置 1)搜高级系统设置 2…...
AtCoder 第409场初级竞赛 A~E题解
A Conflict 【题目链接】 原题链接:A - Conflict 【考点】 枚举 【题目大意】 找到是否有两人都想要的物品。 【解析】 遍历两端字符串,只有在同时为 o 时输出 Yes 并结束程序,否则输出 No。 【难度】 GESP三级 【代码参考】 #i…...

智能在线客服平台:数字化时代企业连接用户的 AI 中枢
随着互联网技术的飞速发展,消费者期望能够随时随地与企业进行交流。在线客服平台作为连接企业与客户的重要桥梁,不仅优化了客户体验,还提升了企业的服务效率和市场竞争力。本文将探讨在线客服平台的重要性、技术进展、实际应用,并…...
【算法训练营Day07】字符串part1
文章目录 反转字符串反转字符串II替换数字 反转字符串 题目链接:344. 反转字符串 双指针法,两个指针的元素直接调转即可 class Solution {public void reverseString(char[] s) {int head 0;int end s.length - 1;while(head < end) {char temp …...

2025盘古石杯决赛【手机取证】
前言 第三届盘古石杯国际电子数据取证大赛决赛 最后一题没有解出来,实在找不到,希望有大佬教一下我。 还有就会议时间,我感觉不是图片时间,因为在电脑看到是其他时间用老会议系统开的会。 手机取证 1、分析鸿蒙手机检材&#x…...
什么?连接服务器也能可视化显示界面?:基于X11 Forwarding + CentOS + MobaXterm实战指南
文章目录 什么是X11?环境准备实战步骤1️⃣ 服务器端配置(CentOS)2️⃣ 客户端配置(MobaXterm)3️⃣ 验证X11 Forwarding4️⃣ 运行自定义GUI程序(Python示例)5️⃣ 成功效果
Python 实现 Web 静态服务器(HTTP 协议)
目录 一、在本地启动 HTTP 服务器1. Windows 下安装 node.js1)下载安装包2)配置环境变量3)安装镜像4)node.js 的常用命令 2. 安装 http-server 服务3. 使用 http-server 开启服务1)使用 http-server2)详解 …...