利用51单片机+hc595芯片配合在led点阵上玩贪吃蛇 第二篇“自动运行函数”

完整的项目链接:
https://github.com/linxinloningg/51_chip_core.git

贪吃蛇是自己不断朝着前运动的,所以需要封装一个令贪吃蛇自己朝前运动的函数

自动运行函数满足条件:

  • 1.控制贪吃蛇不断运动
  • 2.运动方向发生改变时,蛇头运动方向立马发生改变,蛇身其他led灯运动方向仍保持,待运动到蛇头未改变时的位置,方可改变运动方向
  • 3.改变运动方向后,贪吃蛇朝此方向向前

虽然看上去十分混乱,一头雾水。

1.但我们先拆分出蛇头的坐标方位进行分析,起初我们自定义的蛇身长度为length(初始化点亮了三盏灯,length为3),贪吃蛇中led灯坐标都在x[32],y[32]数组里,那么蛇头的坐标对应着就是x[length-1],y[length-1].

2.我们假设蛇头要向左移动一位,起初蛇头位置为(2,3),移动后就是(1,3),x-1,y-0;

以此类推,向右就是x+1,y;向上就是x,y+1;向下就是x,y-1;

3.将改变的数值用flag_x,flag_y表示,那么例如蛇头向左一位则就是

flag_x=1, flag_y=0,

x[[length-1]+flag_x], y[[length-1]+flag_y]

通过改变flag_x和flag_y的值,就可实现上下左右的移动。

4.蛇头的运动有了,蛇身的运动怎么解决,其实十分简单,将蛇身的坐标点都换成它上一个点的坐标即可

例如蛇头改变方向了,蛇头的下一led此时坐标改为蛇头为发生改变时的坐标,以此类推,往返操作,即可达到运动的目的

封装自动运动的函数

void auto_move(void)
{
unsigned char i;
for(i=0;i<(length-1);i++)
{
x[i]=x[i+1];
y[i]=y[i+1];
}
x[length-1]+=flag_x;
y[length-1]+=flag_y;
if(x[length-1]>8)
x[length-1] = 1;
else if(x[length-1]<1)
x[length-1] = 8;
if(y[length-1]>8)
y[length-1] = 1;
else if(y[length-1]<1)
y[length-1] = 8;
delay(500);
}

(短暂延时,避免改变过快)

利用51单片机+hc595芯片配合在led点阵上玩贪吃蛇 第二篇“自动运行函数”相关推荐

  1. 利用51单片机+hc595芯片配合在led点阵上玩贪吃蛇 第一篇“显示贪吃蛇”

    利用51单片机+hc595芯片配合在led点阵上玩贪吃蛇 第一篇"显示贪吃蛇" 完整的项目链接: https://github.com/linxinloningg/51_chip_ ...

  2. 【51单片机实验笔记】3. LED点阵的基本控制

    目录 前言 硬件介绍 驱动芯片 74HC595芯片 MAX7219芯片 原理分析 软件实现 爱心图片 旋转大风车 滚动日期 螺旋线动画 LED点阵功能函数封装 总结 前言 本章接触的硬件依然与LED息 ...

  3. 51单片机红外通信及控制LED灯(LCD1602显示)

    51单片机红外通信及控制LED灯(LCD1602显示) 大家好,又和大家见面了,离上一次DS18B20传感器的文章已经过去了一个星期了,这期我将给大家带来,基于STC89C52芯片和HS0038红外接 ...

  4. 利用51单片机+0.96寸iic接口oled显示图片或动图

    利用51单片机+0.96寸iic接口oled显示图片或动图 前言:之前讲过如何使用oled显示数字以及字符,但并未讲述如何显示BMP格式的图片, 这篇将在之前的基础上加以封装一些函数用来显示图片 硬件 ...

  5. 51单片机入门(2)LED点亮的背后

    上一节提到了51单片机开发环境的搭建,这节我们开始正式进入51单片机的学习--点亮LED. 所有的控制类芯片学习的第一个实践就是点亮LED,这是最简单.最基本的操作,但这个实现过程却可能攘括了单片机的 ...

  6. 利用51单片机统计脉冲个数,即时输出显示

    ;利用51单片机设计一个计数显示系统,要求8个数码管显示T1输入脉冲的个数. ;最好用汇编语言,加注释,尽量别太复杂.尽量快些哈! ;悬赏分:30 | 解决时间:2011-7-20 19:15 | ; ...

  7. 利用51单片机制作从左至右再从右制作的的流水灯

    利用51单片机制作从左至右再从右制作的的流水灯 简述: 1.打开keil 4,新建工程 2.选择Atmel ,选择AT89C51芯片 3.新建文件另存为,将文件名末尾加上".c" ...

  8. 用c语言编写振铃检测程序,利用51单片机2进8出的程控交换机C语言源码

    这个是利用51单片机加上超长的语音芯片合为一体的2进8出的程控交换机C语言源码 /************************** 6-23日 修改总台来显 ******************* ...

  9. 利用51单片机演奏《猪猪侠》

    今天的目标很明确,那就是我们如何使用51单片机演奏一首音乐. 先听一下演奏效果: 51单片机播放<猪猪侠>音乐(音频) 1.有一个很重要的问题,那就是如何将乐谱转换51单片机的16进制或十 ...

最新文章

  1. 阿里达摩院实习生立功!何恺明Mask R-CNN精度提升,一半输入数据量就行 | CVPR2020...
  2. 让我感动的经典台词(zz)
  3. php数组验证用户名密码,求个php数组验证问题,在线等
  4. 网页空间 - 概念篇
  5. asteroids模板 游戏 java_在高级Java游戏中存储全局/静态变量的最佳方法是什么?...
  6. 生产者消费者_【Java面试】实现生产者消费者模式
  7. adb如何使用javac编译java程序并且运行
  8. html基礎之渐变属性(斑马线)
  9. 适配器模式之备忘录模式
  10. 记录一次项目中代码大致优化方向
  11. 解压war包并重新编译成war包
  12. 使得在虚拟机能复制粘贴 -- Linux安装增强
  13. php代码写一串新年祝福,新年祝福QQ留言代码_把幸福装的满满的
  14. win7从服务器拷文件提示错误,windows7无法复制文件提示“一个意外错误使您无法复制该文件”如何解决...
  15. 2022-2028全球智能户外电视行业调研及趋势分析报告
  16. 多功能频谱分析仪TFN RMT系列,满足您对频谱分析仪的多种幻想。
  17. 图片上传被旋转,golang Exif 判断.jepg图片原始信息Orientation方向,并旋转,
  18. 聊聊我在第三方支付公司的经历
  19. 以下python注释代码中_以下Python注释代码,不正确的是()_学小易找答案
  20. 怎么屏蔽还有照片_“朋友,别逼我屏蔽你”:乱象丛生的朋友圈,到此为止吧...

热门文章

  1. 汉语编程工具易语言即学即用教程pdf
  2. 低代码与BPM有什么区别?
  3. 美国姑娘项美丽与邵洵美的跨国恋
  4. 白嫖 IObit 系列软件例如 IObit Uninstaller
  5. 笔记|滴滴iOS客户端的架构,组件化,技术选型
  6. iOS客户端的title不显示解决方案
  7. linux中出现不在 sudoers 文件中。此事将被报告的解决方法
  8. vue2 项目中引入iconfont
  9. 并查集专题(亲戚,格子游戏,银河英雄传说)
  10. 对称加密和非对称加密是什么?