单片机的俄罗斯方块游戏设计

  设计功能

(1)本设计基于STC89C52(可与STC89C51、AT89S52、AT89C52兼容使用)单片机;
(2)采用LCD12864液晶显示屏;
(3)共设有6个按键,分别为开始键、暂停键、变形键、下沉键、左键、右键;
(4)设计有0~9个关卡,达到一定分数自动升级。

原理图:

        原理图绘制软件采用AD2013。主要由51单片机作为数字钟的核心控制器,与时钟电路、复位电路构成单片机最小系统。LCD12864显示屏采用并行的控制方式与单片机连接,6个按键采用独立的方式与单片机一一连接。整个系统采用5V电源作为供电电压。下载接口为引出单片机的串口,方便板卡下载程序和调试。

其总体硬件原理图如图所示。

仿真设计

仿真软件采用Protues7.8,其仿真源文件格式为.SDN。

程序设计

程序采用C作为编程语言,使用Keil5作为编程软件,仅展示一部分;

//主函数
void main()
{
	LCD_initialize();
	LCD_clear();
	while(1)
	{
		game_start_show();
		select_speed();
		game_initialize();//调用游戏初始化函数,初始化游戏所有变量以及在液晶屏上显示基本的信息
		Tetris_main();
		game_over_show();	
	}	
}
//俄罗斯方块游戏主函数
void Tetris_main()
{
	unsigned char i;
	for(i=0;i<19;i++)
	{
		Box_Ram[i]=Box_Ram_data[i];
	};//载入游戏初始显示画面
	LCD_draw(mpic);
	game_over_flag=0;//游戏结束标志位置0表示游戏未结束
	box_build();
	box_load();
//	next_box();
	box_to_Box_Ram(s_box.x,s_box.y,s_box.box);
	box_down_reg=(20-(speed_num<<1)-1);//为了使方块一出现就能变换形状,所以需要尽快使得方块下降一行,不知道为什么最高行不能变换形状
	time0_initialize();
	while(!game_over_flag)//如果游戏结束标志位置1,表示游戏结束,打破循环,调用游戏结束画面显示函数
	{
		game_button();
	}
	EA=0;//游戏结束后关中断
}
//
//游戏初始化函数
void game_initialize()
{
	box_down_reg=0;
	next_mode=6;
	next_shape=2;
	destroy_row_num=0;
	game_over_flag=0;
	pause_game_flag=0;
	LCD_clear();
	time0_reg=0;
	display_basic();	
	LCD_display_word(score_data,24,0,3);
	LCD_display_word(speed_data,24,3,3);
	show_score_num(3,1);
	show_speed_num(13,4);
}

关注公众号-单片机实例设计,发送“俄罗斯方块”获取资料;

下载地址

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值