• 方案介绍
    • 1.  简介
    • 2.  主要功能
    • 3.  源程序(Keil5)
    • 4.  仿真proteus8.6
    • 5.  设计报告
    • 6.  资料清单
    • 7.  资料获取链接
  • 附件下载
  • 相关推荐
申请入驻 产业图谱

基于51单片机的12864液晶贪吃蛇设计(一)!!!

04/29 08:45
964
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

单片机仿真设计合集资料获取.pdf

共1个文件

资料清单:C程序+仿真+设计报告+使用说明+元件清单+操作视频

仿真版本:Proteus8.6及以上版本

程序编译:Keil5 C51

编程语言:C语言

设计编号:【Z06】

1.  简介

  本文提出了一种基于51单片机的12864贪吃蛇设计。本系统由AT89C51单片机为控制核心,制作一个贪吃蛇游戏机,通过LCD12864显示屏为载体显示数据,并用四个输入端表示四个上下左右控制键和三个确认、返回、暂停功能键,实现地图设置、难度设置。

2.  主要功能

a.支持按键实现地图设置、难度设置。

b. 支持按键实现确认、返回、暂停。

3.  源程序(Keil5)

本设计采用keil5 C51软件(内附安装包)实现程序设计。如需用keil4打开程序,可自行通过.c和.h文件新建工程即可。

	while(1)
	{
		if(flag_exit_game==1)//如果游戏过程中按下返回键  则立即结束游戏  返回菜单
			break;
		if(flag_game_over==1)
			break;
		
		ET1=1;   //允许扫描按键	  贪吃蛇游戏难度决定蛇2次移动之间的间隔时间  也就是检测按键的时间
		tcs_key_flag=0; //允许捕获按键  在检测按键时间内  只允许生产一个拐点  即捕获到一个有效的
						//按键以后  就置一这个变量 不允许再增加拐点
		while(tcs_stop==0);
		switch(tcs_nd)
		{
			case 0:  {delay_ms(10); break;}
			case 1:  {delay_ms(50); break;}
			case 2:  {delay_ms(100); break;}
		}
		ET1=0; 

		switch(tou.direction)//这个switch用来根据蛇头的x y value值以及当前蛇头移动的方向 
							 //取出蛇头要到达的下一个点  存入check中  来判断是否撞墙 吃到食物 什么的···
		{	
			case 0: { 	
						check.x=tou.x; 
						if(tou.y==63)  
							check.y=0;
						else
							check.y=tou.y+1;
						check.value=tou.value;
						 break ;
					}//->向右y+1 其他不变

			case 1: { 					 //↓ 向下y不变
						check.y=tou.y; 
			 			if(tou.value==0x80)// value==0x80 则 x+1 value=0x01
						{
							if(tou.x==7)
								check.x=0;
							else
								check.x=tou.x+1;
							check.value=0x01;
						}
						else
						{
							check.x=tou.x;
							check.value=tou.value<<1;
						}
					    break ;
					}

			case 2: { 	
						check.x=tou.x; 
						if(tou.y==0)  
							check.y=63;
						else
							check.y=tou.y-1;
						check.value=tou.value; 
						break ;
					}//<-向左y-1 其他不变

			case 3: { 					   //↑	 向上y不变
						check.y=tou.y; 
			 			if(tou.value==0x01)// value==0x01 则 x-1 value=0x80
						{
							if(tou.x==0)
								check.x=7;
							else
								check.x=tou.x-1;
							check.value=0x80;
						}
						else
						{
							check.x=tou.x;
							check.value=tou.value>>1;
						}
					    break ;
					}	
		}			
			
		he=test_point_exist(check.x,check.y,check.value); // 检测蛇头移动的下一个点是否几经有点存在
		if(he==check.value) //如果前面的点已经存在	则可以是食物 或者是墙和蛇身
		{
			if(	(check.x==food.x) && (check.y==food.y) && (check.value==food.value) )//吃到食物
			{
				tcs_df++;
				cs1=1; cs2=0;
				write_lcd_shuzi(2,32,tcs_shuzi[tcs_df/100]       ); 			//显示分数的百位
				write_lcd_shuzi(2,40,tcs_shuzi[ (tcs_df%100)/10] );				//			十
				write_lcd_shuzi(2,48,tcs_shuzi[tcs_df%10]        );				//          个
				cs1=0; cs2=1;
				food.direction=tou.direction;//食物本没有方向 但是为了下面的语句
				tou=food; //食物就成了蛇头···蛇头的方向依然不变
				hui=wei.direction; //先记录下尾巴本来的移动方向  
				wei.direction=611;//这次行动尾巴不动  这样蛇身就自然加一了···611代表下面的尾巴不动
				do
				{
					food_produce();
					he=test_point_exist(food.x,food.y,food.value);
				}
				while(he==food.value);  
				draw_lcd_point(food.x,food.y,food.value);//上面有说过  这个是产生并显示食物
			}
			else//撞到身体或者墙
			{
				flag_game_over=1; // 游戏结束
			}
		}
		else  //什么都么有遇到 继续前进
		{
			check.direction=tou.direction;//这么做的理由同上 为了保持蛇头当前的移动方向
			tou=check;
			draw_lcd_point(tou.x,tou.y,tou.value);//画出此时的蛇头
		}

		//下面是对尾巴的操作		
		
		if (  (wei.x == queue.dat[queue.front].x) && ( wei.y==queue.dat[queue.front].y ) && ( wei.value== queue.dat[queue.front].value)  ) //如果尾巴到达拐点
		{
		 	check=queue_out(&queue); 	
			wei.direction=check.direction; //尾巴按照拐点指示的方向走
		}
		else //如果没有到达拐点 尾巴移动的方向不变
		{
				
		}						
								
		switch( wei.direction ) //这个是尾巴的移动  以及尾巴节点数据的修改
		{
			case 0:	{ wei_you(); break; }
			case 1:	{ wei_xia(); break; }										
			case 2:	{ wei_zuo(); break; }
			case 3:	{ wei_shang();	 break; }	
			case 611: { wei.direction=hui;  break;}  //这次移动 吃到实物   还原尾巴本来的移动方向
  		}						
	}	
	TR0=0;
	TR1=0;
	ET1=0;  //退出游戏时 关闭游戏过程中用到的定时器0和1  然后定时器中断也要关闭


}

4.  仿真proteus8.6

  本设计采用proteus8.6软件(内附安装包)实现仿真设计,如下图所示。proteus软件一般存在高低版本兼容问题,该仿真是通过proteus8.6导出的,所以请尽量使用proteus8.6打开文件,低于proteus8.6的版本不能够正常使用,高于proteus8.6的版本除了proteus8.8/8.9理论上可以正常使用。

仿真界面:

5.  设计报告

设计报告主要包括硬件电路、软件设计、仿真调试等等,仅供参考

6.  资料清单

设计资料主要包括C程序+仿真+设计报告+使用说明+元件清单+操作视频等。

7.  资料获取链接

百度网盘下载链接:【Z06】百度网盘下载链接

更多单片机仿真设计合集:单片机仿真设计合集

  • 单片机仿真设计合集资料获取.pdf
    下载

相关推荐