贪吃蛇---STC89C52(已修复BUG版)

51单片机 贪吃蛇程序+仿真.rar 基于stc89c52的单片机贪吃蛇小游戏,有protues仿真实例(加载hex文件),有完整的代码,可以在普中开发板成功运行,其他开发板需要更换8x8点阵引脚,还有系统的完整文档说明。货真价实。 立即下载

SNACK STC89C52  (已修复BUG版)

思路:
通过结构体设置x,y坐标,对点阵进行定点处理。只需对每个点进行扫描,利用人眼的延时性即可显示snack;
还有比较关键的就是模仿,只控制第一个点,随后几个分别模仿前一个点的运动轨迹即可实现连贯跟随。:)

自定义游戏规则:
不能穿墙(考虑到界面比较小,颜色比较单一,穿墙后容易分辨不了蛇的头和尾)。    撞到自己后重新开局,头只能向三个方向移动。以snake的长度定胜负。

这里写图片描述

这里写图片描述

这里写图片描述

撞到自己重新开局

这里写图片描述
这里写图片描述

花了一个下午搞的,有不足之处请直接评论 : )

/*************************
April 10  stc89c52 snake
made by Rays
*************************/
#include<reg51.h>
#include<stdlib.h>
#include<intrins.h>
typedef unsigned int uint;
typedef unsigned char uchar;
sbit SRCLK=P3^6;
sbit RCLK=P3^5;
sbit SER=P3^4;
sbit k1=P3^1; //up
sbit k2=P3^0; //down
sbit k3=P3^2; //left
sbit k4=P3^3; //right

uchar xz[]={0x00,0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,0xff};
uchar yz[]={0x00,0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,0xff};
uchar len,flag,x0,y0,r,p,f;
void send(uchar dat);
void keyboard();
struct point
{
    uchar x,y;
}s[40];
void int0()
{
    len=3;
    s[0].x=3,s[0].y=1;
    s[1].x=2,s[1].y=1;
    s[2].x=1,s[2].y=1;
    flag=0;//模仿标志

    p=1;  //随机数产生标志
    f=1; 

    r=0; //结果标志
}
void delay(uint c)   //c=1,1ms
{
    uint a,b,t;
    for(t=0;t<c;t++)
    for(b=102;b>0;b--)
        for(a=3;a>0;a--);
}

void show(uchar x,uchar y)
{
    send(xz[x]);
    P0=yz[y];
}
void main()
{       
    uchar i,tmpx,tmpy,x1,y1;
    int0();
    while(1){
          tmpx=s[0].x;
          tmpy=s[0].y;
            keyboard();
            if(s[0].x==s[1].x&&s[0].y==s[1].y)
            {
                s[0].x=tmpx;
                s[0].y=tmpy;
                flag=0;
            }
            if(s[0].x==x0 && s[0].y==y0)
            {
                if(len<40) len++;
                if(s[len-2].x==s[len-3].x)
                {
                    if(s[len-2].x<s[0].x) s[len-1].x=s[len-2].x-1;
                    else s[len-1].x=s[len-2].x+1;
                    s[len-1].y=s[len-2].y;
        }
                if(s[len-2].y==s[len-3].y)
                {
                    if(s[len-2].y<s[0].y) s[len-1].y=s[len-2].y-1;
                    else s[len-1].y=s[len-2].y+1;
                    s[len-1].x=s[len-2].y;
        }
                p=1;
      }
            x1=x0,y1=y0;

    while(p){               //产生随机数     
     f=1;
        x0=rand()%9;
      y0=rand()%9;
        for(i=0;i<len;i++) 
        if(s[i].x==x0 && s[i].y==y0) f=0;
        if(f &&(x0>=1&&x0<=8)&&(y0>=1&&y0<=8))
          if(x1!=x0||y1!=y0) p=0;
   }
            if(flag){
      for(i=len-1;i>=2;i--)  //模仿
       {
          s[i].x=s[i-1].x;
                s[i].y=s[i-1].y;
       }
                s[1].x=tmpx;
                s[1].y=tmpy;
             flag=0;
         }  
          s[len].x=x0,s[len].y=y0;
            for(i=0;i<len;i++) show(s[i].y,s[i].x);
          show(0,9);             //除阴影点                
          show(s[len].y,s[len].x);  
          show(0,9);

         r=0;  //初始化结果       
         for(i=1;i<len;i++)     //判断是否撞到自己
        if(s[0].x==s[i].x &&s[0].y==s[i].y) r=1;
        if(r)
            {
                show(9,0);
                delay(500);
                int0();          //撞到自己重新开局     
             }
    }
}
void send(uchar dat)
{
    uchar a;
    SRCLK=0;
    RCLK=0;
    for(a=0;a<8;a++)
    {
        SER=dat>>7;
        dat<<=1;

        SRCLK=1;
        _nop_();
        _nop_();
        SRCLK=0;    
    }

    RCLK=1;
    _nop_();
    _nop_();
    RCLK=0;
}
void keyboard()
{
    if(k1==0)      //up
  {
     delay(2);
     if(k1==0)
     { 
         if(s[0].y<8) {s[0].y++;
               //else s[0].y=1;
         flag=1;}
      }         
      while(!k1);                  
   }     
   if(k2==0)      //down
   {
      delay(2);
      if(k2==0)
      { 
          if(s[0].y>1) {s[0].y--;
                  //else s[0].y=8;
          flag=1;}
      }                 
      while(!k2);                  
    }     
    if(k3==0)      //left
    {
       delay(2);
       if(k3==0)
       { 
           if(s[0].x>1) {s[0].x--; 
                   //else s[0].x=8;
           flag=1;}
       }         
       while(!k3);                  
      }     
      if(k4==0)      //right
      {
        delay(2);
        if(k4==0)
      { 
         if(s[0].x<8) {s[0].x++;
                 //else s[0].x=1;
         flag=1;}
      }     
       while(!k4);                  
      } 
}
基于STC89C52 16*16点阵贪吃蛇 本设计采用8051单片机为主控,实现采用4个按键控制16*16点阵显示的贪吃蛇游戏。并做到以下要求: 1.点阵显示清晰无坏点; 2.按键控制方向,反应迅速无延迟; 3.随着所吃食物增加,移动速度逐渐增加; 4.当贪吃蛇碰壁时游戏结束,并且显示分数; 5.当游戏结束后能够恢复初始化,继续进行。 立即下载

相关推荐

基于STC89C52的贪吃蛇游戏

基于STC89C52,lcd12864显示,按钮控制方向和菜单,贪吃蛇游戏,新增功能血量,不单单吃食物会变长,在游戏过程中,随机刷新障碍物,撞到扣血,同时也会刷新血块,可以补血。随着长度增加贪吃蛇运动也会加快。

基于STC89C52的贪吃蛇(用74hc595和P1口。P1口可用74hc138代替)

说法一:其实单色点阵LED本无所谓共阳还是共阴,如此命名多半是因为行业习惯造成的。市面上对8*8点阵LED所谓的共阳还是共阴的说法一般是根据点阵第一个引脚的极性所定义的,第一个引脚为阳极则为共阳,反之则为共阴。 说法二:卖家所说的共阴或者共阳确切的说应该是行共阴或者行共阳 从这两张图片上我们看到第一脚是在第一行的,所以这两种说法其实是一样的 下面说说点阵的一些基本知识 管脚的定义: 有的点阵后面标有第一脚,但是有的没有标,现在大家默认跟IC的管脚顺序一样,读法是第1脚一般在侧面有字的那一面,字是正向时左

qq_45774073的博客 1465

C52单片机做的贪吃蛇

C52单片机做的贪吃蛇 以验证可用

基于SCT89C52的贪吃蛇游戏制作

基于SCT89C52的贪吃蛇游戏制作 本文主要描述各个模块的软件原理部分,开发板电路部分略微提及。 下载链接:https://download.youkuaiyun.com/download/xiaoshixiu/11813752 一、 控制器 红外发射管和红外接收管 红外通信是指以红外线作为载波的通信,我们常可以在遥控器的顶端看到红外二极管,也就是上图。如果晶振频率较高,有时候需要对晶振分频后由红外发...

xiaoshixiu的专栏 1279

STC89S52单片机12864贪吃蛇

用51单片机写的贪吃蛇。有注释。BUG全部消除。

单片机stc89C52rc 程序列子代码

单片机stc89C52rc 程序列子 新手入门例子代码(跑马灯、汉字显示等)

基于51单片机和LCD12864的小游戏《贪吃蛇》

51单片机,LCD12864,贪吃蛇,矩阵按键、独立按键。

gantengsheng的博客 2547

基于STC89C52单片机的智能家居系统

环境:keil4 器件:STC89C52RC、Wifi模块(ESP8266)、DHT11温湿度传感器、声音传感器,雨水传感器、LCD1602 项目描述: 1、 使用DHT11采集当前环境温度、湿度信息,监测敲门、监测室外天气; 2、 通过无线通信ESP8266模块发送到服务器,服务器连接局域网; 3、 手机可以通过访问局域网来访问家中的数据信息;

基于C51与74HC595的8x8点阵游戏开发实战

LED点阵显示是一种通过行列扫描实现像素控制的基础技术,其核心原理是利用视觉暂留效应快速轮流点亮各行,从而呈现稳定画面。在嵌入式系统中,借助74HC595移位寄存器可大幅节省IO资源,实现高效驱动。该技术价值在于以极低成本构建交互式显示终端,广泛应用于复古游戏机、信息看板等场景。针对8x8点阵,结合C51单片机与状态机设计,能流畅运行贪吃蛇等小游戏,重点解决动态扫描、按键消抖与双缓冲刷新等工程问题,为嵌入式图形交互提供完整实践参考。

weixin_29190573的博客 294

基于Basys3的贪吃蛇游戏1

摘要1第一节 引 言 3第二节 系统设计 32.3.1 游戏控制部分 52.3.2 “奖励道具”控制部分 52.3.3 时钟和驱动部分 6第三节 游戏介绍 73

E5071C 网络分析仪使用指南

E5071C 网络分析仪是 Keysight(原 Agilent)推出的一款高性能矢量网络分析仪,广泛应用于射频(RF)和微波(MW)电路设计、天线测试、滤波器优化等领域。它以高精度、宽频率范围(9 kHz–20 GHz)、出色的动态范围和灵活的测量功能著称。本文将详细介绍 E5071C 的基本操作方法,帮助用户快速上手并高效使用该设备。

2501_90901792的博客 4185

嵌入式课程设计报告:51单片机贪食蛇游戏机设计

本文是本科生嵌入式(MCS51)课程设计报告。​​使用STC89C52单片机开发板套件,在8x8点阵LED上实现贪食蛇游戏的运行,可以通过键盘、遥控器两种方式操作,具有调节难度、暂停、投币、最高分记录、声光震动反馈功能。配套完整工程下载地址:https://download.youkuaiyun.com/download/yul13579/53380773

yul13579的博客 1万+

基于OpenSSL的CA建立及证书签发(签发多域名/IP)

自签SSL证书(多域名/IP) 本文基于以下环境: 内核信息:Linux zabbix 3.10.0-957.el7.x86_64 #1 SMP Thu Nov 8 23:39:32 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux 系统版本:CentOS Linux release 7.6.1810 (Core) OpenSSL版本:OpenSSL 1.0.2k-fips 26 Jan 2017 【前言】 在基于OpenSSL的CA建立及证书签发一文中(后面统.

hobby云说 4646

基于stc89C52的贪吃蛇小程序

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210...

qq_41976171的博客 4939

ubuntu20.04下内核源码下载分析

ubuntu 20.04下内核源代码下载,配置编译环境写在前面一、安装VMware Workstation和Ubuntu20.04二、修改apt源合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 写在前面 我最近的科研工作需要使用到对ubun

冰冻三尺非一日之寒 1万+

RI-CLPM vs CLPM:什么时候该用随机截距交叉滞后模型?

本文深入对比了交叉滞后模型(CLPM)与随机截距交叉滞后模型(RI-CLPM)的核心差异与应用场景。RI-CLPM通过分离个体间稳定特质与个体内动态波动,能更纯净地估计变量间的动态因果关系,避免CLPM可能存在的混淆。文章提供了清晰的模型选择决策框架,并辅以Mplus语法示例,帮助研究者根据变量特质稳定性与研究问题,正确选用模型以确保结论的严谨性。

weixin_29276847的博客 302

C51自动贪吃蛇程序

C51平台加点阵屏可以贪吃蛇,程序实现如下,但还不够智能,只能看一步路,还是会出现把自己困死的情况,看提供一种思路,请大家能加以补充,提供更好的思路,感谢大家 单片机:STC89C52RC 点阵:8*8单色点阵 点阵驱动: 行:74HC595 列:P0口 主函数 #include "config.h" //*********主函数*************// void main() { initTimer0(); while(1)startSnake(); } 贪吃蛇源码 /

狂奔的兔子 1493

激光可燃气体传感器DIY指南:从TDLAS原理到STM32实战(附代码)

本文详细介绍了如何DIY激光可燃气体传感器,从TDLAS原理到STM32实战,包括硬件选型、光路搭建、电子系统设计和嵌入式软件开发。通过TDLAS技术实现高灵敏度甲烷检测,适合工业安全和环境监测应用。附有完整代码和实用调试技巧,帮助开发者快速掌握光学气体检测技术。

fanta的博客 440

【STC89C52】还在修改

备注:文章标题的理解【型号】 写文章的初衷,给自己留有后路,我喜欢收集东西,不舍得丢东西,如果跟了我很久的东西不见了,我会(;′⌒`)。年轻的话,选择很多,我想从头再来,再走一遍,也希望将这段经历记录下来。我暂时没有找到其他平台,以后也会考虑,先暂时选择优快云。 我先按照笔者电脑环境配置,制定计划。 由于我的视频和其他资料都丢了,我现在重新上手的两种方式是1看原先起步的视频(曹老师),学习通或者曹同学有。2根据原先学习的经历,我知道我需要先了解这块板子的原理图和相关的模块。从单独到组合,网上的资料很

weixin_50957114的博客 300

机器学习实战26-一种基于LightGBM的股市涨跌预测系统与代码实现过程

在全球经济一体化的背景下,股市作为经济活动的晴雨表,其波动与预测对于投资者、金融机构乃至国家政策制定者而言至关重要。随着金融市场的日益复杂化与信息量的爆炸式增长,股市分析不再仅限于基本面和技术面的传统研究,而是迫切需要更加精准、高效及智能化的方法来捕捉市场动态,以辅助决策制定。模型评估是确保LightGBM股市预测系统准确性和稳定性不可或缺的一环。通过综合运用多种评估指标、科学的验证方法以及深入的性能分析,我们不仅能够全面理解模型的能力和限制,还能为持续优化模型、提升预测准确性奠定坚实基础。

微学AI的博客 2327

【推荐100个unity插件】unity实现交互式火焰 —— Ignis

Ignis是一款Unity互动式消防系统插件,可轻松将物体转换为可燃物。支持固体、植被、蒙皮网格和地形树木等多种对象类型,提供火焰蔓延、熄灭等效果。安装需通过Unity Package Manager添加Visual Effects Graph,并按照指引转换目标物体材质。使用盒型碰撞体或网格计算燃烧区域,可自定义火焰参数和视觉效果。内置多种转换选项,如Flammable Vegetation、Flammable Skinned Mesh等,适用于不同场景需求。注意使用前需备份材质和地形数据,并提供性能优化

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 2235

用STC89C52RC单片机和0.96寸OLED屏幕实现贪吃蛇游戏。

用STC89C52RC单片机和0.96寸OLED屏幕实现贪吃蛇游戏。

qq12651775的博客 2698

YOLO26-seg分割优化:轻量化卷积魔改 | 新的partial convolution(PConv)结合C3k2 | CVPR2023

​​​​​摘要:本研究对Ultralytics YOLO26进行了全面分析,重点阐述了其关键架构改进及其在实时边缘目标检测中的性能基准测试。YOLO26于2025年9月发布,是YOLO系列最新、最先进的成员,专为在边缘及低功耗设备上实现高效、精确且易于部署的目标而构建。本文依次详述了YOLO26的架构创新,包括:移除了分布焦点损失(DFL);采用端到端的无NMS推理;集成了渐进损失(ProgLoss)与小目标感知标签分配(STAL);以及引入了用于稳定收敛的MuSGD优化器。

①答疑群聊服务;②YOLO大模型知识问答系统;③计算机视觉论文生成智能体; 149

[记录] 基于STC89C52RC的贪吃蛇三色游戏机设计(内含点阵驱动、数码管驱动详解)

目录设计目标需求分析硬件设计模块设计点阵模块线路图软件设计总结新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 设计目标 以红绿双色共阳极点阵M1588BRG和红色共阳极数码管MT03641BR作为图像输出设备,其中两块点

TZR986981442的博客 3483

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

基于stc89c52与LCD5110的贪吃蛇程序工程

最近老师布置了一个课程设计,是说采用51单片机做一个系统即可,本人闲来没事,用52芯片和LCD5110做了一个贪吃蛇游戏。 其中有2个难点: 1、LCD5110没有读的操作,只有写操作,需要自己在芯片或其他地方划分一块区域以保存显示的内容。 2、限于单片机的内存问题,需要对屏幕的分辨率进行压缩。LCD5110是48乘以84的像素,如果将这个屏幕都存下来,我们至少需要6*84个字节的内存,这是...

Dylan_Yan_的博客 1226

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

51单片机的8x8点阵贪吃蛇

51单片机的8x8点阵贪吃蛇制作,源码及仿真图可下载研究,看看一条行走的贪吃蛇是怎样实现的吧!······

深夜码农 2万+

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

上一篇: csbte启动器 - BT-Editor III advancd
下一篇: DrawPlate的一种高效实现方式
无氧土豆
博客等级 码龄10年 5粉丝 5原创
评论 7
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值