基于51单片机贪吃蛇小游戏

基于51单片机贪吃蛇小游戏

(仿真+程序)

功能介绍

具体功能:

1.用74HC573驱动点阵显示游戏画面;

2.上电后贪吃蛇会自动寻食;

3.按下四个按键中的任何一个就手动寻食了;

​演示视频:

基于51单片机贪吃蛇小游戏 

添加图片注释,不超过 140 字(可选)

程序

#include <reg51.h>
/***公众号:木子单片机****
************************************/
#define uchar unsigned char
#define SNAKE 20                 //最大长度
#define TIME 50                 //显示延时时间
#define SPEED 71               //速度控制sbit keyenable=P3^6;			//方向使能
sbit up=P3^3;       //down
sbit down=P3^1;
sbit right=P3^2;
sbit left=P3^4;
uchar x[SNAKE+1]; // 声明20个
uchar y[SNAKE+1];   uchar guozix[20]={4,5,7,4,3,6,1,0,3,6,2,1,0,4,5,7,0,6,1,7};
uchar guoziy[20]={4,7,1,0,2,1,1,6,3,2,4,3,5,1,5,3,1,2,7,0};uchar time,n,i,e;              //延时时间,当前蛇长,通用循环变量,当前速度		
char addx,addy;                //位移偏移量/********************
延时程序
*********************/
void delay(char MS)
{char us,usn;while(MS!=0){usn = 0;while(usn!=0){us=0xff;while (us!=0){us--;};usn--;}MS--;}
}
/*******************************************
判断碰撞
*******************************************/
bit knock()
{      bit k;k=0;if(x[1]>7||y[1]>7){k=1;                             //撞墙}for(i=2;i<n;i++){if((x[1]==x[i])&(y[1]==y[i])){k=1;  //撞自己}}return k;
}
/*****************
上下左右键位处理
*****************/
void turnkey()// interrupt 0 using 2  
{//up=1;if(keyenable){if(left) // 控制左移动{addy=0;if(addx!=1)addx=-1; else addx=1;}if(right)  // 控制右移动{addy=0;if(addx!=-1)addx=1; else addx=-1;}if(up)		// 控制上移动{addx=0;if(addy!=-1)addy=1;else addy=-1;}if(down)	  // 控制下移动{  addx=0;if(addy!=1)addy=-1; else addy=1;}}
}
/*****************
乘方程序
*****************/
uchar mux(uchar temp) 
{if(temp==7)return 128;if(temp==6)return 64;if(temp==5)return 32;if(temp==4)return 16;if(temp==3)return 8;if(temp==2)return 4;if(temp==1)return 2;if(temp==0)return 1; // 在这个的范围之内return 0;
}
/*****************
显示时钟 显示程序
*****************/
void timer0(uchar k)
{while(k--){  for(i=0;i<SNAKE+1;i++){// 显示具体的点了P2=mux(x[i]);	// 每个都在变化的P0=255-mux(y[i]);turnkey();                     //上下左右键位处理// 按键处理delay(TIME);                   //显示延迟P2=0x00;P0=0xff;}}
} 

硬件设计

使用元器件:

单片机:STC89C52;

(注意:单片机是通用的,无论51还是52、无论stc还是at都一样,引脚功能都一样。程序也是一样的。)

添加图片注释,不超过 140 字(可选)

设计资料

01仿真图

本设计使用proteus7.8和proteus8.9两个版本设计!具体如图!

添加图片注释,不超过 140 字(可选)

02程序

本设计使用软件keil5版本编程设计!具体如图!

添加图片注释,不超过 140 字(可选)

03设计资料

        资料获取请关注同名公众号,全部资料包括仿真源文件 、程序(含注释)等。具体内容如下,全网最全! !

 

可以关注下方公众号!

点赞分享一起学习成长。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/853883.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java实现两个不同对象的集合复制

场景&#xff1a; 我们开发中会遇到集合对象复制的场景&#xff0c;可以避免代码的重复编写 基于 com.alibaba.fastjson.JSON 实现对象集合的拷贝 对象定义&#xff1a;ObjectA属性&#xff1a;id&#xff0c;name&#xff0c;ageObjectB属性&#xff1a;id&#xff0c;name…

利用visibilitychange事件来处理页面可见性变

使用场景&#xff1a;可以利用visibilitychange事件来处理页面可见性变化&#xff0c;例如在页面不可见时暂停视频播放、更新页面数据等。 在Vue 3中&#xff0c;可以使用onBeforeMount和onUnmounted钩子函数来监听页面可见性变化&#xff0c;并执行相应的逻辑。 以下是在Vue …

库的制作 与 使用 (Linux下)

目录 动静态库的制作 前置知识 库的基本构造 问题 分析 要给什么文件 如何更好的让别人使用 库的生成 静态库的生成 makefile参考 动态库的生成 makefile参考&#xff08;包含动态库和静态库生成&#xff09; 库的使用 法一&#xff1a;放入系统路径 弊端 法二…

Java 面试题:Java 中的 int 和 Integer 有什么区别?

在Java编程语言中&#xff0c;int和Integer都是用于表示整数的数据类型&#xff0c;但它们在使用和功能上有着明显的区别。int是一种基本数据类型&#xff08;primitive type&#xff09;&#xff0c;而Integer则是一个对象类型&#xff08;wrapper class&#xff09;。理解这两…

算法与数据结构:列表、栈、队列、树、图的深入解析

在软件开发和计算机科学领域&#xff0c;算法和数据结构是两大基石。它们不仅影响着程序的性能&#xff0c;还决定了解决问题的效率。以下&#xff0c;我们将从技术难点、面试官关注点、回答吸引力以及代码举例四个方面&#xff0c;详细解释常见的算法和数据结构&#xff1a;列…

半导体芯片结构以及译码驱动

一.半导体芯片结构 可能并不是只有一个芯片&#xff0c;有多个芯片就需要片选线了。 二.半导体存储芯片的译码驱动 主要有两种方式&#xff1a;线选法和重合法 线选法&#xff1a;每一个存储单元都用一根字选择线选中&#xff0c;直接选中存储单元的各位。&#xff08;一维…

《人生海海》读后感

麦家是写谍战的高手&#xff0c;《暗算》《风声》等等作品被搬上荧屏后&#xff0c;掀起了一阵一阵的收视狂潮。麦家声名远扬我自然是知道的&#xff0c;然而我对谍战似乎总是提不起兴趣&#xff0c;因此从来没有拜读过他的作品。这几天无聊时在网上找找看看&#xff0c;发现了…

C++11完美转发(引用折叠、万能引用)

完美转发是指在函数模板中&#xff0c;完全依照模板的参数的类型&#xff0c;将参数传递给函数模板中调用的另外一个函数。 函数模板在向其他函数传递自身形参时&#xff0c;如果相应实参是左值&#xff0c;它就应该被转发为左值&#xff1b;如果相 应实参是右值&#xff0c;它…

大数据入门实践一:mac安装Hadoop,Hbase,FLume

一、安装Hadoop 安装hadoop参考此文&#xff0c;关键点是安装JDK和Hadoop的配置&#xff0c;为避免引用文章变收费&#xff0c;我把关键信息摘录如下&#xff1a; jdk安装和配置就不说了(我本机安装了1.8/15/17/21&#xff0c;以17为主&#xff09;&#xff0c;hadoop安装过程…

简单剖析tRPC-Go中使用的第三方协程池ants

tRPC-Go中的tRPC.Go()方法使用了ants协程池&#xff0c;做个简单剖析 panjf2000/ants协程池 在tRPC.Go方法&#xff08;异步启动goroutine&#xff09;中看到里面使用了ants协程池去实现&#xff08;具体位置&#xff1a;g.pool.Invoke(p)&#xff09; 前置知识: 我们想异步完…

技巧解析,如何向Kimi提问才能写出更好的论文?

学境思源&#xff0c;一键生成论文初稿&#xff1a; AcademicIdeas - 学境思源AI论文写作 今天为大家整理、分享的Kimi提问技巧&#xff0c;将对论文写作的各个阶段提供帮助&#xff0c;可以以此来辅助学术论文撰写。 在此之前&#xff0c;先为大家科普一个概念——信息熵&am…

Python学习笔记11:入门终结篇

前言 入门知识到这里基本结束了&#xff0c;这里主要讲一下input和range。这两个讲完&#xff0c;讲讲后面进阶学些啥。 range函数 之前将循环的时候讲过一点&#xff0c;这个函数是Python内置的函数&#xff0c;主要用来生成一系列数字&#xff0c;简单方便。 这里重新&…

跨服务器迁移 Redis 数据

跨服务器迁移 Redis 数据可以通过以下几种方法实现&#xff1a; 使用 redis-cli 工具进行数据导出和导入&#xff1a; 先从源 Redis 服务器导出数据。然后将数据导入到目标 Redis 服务器。 使用 rdb 文件&#xff1a; 将源 Redis 服务器的 dump.rdb 文件拷贝到目标服务器&…

非连续分配管理方式(重点)

目录 一. 基本分页存储管理1.1 什么是分页存储1.2 页表 二. 基本地址变换机构三. 具有快表的地址变换机构3.1 什么是快表3.2 引入快表后, 地址的变换过程3.3 局部性原理 四. 两级页表4.1 单级页表存在什么问题?如何解决?4.2 两级页表的原理、逻辑地址结构4.3 如何实现地址变换…

Windows11安装并使用Gstreamer-1.0

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、下载二、使用步骤1.安装2.命令行测试 总结 前言 Gstreamer这个工具的重要性就不用多说了吧&#xff0c;在一些视频播放和解码领域大放异彩。以前更多的是在…

Python | 中心极限定理介绍及实现

统计学是数据科学项目的重要组成部分。每当我们想从数据集的样本中对数据集的总体进行任何推断&#xff0c;从数据集中收集信息&#xff0c;或者对数据集的参数进行任何假设时&#xff0c;我们都会使用统计工具。 中心极限定理 定义&#xff1a;中心极限定理&#xff0c;通俗…

C# 事件(Event)定义及其使用

1.定义个委托和类 //委托 public delegate void ProductEventHandler(Product product);/// <summary> /// 产品 /// </summary> public class Product {public int Id { get; set; }public string Code { get; set; }public string Name { get; set; }private de…

Linux 和 分区

文章目录 流程挂载设备文件名 Linux 下各分区的含义家目录 流程 在windows中&#xff0c;一个硬盘要使用只需要分区、格式化之后就可以使用了 在linux中&#xff0c;除了分区和格式化之外&#xff0c;还需要一个叫挂载的操作 挂载 挂载&#xff0c;就相当于windows环境下的写…

C | 在ubuntu22下开发的一些配置

目录 VScode设置 要下载的插件&#xff1a; 卸载VScode的话就是哪装的哪删。 浅用gcc 预处理指令 使用gcc 语言编译过程 1. 预处理&#xff08;Preprocessing&#xff09; 2. 编译&#xff08;Compilation&#xff09; 3. 汇编&#xff08;Assembly&#xff09; 4. …

基于Itô扩散过程的交易策略偏微分方程matlab求解与仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 5.完整程序 1.程序功能描述 基于It扩散过程的交易策略偏微分方程,提出了一种确定It扩散过程。通过根据的第一次通过时间来确定问题在这个过程中&#xff0c;我们推导出交易长度的分布函数和密…