资源简介
一个简单的贪吃蛇用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代码\ob
文件 19 2019-01-23 13:31 贪吃蛇小仙峰版\C代码\ob
文件 819 2019-01-21 21:41 贪吃蛇小仙峰版\C代码\ob
文件 11467 2019-01-23 13:49 贪吃蛇小仙峰版\C代码\ob
文件 125 2019-01-23 13:45 贪吃蛇小仙峰版\C代码\ob
文件 1072 2019-01-23 13:49 贪吃蛇小仙峰版\C代码\ob
文件 8436 2019-01-23 13:49 贪吃蛇小仙峰版\C代码\ob
文件 108 2019-01-23 13:49 贪吃蛇小仙峰版\C代码\ob
文件 10000 2019-01-23 13:45 贪吃蛇小仙峰版\C代码\ob
文件 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
- 上一篇:steam94授权
- 下一篇:IP数据包分析程序+报告
相关资源
- 51单片机密码锁.zip
- 基于c51单片机电子密码锁
- 基于51单片机的智能小车避障
- 基于proteus的51单片机电子称设计
- 51单片机 通过蓝牙连接app 控制继电器
- 《PIC16系列单片机C程序设计与PROTEUS仿
- 18B20温湿度传感器 51单片机程序
- ADC0832 文档+程序源码+Proteus仿真
- 基于51单片机的12864液晶显示的“204
- 51单片机最小系统原理图加PCB
- 基于51单片机PID算法的直流电机测速控
- 51单片机 GSM模块防火防盗
- 51单片机程序
- STC51单片机控制SIM900A数据发送与接收
- 51单片机 红外寻迹 + 蓝牙 + 超声避障
- 51单片机与蓝牙模块的串口通信C程序
- 51单片机蜂鸣器播放音乐、暂停音乐以
- 51单片机自制游戏机内置四款
- 模块最全的51单片机开发板原理图
- 基于51单片机的电子秤设计
- 第四届模拟题--自动售水机.rar
- 基于proteus的电子秤设计及仿真+51单片
- 基于51单片机和DS18B20的温度控制器带
- 51单片机串行通信程序
- 基于51单片机的DHT11温湿度测量报警系
- 基于51单片机的温度报警器
- 51单片机题库含答案
- C51单片机八段LED静态显示电子时钟M
- 温控系统的proteus仿真和编程
- 基于51单片机的家庭防火防盗设计
评论
共有 条评论