之前在做贪吃蛇的时候一直想找一些好理解的51单片机贪吃蛇代码,不是找不到了就是很难理解,又或者CS某N要付费,后面就直接自己写了加上参考了一部分资料,几天才写完,就想着来分享一下吧本次代码采用模块化设计,分为主函数模块,点阵模块和延时模块。

#include <REGX52.H>
#include <stdlib.h>
#include <intrins.h>
#include "Delay.h"
#include "MatrixLED.h"typedef  unsigned int  u16;
typedef  unsigned char u8;sbit up=P3^1;
sbit down=P3^0;
sbit lt=P3^2;
sbit rt=P3^3;u8 coordx[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,};
u8 coordy[]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01,};u8   foodx;
u8   foody;
u8   snake_x[20]={0};
u8   snake_y[20]={0};
u8   length;
u8   direction;void initsnake();
void Keyboard();
void move();
void creatfood();
void snakegrow(void);
void drawsnake();void initsnake()//蛇的初始化
{snake_x[0]=0;//1snake_y[0]=0;//1length=1;direction=2;
}
void move()//移动
{u8 len=length-1;//u16,漏-1for (len;len>0;len--){snake_x[len]=snake_x[len-1];snake_y[len]=snake_y[len-1];}switch(direction)//case不加(){case 1:snake_y[0]--;break;case 2:snake_y[0]++;break;case 3:snake_x[0]--;break;case 4:snake_x[0]++;break;default:break;}}void Keyboard()//按钮
{if(up==0){Delay(10);//避免if(up==0){direction=1;}while(!up);//!up,原up==1}if(down==0){Delay(10);if(down==0){direction=2;}while(!down);//!down}if(lt==0){Delay(10);if(lt==0){direction=3;}while(!lt);//改}if(rt==0){Delay(10);if(rt==0){direction=4;}while(!rt);//改}
}void creatfood()//食物创造
{u8 i;//u16foodx=rand()%8;foody=rand()%8;for(i=0; i<length; i++){if((foodx==snake_x[i])&&(foody==snake_y[i]))//括号运算优先级{creatfood();}}}void snakegrow()//吃食物后增厂长
{if(foody==snake_y[0]&&foodx==snake_x[0]){creatfood();snake_x[length]=snake_x[length-1];snake_y[length]=snake_y[length-1];length++;}
}void drawsnake()//调佣mtrixled来绘制蛇和食物
{u8 i;//u16for(i=0;i<length;i++)//应该是小于length{MatrixLED_ShowColumn(coordy[snake_y[i]],coordx[snake_x[i]]);MatrixLED_ShowColumn(coordy[foody],coordx[foodx]);}
}void judgedeath()//判断死亡
{u8 i;//u16if((snake_x[0]>7)||(snake_y[0]>7)){_74H595_WriteByte(0x00);//MatrixLED_ShowColumn(0x00,0xff);//清屏while(1);}for(i=4; i<length;i++){if((snake_x[0]==snake_x[i])&&(snake_y[0]==snake_y[i])){P0=0xFF;//MatrixLED_ShowColumn(0x00,0xff);while(1);}}
}void Timer0Init()
{TMOD|=0X01;//选择为定时器0模式,工作方式1,仅用TR0打开启动。TH0=0XD8;   //给定时器赋初值,定时10msTL0=0XF0;   ET0=1;//打开定时器0中断允许EA=1;//打开总中断TR0=1;//打开定时器
}void Timer0() interrupt 1
{static u16 i;TH0=0XD8;    //给定时器赋初值,定时10msTL0=0XF0;i++;if(i==50){i=0;move();}
}void main()
{Timer0Init();initsnake();while (1){   drawsnake();judgedeath();snakegrow();Keyboard();}}
#include <intrins.h>//延时函数
void delay(unsigned char a)     //@11.0592MHz
{unsigned char b;for(b=1;b<=a;b++){unsigned char i=2;while(--i);}
}
#include <REGX52.H>
#include "Delay.h"sbit SER=P3^4;
sbit SCK=P3^6;
sbit RCK=P3^5;typedef unsigned char u8;
typedef unsigned int u16;void _74H595_WriteByte(unsigned char Byte)
{u8 i=0;for(i=0;i<8;i++){SER=Byte>>7;Byte<<=1;SCK=1;//1Delay(1);SCK=0;//0}RCK=1;//1Delay(1);RCK=0;//0
}
void MatrixLED_ShowColumn(u8 Column,u8 Date)//Column为行(74H595),Date为列(0有效)
{_74H595_WriteByte((Column));P0=(Date);//if(Date==0){P0=~0x80;}Delay(1);P0=0xff;//位清零
}

大概还有.h文件没有补充,一般来说学到这里的人应该都会模块化,.h的文件创建也很简单就懒得上传了。后面可以改善的就是死亡后的点阵动画,有兴趣的人可以自己写一下改善我的代码。另外本代码运用了vscode的EIDE模块,vscode真的在长一点的代码写作上面很有用,此外我在设置vscode的时候也遇了很多的问题,调试了我一下午,有空也可以写来分享下避免踩坑。

普中51单片机的贪吃蛇教程相关推荐

  1. 基于51单片机的贪吃蛇小程序(8*8LED点阵实现)by_jy

    ** 基于51单片机的贪吃蛇小程序(8*8LED点阵实现)by_jy ** 一直很想写一个贪吃蛇的小程序,这两天终于抽空完成了,这里把我的思路分享给大家,仅供参考! 代码如下: 先放段主函数压压惊 v ...

  2. 基于普中51单片机开发板的温控风扇

    自学单片机也不算很久,刚好遇上了这一门的课程设计,查找了好多的资料发现都不算合适,合适的又要收费,那么最后呢才找到了一个有关我使用的开发板的温控风扇程序,也就是普中单片机开发板,该程序来自--黑51论 ...

  3. 普中51单片机-步进电机启停、变速控制级速度显示

    实验工具: ①普中51单片机-单核-A3,某宝买的:②28BYJ-48型号步进电机:③液晶数码管. 实现功能 实验一: ①按下独立按键K1,步进电机启动: ②按下K2,实现变速(由Delay(50)变 ...

  4. 普中51单片机学习日记-点亮LED

    普中51单片机中LED小灯所用端口为P2端口,从P2^0到P2^7分别为从左到右八个小灯. 可以使用sbit关键字定义变量led,以此简化端口的输入,并且使程序的可读性增强. 当变量的值设置为0,即端 ...

  5. 工业顺序控制--基于普中51单片机模拟

    1.实验目的 掌握工业顺序控制的硬件设计.软件设计.软件编程和调试. 2.实验内容 利用单片机实验箱实现注塑机的顺序控制. 3.实验要求 单片机P1口控制注塑机的6道工序,利用6只发光管的亮与否来模拟 ...

  6. 学习历程--普中51单片机A2--直流电机实验

    今天学习了普中的直流电机实验部分,将自己的一些学习内容记录一下. 直流电机的官方定义:直流电机(direct current machine)是指能将直流电能转换成机械能(直流电动机)或将机械能转换成 ...

  7. 基于51单片机的贪吃蛇游戏设计

    1绪 论 1.1本课题研究的背景及意义 随着当今社会的发展,人们的生活节奏变得越来越快,人们开始逐渐的融入全球化的世界.人们已经不再局限于一小块天地,加班,出差已经占据了现代人生活的绝大部分.这个时候 ...

  8. 学习历程--普中51单片机A2--蜂鸣器实验

    今天学习了普中的蜂鸣器部分,将自己的一些学习内容记录一下. 蜂鸣器有无源蜂鸣器和有源蜂鸣器,需要注意的是"源"的意思是"震荡源".是指震荡源.也就是说,有源蜂鸣 ...

  9. 普中51单片机 A6

    一.前言 1.1 先认识一下这个块板子 1.2 板载资源 1.3 使用 1.3.1 CH340 驱动安装 1.3.2 程序的烧录 在下载程序前先确认下开发板上的 USB 转 TTL 串口模块上的 J3 ...

  10. 普中51单片机按键-数码管显示

    基于普中单片机按键-数码管显示 简介 1.硬件部分 普中单片机开发板 数码管 独立按键 2.软件部分 keil软件 硬件部分 普中单片机开发板 数码管 独立按键 (这些都是开发板的最基本的配置) 软件 ...

最新文章

  1. Android11模拟定位开发,Android 11 中的位置信息更新
  2. @EnableAspectJAutoProxy||AOP原理:【看给容器中注册了什么组件,这个组件什么时候工作,这个组件的功能是什么?】
  3. python怎么创建方法_python中的__new__方法
  4. 高级数据结构与算法 | 红黑树(Red-Black Tree)
  5. 加拿大大学 计算机专业排名2015,加拿大大学计算机专业排名top15
  6. dlut-KFQ人工智能导论答案1
  7. 关于jquery的$(document).on()事件多次执行的问题
  8. debian、ubuntu安装metasploit通用方法
  9. ajaxFileUpload+struts2多文件上传(动态添加文件上传框)
  10. centos php mbstring.so,CentOS安装php mbstring的扩展
  11. Mac/Linux/Windos下仿站工具,基于Python的仿站工具,earnp/imitation仿站工具
  12. 计算机故障语言 英语怎么说,故障英语怎么说
  13. java中抽象工厂模式_抽象工厂模式(详解版)
  14. c语言ascii码字符串转16进制,C语言 16进制与ascii码互转
  15. 天创速盈:拼多多推广效果不好,哪里需要改善?
  16. HTML5期末大作业:英雄联盟网站设计——英雄联盟LOL(4页) HTML+CSS+JavaScript web期末网站设计大作业
  17. 阿飞阿飞,你要保重身体啊!
  18. STM32-(08):USART通信基础
  19. news_flash新闻快讯项目 Chapter 1
  20. 近视手术:全飞秒 vs 半飞秒

热门文章

  1. 408数据结构考研笔记!超级详细!23最新考纲
  2. 报刊订阅管理系统数据库
  3. web前端开发分享-css,js进阶篇
  4. Windows利用WTS API获取锁屏状态
  5. 一场对爱情的反思《少有人走的路:心智成熟的旅程》
  6. 展辰涂料如何利用K2BPM加强流程管控?
  7. Ubuntu论坛的开通
  8. 高精度NTC测温的硬件电路以及软件设计
  9. 也许你不知道:越自我,越自由!
  10. 初窥 Python 的 import 机制