• 大小: 152KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2022-06-21
  • 语言: 其他
  • 标签: 51单片机  

资源简介

一个简单的贪吃蛇用51单片机8*8点阵和矩阵键盘操作,内容很小白,大佬请绕路
内有仿真(仅供学习交流)

资源截图

代码片段和文件信息

#include
#include
#include
#define max 20//最大蛇长
#define delay 300//delay越小越快
sbit DIO=P3^4;//串行数据口
sbit SHCP=P3^5;//移位寄存器时钟
sbit STCP=P3^6;//输出锁存器时钟
sbit up=P1^0;//独立键盘上
sbit down=P1^1;//独立键盘下
sbit left=P1^2;//左
sbit right=P1^3;//右
unsigned char nijifdiebuttonret;//依次为当前蛇长通用循环变量(i和j)是否死亡上下左右命令储存果子eating的返回值
unsigned char snake[max][2]={1000};//蛇的每一个点的坐标数组蛇头(10)第二段为(00)
unsigned char tabel[8] ={0};//这个相当于一个8*8矩阵用于装坐标转换成的的74HC595需要的8个16进制码
unsigned char apple[2]={33};//初始果子位置随机数有点麻烦
void direction(void);//判断上下左右函数
void eating(void);//判断吃果子函数
void die(void);//判断死亡函数                         
void send_byte(unsigned char byte);//74HC595串入并出要用到的函数
void show(void);//以上都是处理蛇的坐标这个函数就是将要显示的坐标转换成74HC595能识别的16进制码
void main()
{
ifdie=1;//先赐死
while(ifdie)
{
ifdie=0;//然后重生
n=2;//初始蛇长为2
snake[0][0]=1; snake[0][1]=0;//蛇每次重生在左上角
snake[1][0]=0; snake[1][1]=0;//蛇每次重生在左上角
apple[0]=3; apple[1]=3;//果子回到初始位置
button=0;//重生后要把按键赋零
while(ifdie!=1)//蛇没死我们就循环执行
{
ret=0;//每一轮开始都设没吃到果子
direction();//判断方向改变坐标
eating();//判断如果吃到果子身长+1
die();//判断死没死
show();//将蛇身的坐标转码展示到点阵屏上
if(n==max) 
ifdie=1;//蛇长最大了赐死吧
}
}
}
void direction(void)//判断方向
{
if(button==1&&snake[0][1]!=snake[1][1]+1)//向上
{
for(i=n-1;i>0;i--)//后一个蛇身坐标等于前一个蛇身坐标
{
for(j=0;j<2;j++)
snake[i][j]=snake[i-1][j];
}
snake[0][1]--;//蛇头纵坐标减一
}
if(button==2&&snake[0][1]!=snake[1][1]-1)//向下
{
for(i=n-1;i>0;i--)
{
for(j=0;j<2;j++)
snake[i][j]=snake[i-1][j];
}
snake[0][1]++;
}
if(button==3&&snake[0][0]!=snake[1][0]+1)//向左
{
for(i=n-1;i>0;i--)
{
for(j=0;j<2;j++)
snake[i][j]=snake[i-1][j];
}
snake[0][0]--;
}
if(button==4&&snake[0][0]!=snake[1][0]-1)//向右
{
for(i=n-1;i>0;i--)
{
for(j=0;j<2;j++)
snake[i][j]=snake[i-1][j];
}
snake[0][0]++;
}
}
void eating(void)
{
if(snake[0][0]==apple[0]&&snake[0][1]==apple[1])//当蛇头坐标与果子坐标相同时
{
for(j=0;j<2;j++)
{
    snake[n][j]=snake[n-1][j];//吃到果子后蛇的下一节长出来
apple[j]=snake[n-1][j];//不会随机数所以下一个果子出现在蛇尾
}
n++;//蛇长加一
ret = 1;//告诉下面的步骤:吃到了果子
}
}
void die(void)
{
if(snake[0][0]==8||snake[0][0]==255||snake[0][1]==8||snake[0][1]==255)//蛇头出界
ifdie=1;//死掉
for(i=4;i {
if(snake[0][0]==snake[i][0]&&snake[0][1]==snake[i][1])
ifdie=1;//如果蛇头和蛇身坐标重合死掉
}
}
void send_byte(unsigned char byte)//这是清翔讲的8*8点阵屏+74HC595的标配函数
{
unsigned char dat;
dat=byte;
for(j=0;j<8;j++)
{
SHCP=0;
STCP=0;
if(dat & 0X01)
DIO=1;
else
DIO=0;
SHCP=1;
dat>>=1;
}
}
void show(void)//这个比较关键把坐标转化成8个16进制数
{
unsigned char lie=0x80;
unsigned int z;
unsigned char t;
for( i=0;i<8;i++)
tabel[i]=0xff;//先重置tabel全都赋值0xff
if(ret) t=n-1;//如果这一轮吃到了果子那么蛇长加了一而实
else t=n;//   际上这一轮需要显示的是没加一的蛇(因为蛇头和果子重合)
for(i=0;i tabel[snake[i][1]]=tabel[snake[i][1]]^

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     文件       84480  2019-02-09 14:02  贪吃蛇小仙峰版\如何将坐标转换成点阵屏需要的码表.doc
     目录           0  2019-01-24 22:23  贪吃蛇小仙峰版\
     目录           0  2019-01-24 22:22  贪吃蛇小仙峰版\C代码\
     目录           0  2019-01-24 22:22  贪吃蛇小仙峰版\C代码\Listings\
     文件       14149  2019-01-21 21:41  贪吃蛇小仙峰版\C代码\Listings\STARTUP.lst
     文件        7859  2019-01-23 13:45  贪吃蛇小仙峰版\C代码\Listings\mysnake.lst
     文件       14873  2019-01-23 13:49  贪吃蛇小仙峰版\C代码\Listings\mysnake.m51
     目录           0  2019-01-24 22:22  贪吃蛇小仙峰版\C代码\objects\
     文件          19  2019-01-23 13:31  贪吃蛇小仙峰版\C代码\objects\ExtDll.iex
     文件         819  2019-01-21 21:41  贪吃蛇小仙峰版\C代码\objects\STARTUP.obj
     文件       11467  2019-01-23 13:49  贪吃蛇小仙峰版\C代码\objects\mysnake
     文件         125  2019-01-23 13:45  贪吃蛇小仙峰版\C代码\objects\mysnake.__i
     文件        1072  2019-01-23 13:49  贪吃蛇小仙峰版\C代码\objects\mysnake.build_log.htm
     文件        8436  2019-01-23 13:49  贪吃蛇小仙峰版\C代码\objects\mysnake.hex
     文件         108  2019-01-23 13:49  贪吃蛇小仙峰版\C代码\objects\mysnake.lnp
     文件       10000  2019-01-23 13:45  贪吃蛇小仙峰版\C代码\objects\mysnake.obj
     文件        6376  2015-07-08 16:02  贪吃蛇小仙峰版\C代码\STARTUP.A51
     文件        4176  2019-01-23 16:08  贪吃蛇小仙峰版\C代码\mysnake.c
     文件      176734  2019-01-24 22:10  贪吃蛇小仙峰版\C代码\mysnake.uvgui.Administrator
     文件        6666  2019-01-24 20:10  贪吃蛇小仙峰版\C代码\mysnake.uvopt
     文件       14466  2019-01-22 22:27  贪吃蛇小仙峰版\C代码\mysnake.uvproj
     目录           0  2019-01-24 22:22  贪吃蛇小仙峰版\贪吃蛇仿真\
     文件      105150  2019-01-23 13:49  贪吃蛇小仙峰版\贪吃蛇仿真\8x8dianzhen.DSN
     文件         768  2019-01-23 16:08  贪吃蛇小仙峰版\贪吃蛇仿真\8x8dianzhen.PWI
     文件      105142  2019-01-22 22:30  贪吃蛇小仙峰版\贪吃蛇仿真\Backup Of 8x8dianzhen.DBK
     文件      105142  2019-01-21 22:39  贪吃蛇小仙峰版\贪吃蛇仿真\Last Loaded 8x8dianzhen.DBK

评论

共有 条评论