51单片机游戏(贪吃蛇)

想要更多项目私wo!!!

一、电路设计

此电路由AT89C51最小系统、74HC595位移缓存器、8*8点阵LED屏和按键组成。
74HC595位移缓存器
74HC595是一个8位串行输入、并行输出的位移缓存器:并行输出为三态输出。在SCK 的上升沿,串行数据由SDL输入到内部的8位位移缓存器,并由Q7’输出,而并行输出则是在LCK的上升沿将在8位位移缓存器的数据存入到8位并行输出缓存器。当串行数据输入端OE的控制信号为低使能时,并行输出端的输出值等于并行输出缓存器所存储的值。
在这里插入图片描述

符号 引脚 描述
Q0~Q7 第15脚,第1-7脚 8位并行数据输出
GND 第8脚
Q7’ 第9脚 串行数据输出
/MR 第10脚 主复位(低电平有效)
SH_CP 第11脚 数据输入时钟线
ST_CP 第12脚 输出存储器锁存时钟线
/OE 第13脚 输出有效(低电平有效)
DS 第14脚 串行数据输入
VCC 第16脚 电源

二、运行结果

在这里插入图片描述
在这里插入图片描述

三、部分代码


/*想要更多项目私wo!!!*/
#include "config.h"

static struct Food
{
	unsigned char x;	// 食物的横坐标
	unsigned char y;	// 食物的纵坐标
//	unsigned char yes;
}food;	// 食物结构体

struct Snake
{
	char x[SNAKE_Max_Long];
	char y[SNAKE_Max_Long];
	unsigned char Long;		// 蛇的长度
	unsigned char Life;		// 蛇的生命
//	unsigned char Score;	// 蛇的分数,本例中没使用
	unsigned char Level;	// 蛇的等级
	unsigned char Dir;		// 蛇移动方向
}snake;	// 蛇结构体

void startSnake()
{
	uchar i=0;
	initSnake();
	while(snake.Life)
	{
		changeDir(keyValue);
		
		// 蛇运行的速度,由speedLevel决定
		if(tCount >= speedLevel)
		{
			tCount=0;
			runSnake();
		}
			
		// 限定蛇活动范围,超范围就dead
		if((snake.x[0]>(WIDTH-1)) || (snake.x[0]<0) || (snake.y[0]>(LENGTH-1)) || (snake.y[0]<0))
		{
			snake.Life=0;	
			snake.Level=1;
			speedLevel=25;
			keyVal=right;	
		}
		// 蛇自杀检测
		for(i=4; i<=snake.Long; i++)
		{
			if(snake.x[i-1]==snake.x[0] && snake.y[i-1]==snake.y[0])
			{
				snake.Life=0;
				snake.Level=1;
				speedLevel=25;
				keyVal=right;	
			}
		}
		
		// 等级越高速度越快
		if(snake.Long >= SNAKE_Max_Long)
		{
			delayMs(500); // 延一下时
			initSnake();
			speedLevel-=5;
			keyVal=right;			
			if(++snake.Level > 5)
			{
				snake.Level=1;
				speedLevel=25;						
			}
			tCount=0;
		}
		drawSnake();
	}
}
Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐