加入星计划,您可以享受以下权益:

  • 创作内容快速变现
  • 行业影响力扩散
  • 作品版权保护
  • 300W+ 专业用户
  • 1.5W+ 优质创作者
  • 5000+ 长期合作伙伴
立即加入

基于51单片机的贪吃蛇设计

2小时前
89
服务支持:
技术交流群

完成交易后在“购买成功”页面扫码入群,即可与技术大咖们分享疑惑和经验、收获成长和认同、领取优惠和红包等。

虚拟商品不可退

当前内容为数字版权作品,购买后不支持退换且无法转移使用。

加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论
放大
实物图
  • 方案介绍
  • 相关文件
  • 相关推荐
  • 电子产业图谱
申请入驻 产业图谱

设计要求

①制作一个的贪吃蛇游戏,系统以单片机控制器,用四个输入端表示四个控制键(上下左右)。

②游戏初始化蛇的节数,以及障碍墙壁。

③当蛇的头碰到障碍墙壁或蛇的身体时自动结束。

it D0=P2^0;
sbit D1=P2^1;
sbit D2=P2^2;
sbit D3=P2^3;
sbit KEY1=P3^5;
sbit KEY2=P3^4;
sbit KEY3=P3^3;
sbit KEY4=P3^2;

#define X1 P0
#define X2 P1

u8 Date[32]=
{
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
};//点阵屏显示数据
u8 snake_turn_point[20]={0};//存储蛇尾的转折点
u32 snake_turn=0;//相应转点为左转还是右转 0为左转1为右转
u8 snake_cd=2;//蛇的长度 初始值为2
u8 smake_head_x=10;//蛇头的x轴坐标
u8 smake_head_y=10;//蛇头的y轴坐标
u8 smake_tail_x=10;//蛇尾的x轴坐标
u8 smake_tail_y=11;//蛇尾的y轴坐标
u8 snake_fx=3;//蛇的运动方向  1:上 2:下 3:左 4:右
u8 snake_sd=10;//运动速度
u8 snake_turn_time=0;//蛇的尾巴剩余转点
u8 snake_tail_fx=3;//蛇尾运动方向
u8 food_x=5;//食物的x轴坐标
u8 food_y=5;//食物的y轴坐标
u8 food_x_next=10;//下一个食物的x轴坐标
u8 food_y_next=10;//下一个食物的y轴坐标

void Display(void);//显示函数
void InitTimer0(void);//定时器中断初始化 10ms
void Key_Scan(void);//按键扫描函数
void Write_Date(u8 x,u8 y,u8 a);//对点的写操作
void snake_move(void);//蛇的移动
void game_over(void);//游戏结束 显示完
void creat_food();//生产食物

void main(void)
{
	InitTimer0();//初始化定时器
	Write_Date(food_x,food_y,1);
	while(1)
	{
		Display();
		Key_Scan();
	}
}

void InitTimer0(void)
{
	TMOD = 0x01;
	TH0 = 0x0D8;
	TL0 = 0x0F0;
	EA = 1;
	ET0 = 1;
	TR0 = 1;
}

void Display(void)
{
	X1=0x00;	X2=0x00;	D3=0;	D2=0;	D1=0;	D0=0;	X1=Date[0];		X2=Date[1];
	X1=0x00;	X2=0x00;	D3=0;	D2=0;	D1=0;	D0=1;	X1=Date[2];		X2=Date[3];
	X1=0x00;	X2=0x00;	D3=0;	D2=0;	D1=1;	D0=0;	X1=Date[4];		X2=Date[5];
	X1=0x00;	X2=0x00;	D3=0;	D2=0;	D1=1;	D0=1;	X1=Date[6];		X2=Date[7];
	X1=0x00;	X2=0x00;	D3=0;	D2=1;	D1=0;	D0=0;	X1=Date[8];		X2=Date[9];
	X1=0x00;	X2=0x00;	D3=0;	D2=1;	D1=0;	D0=1;	X1=Date[10];	X2=Date[11];
	X1=0x00;	X2=0x00;	D3=0;	D2=1;	D1=1;	D0=0;	X1=Date[12];	X2=Date[13];
	X1=0x00;	X2=0x00;	D3=0;	D2=1;	D1=1;	D0=1;	X1=Date[14];	X2=Date[15];
	X1=0x00;	X2=0x00;	D3=1;	D2=0;	D1=0;	D0=0;	X1=Date[16];	X2=Date[17];
	X1=0x00;	X2=0x00;	D3=1;	D2=0;	D1=0;	D0=1;	X1=Date[18];	X2=Date[19];
	X1=0x00;	X2=0x00;	D3=1;	D2=0;	D1=1;	D0=0;	X1=Date[20];	X2=Date[21];
	X1=0x00;	X2=0x00;	D3=1;	D2=0;	D1=1;	D0=1;	X1=Date[22];	X2=Date[23];
	X1=0x00;	X2=0x00;	D3=1;	D2=1;	D1=0;	D0=0;	X1=Date[24];	X2=Date[25];
	X1=0x00;	X2=0x00;	D3=1;	D2=1;	D1=0;	D0=1;	X1=Date[26];	X2=Date[27];
	X1=0x00;	X2=0x00;	D3=1;	D2=1;	D1=1;	D0=0;	X1=Date[28];	X2=Date[29];
	X1=0x00;	X2=0x00;	D3=1;	D2=1;	D1=1;	D0=1;	X1=Date[30];	X2=Date[31];
}

void Key_Scan(void)
{
	static fx=3;
	if(KEY1==0)
		snake_fx=1;
	if(KEY2==0)
		snake_fx=2;
	if(KEY3==0)
		snake_fx=3;
	if(KEY4==0)
		snake_fx=4;
	
	if(fx!=snake_fx)
	{
		snake_turn_point[snake_turn_time]|=snake_fx*16;//保存蛇尾拐点方向
		if(snake_fx==1||snake_fx==2)
			snake_turn_point[snake_turn_time]+=smake_head_y;
		else if(snake_fx==3||snake_fx==4)
			snake_turn_point[snake_turn_time]+=smake_head_x; 		//保存蛇尾拐点的坐标
		snake_turn_time++;
		fx=snake_fx;
	}
}

void tail_turn()
{
	u8 i;
	for(i=0;i<snake_turn_time;i++)
	{
		snake_turn_point[i]=snake_turn_point[i+1];
	}
	snake_turn_time-=1;
}
void res_food()
{
	food_x=food_x_next;
	food_y=food_y_next;
	Write_Date(food_x,food_y,1);
}
void snake_move(void)
{
	u8 dat=0x01;
	u8 bj_get_food=0;
	if(smake_head_y==0&&snake_fx==3)
		game_over();
	if(smake_head_x==0&&snake_fx==1)
		game_over();									//判断蛇头是否碰到上、左墙壁
	
	if(snake_fx==1)
	{
		if(!((smake_head_x-1==food_x)&&(smake_head_y==food_y)))
		{
			Write_Da

资料借鉴于此纷传

  • 有需要资料的可了解一下.docx

相关推荐

电子产业图谱