基于单片机的俄罗斯方块游戏机课程设计

合集下载

基于单片机的俄罗斯方块游戏系统的设计

基于单片机的俄罗斯方块游戏系统的设计

摘要俄罗斯方块是一款风靡全球的电视游戏机和掌上游戏机游戏,它由俄罗斯人阿列克谢·帕基特诺夫发明,故得此名。

俄罗斯方块的基本规则是移动、旋转和摆放游戏自动输出的各种方块,使之排列成完整的一行或多行并且消除得分。

由于上手简单、老少皆宜,从而家喻户晓,风靡世界。

这次设计将使用52单片机和HD61202液晶显示控制驱动器和JM12864J液晶显示器组合,来实现比较简单的俄罗斯方块设计。

此次设计初期是在keil和proteus联合仿真中进行,编程语言为51汇编,后期是进行实物焊接。

论文描述了俄罗斯方块的主要功能函数的实现。

关键词:俄罗斯方块,算法,仿真AbstractTetris is a popular television game machine and game machine game, which Alexei Pajitnov invented by Russians, it was this name. Tetris are the basic rules of movement, rotation and display the game automatically output of the box, which are arranged into a complete one or more rows and eliminate scores. Due to use simple, ages, thus make known to every family, swept the world.Based on single chip computer of the curriculum design of opportunity, I will use the 51 single-chip microcomputer and HD61202 LCD control driver and JM12864J liquid crystal display combination, to carry out a more simple Russian square design.This design is in early keil and proteus joint simulation, programming language for 51 assembly, later is welding material.The paper describes the main functions of the Russian box function of the realization of.Keywords:Russian square, Algorithm, Simulation目录摘要 (1)Abstract (2)目录 (1)引言 (3)1整体设计方案 (4)1.1系统的核心部分单片机 (4)1.2液晶显示模块 (8)2系统程序的设计 (16)2.1俄罗斯方块驱动流程图 (16)2.2俄罗斯方块所有绘图工作流程图 (17)2.3俄罗斯方块中按下键的流程图 (18)2.4俄罗斯方块所有绘图工作流程图 (19)3系统仿真 (20)3.1 Proteus软件介绍 (20)3.2 Keil软件介绍 (20)3.3俄罗斯方块系统PROTUES仿真 (21)结论 (24)参考文献 (25)附录A 电路原理图 (26)附录B 主要程序 (28)附录C 英文资料和中文翻译 (45)结束语 (1)引言游戏是人们活动中一项非常重要的内容,有人认为如果哪一天人类对所有的游戏都失去兴趣,恐怕世界的末日就要到了。

基于单片机实现的俄罗斯方块游戏任务书

基于单片机实现的俄罗斯方块游戏任务书
[9]陈立伟,张克非,黎秀红著. 精通JAVA手机游戏与应用程序设计[M].北京:中国青年出版社, 2005-5.
[10]谭浩强. C程序设计.[M] 北京:清华大学出版社,2003
毕业设计(论文)工作进度计划:
周 次
工作内容
(08—09第一学期)
(08—09第二学期)
第1周
第2-4周
第5-8周
第9-10周
为使操作者操作方便,在PC机上用Proteus、Keil、Protel DXP安装程序,该软件的安装平台是XP系统。
下位机的核心控制芯片采用AT89S52。
二、毕业设计的主要技术指标:
1.电源电压+5V
2.串口线要求1.5M
3.电脑系统为XP系统,最低256M内存
三、工艺制作任务
a)设计并焊接电路
b)调试电路
拟订题目,完成开题,了制作毕业设计、实物调试硬件
软件、测试毕业设计作品
完成毕业论文
教研室(学科组)主任签字:
[3]杨元强。酷比杯获奖作品选登《LEGO 俄罗斯》[J]。“酷比杯”游戏策划大赛,2007.
[4] 周润景著.Proteus在MCS-51&ARM7系统中的应用百例[M].北京:电子工业出版社,2006.
[5] 游安弼, 李玉岐. 基于JavaBean组件模型的俄罗斯方块[R]. 北京:全国第四届Java
毕业设计(论文)任务书
2009年12月18日
题目
(包括副标题)
基于单片机实现的俄罗斯方块游戏
教师姓名
系别
职称
学生姓名
班级
学号
课题成果形式
论文■设计说明书□实物■软件□其它□
1.毕业设计(论文)课题任务的内容和要求(如原始数据、技术要求、工作要求等):

俄罗斯方块单片机课程设计作品说明书

俄罗斯方块单片机课程设计作品说明书

单片机课程实训作品说明书姓名:武跃忠完成时间:2016年7月4日一、作品说明介绍1.作品名称:掌上游戏机(俄罗斯方块)2.作品实现功能:a)按下、左、右键控制图形改变位置;b)图形在落到底部和障碍物上时,把图形变为障碍物;c)复位键使游戏重新开始;d)暂停/继续键可以暂停、继续游戏3.选择目的:实践单片机课程所学到的知识。

二、作品操作介绍1.作品外观图⑮⑭①点阵屏:显示障碍物以及图形②零欧电阻,用作飞线③ 16个1K欧电阻,用来限制电流大小④ STC12C5A60S2单片机,用来烧录烧录主控程序,是整个作品的控制器⑤ 74LS154N芯片(4-16)译码器,用来产生列选信号⑥电源指示灯:通电时点亮⑦微动开关1:向上的按键,用于改变图形⑧排针:用于连接电源正负极以及RXD和TXD⑨ 10K欧电阻,用来限制通过电源指示灯的电流⑩微动开关2:功能按键,用于游戏的复位操作⑪自锁开关:实现整体的电源总控制(断负)⑫微动开关3:功能按键,用于游戏的暂停/继续⑬微动开关4:向右的按键,用于图形右移⑭微动开关5:向下的按键,用于图形下移⑮微动开关6:向左的按键,用于图形左移2.作品功能介绍及操作说明a)给游戏机上电①将电源正极接在排针处标有VCC的位置②将电源负极接在排针处标有GND的位置③按下自锁开关完成上电b)让图形移动或改变图形朝向①按向上键:改变图形的朝向②按向下键:让图形瞬间落到可以下落的最下方③按向左键:图形向左移动一位④按向右键:图形向右移动一位c)游戏暂停/继续、复位①按暂停/继续键:游戏暂停/继续②按复位键:游戏复位,重新开始三、作品制作说明1.电路原理图2.3.PCBa)主板正面图(见附录1)b)主板F5图(见附录2)c)主板F6图(见附录3)d)屏幕正面图(见附录4)e)屏幕F5图(见附录5)f)屏幕F6图(见附录6)四、产品控制程序/*************************************************************** *作品名称:掌上游戏机(俄罗斯方块)制作时间:2016年6月21日程序修改时间:2016年6月23日程序基本框架完善2016年6月25日完成图形生成,简单移动2016年6月29日完善图形移动函数,添加图形生成数量2016年7月1日排除致命BUG2016年7月2日重新整理图形生成逻辑,重写图形生成函数2016年7月3日写出图形变形函数,游戏载入动画2016年7月4日排除已知BUG,完善游戏整体运行逻辑*************************************************************** **/#include<stc12c5a60s2.h>#include<stdlib.h>sbit key_left=P3^4; //方向按键左sbit key_right=P3^7; //方向按键右sbit key_up=P3^5; //方向按键上sbit key_down=P3^6; //方向按键下sbit key_start=P3^3; //功能按键暂停,开始sbit key_reset=P3^2; //功能按键复位unsigned char shape[16][2]; //图形落地之前unsigned char map[16][2]; //障碍物图形落地之后//line用来在显示时候标记列数,shapeIndex用来记录当前形状,shapex、shapey用来记录图形所在位置unsigned char line,shapeIndex,shapex,shapey; unsigned char code fk[2][2]={{1,1}, //方块{1,1}};unsigned char code sx1[4][4]={{0,1,0,0}, //竖线{0,1,0,0},{0,1,0,0},{0,1,0,0}};unsigned char code sx2[4][4]={{0,0,0,0},{0,0,0,0},{1,1,1,1},{0,0,0,0}};unsigned char code zl1[3][3]={{1,0,0}, //正L形{1,0,0},{1,1,0}};unsigned char code zl2[3][3]={{0,0,1},{1,1,1},{0,0,0}};unsigned char code zl3[3][3]={{0,1,1},{0,0,1},{0,0,1}};unsigned char code zl4[3][3]={{1,1,1},{1,0,0},{0,0,0}};unsigned char code fl1[3][3]={{0,1,0}, //反L形{0,1,0},{1,1,0}};unsigned char code fl2[3][3]={{1,1,1},{0,0,1},{0,0,0}};unsigned char code fl3[3][3]={{0,1,1},{0,1,0},{0,1,0}};unsigned char code fl4[3][3]={{1,0,0},{1,1,1},{0,0,0}};unsigned char code zz1[3][3]={{1,0,0}, //正Z形{1,1,0},{0,1,0}};unsigned char code zz2[3][3]={{0,1,1},{1,1,0},{0,0,0}};unsigned char code fz1[3][3]={{0,1,0}, //反Z形{1,1,0},{1,0,0}};unsigned char code fz2[3][3]={{1,1,0},{0,1,1},{0,0,0}};unsigned char code txz1[3][3]={{0,1,0}, //T形{1,1,1},{0,0,0}};unsigned char code txz2[3][3]={{0,0,1},{0,1,1},{0,0,1}};unsigned char code txz3[3][3]={{1,1,1},{0,1,0},{0,0,0}};unsigned char code txz4[3][3]={{1,0,0},{1,1,0},{1,0,0}};bit game_reset; //用来标记游戏是否被重置void shapeLeft(bit flag); //声明图形左移的函数void delay(unsigned int i) //软件延时函数{unsigned int j;while(i--)for(j=600;j>0;j--);}void mapClear(void) //清除背景数组函数{unsigned int i,j;for(i=0;i<16;i++)for(j=0;j<2;j++)map[i][j]=0;}void shapeClear(void) //清除图形数组函数{unsigned int i,j;for(i=0;i<16;i++)for(j=0;j<2;j++)shape[i][j]=0;}void shapeToMap(void) //把图形变为背景的函数{unsigned int i,j;for(i=0;i<16;i++)for(j=0;j<2;j++)map[i][j]|=shape[i][j];}void txToShape() //把图形载入到shape数组{//i,j为循环变量,t,k为临时变量,其他为指向各种大小的二位数组的指针unsigned char i,j,t,k,(*tx2)[2],(*tx3)[3],(*tx4)[4];shapeClear();switch(shapeIndex) //根据需要的图形的标号,找到对应的图形数组{case 0:tx2=fk;k=2;break;case 1:tx4=sx1;k=4;break;case 2:tx4=sx2;k=4;break;case 3:tx3=zl1;k=3;break;case 4:tx3=zl2;k=3;break;case 5:tx3=zl3;k=3;break;case 6:tx3=zl4;k=3;break;case 7:tx3=fl1;break; case 8:tx3=fl2;k=3;break; case 9:tx3=fl3;k=3;break; case 10:tx3=fl4;k=3;break; case 11:tx3=zz1;k=3;break; case 12:tx3=zz2;k=3;break; case 13:tx3=fz1;k=3;break; case 14:tx3=fz2;k=3;break; case 15:tx3=txz1;k=3;break; case 16:tx3=txz2;k=3;break; case 17:tx3=txz3;k=3;break; case 18:tx3=txz4;break;}switch(k) //把找到的图形数组放入shape数组中{case 2:for(i=0;i<k;i++){for(j=0;j<k;j++){if(tx2[i][j]==1){if(i+shapex>7){t=(0x01<<(i+shapex-8));shape[15-shapey-j+1][1]|=t;}else{t=(0x01<<(i+shapex));shape[15-shapey-j+1][0]|=t;}}}}break;case 3:for(i=0;i<k;i++){for(j=0;j<k;j++){if(tx3[i][j]==1){if(i+shapex>7){t=(0x01<<(i+shapex-8));shape[15-shapey-j+1][1]|=t;}else{t=(0x01<<(i+shapex));shape[15-shapey-j+1][0]|=t;}}}break;case 4:for(i=0;i<k;i++){for(j=0;j<k;j++){if(tx4[i][j]==1){if(i+shapex>7){t=(0x01<<(i+shapex-8));shape[15-shapey-j+1][1]|=t;}else{t=(0x01<<(i+shapex));shape[15-shapey-j+1][0]|=t;}}}}break;}}void shapeCreat(void) //创建一个新图形的函数{shapex=0;shapey=7;shapeIndex=rand()%19;txToShape();}bit shapeAndMap() //检测是否与障碍物重叠{unsigned char i,j,t;for(i=0;i<16;i++)for(j=0;j<2;j++){t=map[i][j]&shape[i][j];if(t>0)return 0;return 1;}bit shapeDown(void) //图形下移函数{unsigned char i,t;bit flag;flag=1;for(i=0;i<16;i++) //检测是否到底部{if(shape[i][1]>=0x80){shapeToMap();flag=0;break;}}if(flag){for(i=0;i<16;i++) //图形下移{t=(shape[i][0]>=0x80)?1:0;shape[i][0]<<=1;shape[i][1]<<=1;shape[i][1]|=t;}shapex++;flag=shapeAndMap();if(!flag) //重叠则撤销下移操作{for(i=0;i<16;i++){t=(shape[i][1]%2==1)?0x80:0;shape[i][0]>>=1;shape[i][1]>>=1;shape[i][0]|=t;}shapeToMap(); //将图形转换为障碍物}}return flag;}/****************************************图形左右移函数,参数flag表示移动模式为0时无条件移动,为1时会检测是否可移动****************************************/void shapeRight(bit flag) //图形右移函数{unsigned char i,t;if(shape[0][0]==0&&shape[0][1]==0) //没移动到墙体则右移{for(i=0;i<15;i++){shape[i][0]=shape[i+1][0];shape[i][1]=shape[i+1][1];}shape[15][0]=0;shape[15][1]=0;shapey++;}else{flag=0;}if(flag){for(i=0;i<16;i++) //检测移动是否合法,非法则撤销{t=shape[i][0]&map[i][0];if(t!=0x00){shapeLeft(0);break;}t=shape[i][1]&map[i][1];if(t!=0x00){shapeLeft(0);break;}}}}void shapeLeft(bit flag){unsigned char i,t;if(shape[15][0]==0&&shape[15][1]==0) //没移动到墙体则左移{for(i=15;i>0;i--){shape[i][0]=shape[i-1][0];shape[i][1]=shape[i-1][1];}shape[0][0]=0;shape[0][1]=0;shapey--;}elseflag=0;if(flag){for(i=0;i<16;i++) //检测移动是否合法,非法则撤销{t=shape[i][0]&map[i][0];if(t!=0x00){shapeRight(0);break;}t=shape[i][1]&map[i][1];if(t!=0x00){shapeRight(0);break;}}}}void shapeChange(unsigned char oldShape){bit flag; //标记图形是否在合理范围//i,j为循环变量,k为临时变量,存储需要数组的大小,其他为指向各种大小的数组的指针unsigned char i,j,k,(*tx2)[2],(*tx3)[3],(*tx4)[4];switch(shapeIndex) //根据图形当前状态得出图形下一个状态{case 0:return;break;case 1:shapeIndex=2;tx4=sx2;k=4;break;case 2:shapeIndex=1;tx4=sx1;k=4;break;case 3:shapeIndex=4;tx3=zl2;k=3;break;case 4:shapeIndex=5;tx3=zl3;k=3;break;case 5:shapeIndex=6;tx3=zl4;k=3;break;case 6:shapeIndex=3;tx3=zl1;k=3;break;case 7:shapeIndex=8;tx3=fl2;k=3;break;case 8:shapeIndex=9;tx3=fl3;k=3;break;case 9:shapeIndex=10;tx3=fl4;k=3;break;case 10:shapeIndex=7;tx3=fl1;k=3;break;case 11:shapeIndex=12;tx3=zz2;k=3;break;case 12:shapeIndex=11;tx3=zz1;k=3;break;case 13:shapeIndex=14;tx3=fz2;k=3;break;case 14:shapeIndex=13;tx3=fz1;k=3;break;case 15:shapeIndex=16;tx3=txz2;k=3;break;case 16:shapeIndex=17;tx3=txz3;k=3;break;case 17:shapeIndex=18;tx3=txz4;k=3;break;case 18:shapeIndex=15;tx3=txz1;k=3;break;}flag=1;for(i=0;i<k&&flag;i++) //判断变形后图形有没有移动出规定范围{for(j=0;j<k&&flag;j++){switch(k){case 2:if((shapey==0||shapey+j>16)&&tx2[i][j]==1)flag=0;break;case 3:if((shapey==0||shapey+j>16)&&tx3[i][j]==1)flag=0;break;case 4:if((shapey==0||shapey+j>16)&&tx4[i][j]==1)flag=0;break;}}}if(flag)txToShape(); //如果没有移动出范围则变形if(!shapeAndMap()) //如果变形后与障碍重叠则撤销操作{shapeIndex=oldShape;txToShape();}}void deleteLine(void) //删除某行函数{unsigned char t,i,j,k,t1;for(j=0;j<2;j++){for(k=0;k<8;k++){for(i=0;i<16;i++) //判断某行是否全为1{t=0x80>>k;t&=map[i][j];if(t!=0x80>>k)break;}if(i==16) //全为1则消除{for(i=0;i<16;i++) //地图下移{if(j){t1=~(0xff>>k); //保存不需要消除的行t1&=map[i][1];t=(map[i][0]>=0x80)?1:0;map[i][0]<<=1; //障碍全体下移map[i][1]<<=1;map[i][1]|=t;t=0xff>>k; //把不需要消除的行放回原处map[i][1]&=t;map[i][1]|=t1;}else{t1=~(0xff>>k); //保存不需要消除的行t1&=map[i][0];t=(map[i][0]>=0x80)?1:0;//上部障碍下移map[i][0]<<=1;t=0xff>>k; //把不需要消除的行放回原处map[i][0]&=t;map[i][0]|=t1;}}}}}}void shapeMoveDown(void) //图形直接移动到底部{while(shapeDown());}void shapeMove(void) //图形移动的主控函数{unsigned char i;bit isStart; //用来标记游戏是否在运行1为在运行0为暂停isStart=1;do{for(i=0;i<70;i++) //延时且检测按键状态{if(!key_right&&isStart) //方向右键{delay(20);if(!key_right)shapeRight(1);while(!key_right);delay(20);}if(!key_left&&isStart) //方向左键{delay(20);if(!key_left)shapeLeft(1);while(!key_left);delay(20);}if(!key_down&&isStart) //方向下键{delay(20);if(!key_down)shapeMoveDown();while(!key_down);delay(20);}if(!key_up&&isStart) //方向上键{delay(20);if(!key_up)shapeChange(shapeIndex);while(!key_up);delay(20);}if(!key_start) //功能键暂停继续{delay(20);if(!key_start)isStart=~isStart;while(!key_start);delay(20);}if(!key_reset) //功能键复位{delay(20);if(!key_reset)game_reset=1;while(!key_reset);delay(20);if(game_reset)return;}if(!isStart)i--;delay(10);}}while(shapeDown());deleteLine();deleteLine();deleteLine();deleteLine();}bit gameOver(void) //判断游戏是否结束{unsigned int i;bit game_over;game_over=0;for(i=0;i<16;i++){if(map[i][0]%2==1) //如果顶端有障碍则游戏结束{game_over=1;break;}}return game_over;}void init(void) //初始化函数{P0M1=0x00; //设置IO口为强推模式P0M0=0xff;P2M1=0x00;P2M0=0xff;TMOD=0X01; //开启定时计数器EA=1;ET0=1;TH0=(65536-1000)/256;TL0=(65536-1000)%256;TR0=1;mapClear(); //初始化地图数组shapeClear(); //初始化图形数组game_reset=0; //初始化游戏结束标志}void loadGame() //游戏载入动画{unsigned char i;for(i=0;i<16;i++){if(i<8){map[i][0]=map[i][1]=0xff;map[15-i][0]=map[15-i][1]=0xff;delay(50);}else{map[i-8][0]=map[i-8][1]=0x00;map[15-(i-8)][0]=map[15-(i-8)][1]=0x00;delay(50);}}mapClear();delay(500);}void main(void){ready: init();loadGame();while(1){if(!gameOver()){shapeCreat();shapeMove();}if(!key_reset){delay(20);if(!key_reset)game_reset=1;while(!key_reset);delay(20);}if(game_reset)goto ready;}}void display(void) interrupt 1 //图形显示函数{TR0=0;TH0=(65536-1000)/256;TL0=(65536-1000)%256;P1=line;P2=shape[line][0]|map[line][0];P0=shape[line][1]|map[line][1];line++;if(line==16)line=0;TR0=1;}附录1附录3附录4附录6。

单片机俄罗斯方块设计 单片机俄罗斯方块设计

单片机俄罗斯方块设计 单片机俄罗斯方块设计

题目:[单片机俄罗斯方块设计]摘要随着社会的不断的发展和进步,人们对娱乐产品的关注在不断的增加,特别是电子游戏产品在我们的生活中占据了很重要的地位。

俄罗斯方块游戏是一款风靡全球的经典游戏。

这款游戏之所以叫做俄罗斯方块,是因为发明这款游戏的人是俄罗斯人。

本次为了回顾经典设计了一款基于单片机的俄罗斯方块游戏机。

本次设计了一款基于单片机的俄罗斯方块游戏机,该游戏机可以丰富我们的业余生活。

在硬件设计上该游戏机以STC89C52单片机为基础、使用LCD12864图形液晶可以显示游戏的界面、通过按键实现游戏机的按钮的功能、并具有蜂鸣器可以实现声音提示的功能。

在软件设计上,使用C语言进行了俄罗斯方块游戏的控制程序的编写,并在keil软件上进行了调试。

最后在Proteus仿真软件上对俄罗斯方块游戏的功能进行了仿真,并焊接了实物电路板。

关键词:STC89C52单片机;俄罗斯方块;游戏机;LCD12864液晶AbstractWith the continuous development and progress of society, people pay more and more attention to entertainment products, especially video game products play a very important role in our life. The Tetris game is a classic game that is popular all over the world. The game is called the Tetris, because the people who invented the game were Russian. This time in order to review the classic design of a single chip based Tetris block game machine.The design of a single chip computer based Tetris game machine, which can enrich our amateur life. On the hardware design, the game machine is based on STC89C52 microcontroller, and it can display the interface of the game by using LCD12864 graphic LCD, realize the button function of the game machine by button, and has the function of voice prompt by buzzer. In the software design, the control program of Tetris game is written in C language and debugged on the keil software. Finally, the function of the Tetris game is simulated on the Proteus simulation software, and the physical circuit board is welded.Keywords:STC89C52 singlechip;Tetris block;game machine;LCD12864 liquid crystal目录摘要 (I)Abstract........................................................... I I 第1章绪论.. (1)1.1课题研究背景和意义 (1)1.2俄罗斯方块的发展状况及趋势 (1)1.3课题研究的主要内容 (1)1.4课题研究的主要内容 (2)第2章系统整体方案设计 (4)2.1系统的功能要求 (4)2.2系统总体方案框图设计 (4)2.3单片机模块的选择 (5)2.4液晶显示模块的选择 (6)2.5按键电路的选择 (7)第3章系统整体硬件设计 (9)3.1单片机电路设计 (9)3.1.1STC89C52单片机介绍 (9)3.1.2晶振电路设计 (10)3.1.3复位电路设计 (10)3.1.4单片机最小系统电路设计 (11)3.2 LCD12864液晶显示电路 (11)3.2.1点阵LCD的显示原理 (11)3.2.2LCD12864液晶的硬件连接 (12)3.3按键控制电路 (12)3.4声音提示电路设计 (13)3.5电源电路 (13)第4章系统软件设计 (15)4.1程语言的选择 (15)4.2软件介绍和工程建立 (15)4.3俄罗斯方块流程图设计 (16)4.3.1主程序流程图 (16)4.3.2游戏外观显示流程图 (18)4.3.3俄罗斯方块向左/右移动工作流程图 (19)4.3.4俄罗斯方块中按下键的流程图 (20)第5章系统的调试与制作 (21)5.1 KEIL软件介绍 (21)5.2程序调试 (21)5.3 proteus仿真步骤 (22)5.4实物综合调试 (23)结论 (26)参考文献 (27)附录 (28)致谢.............................................. 错误!未定义书签。

基于51单片机俄罗斯方块程序设计

基于51单片机俄罗斯方块程序设计

基于51单片机俄罗斯方块游戏设计作者:左厚臣前言闲得无事,想用单片机和LCD12864写一个俄罗斯方块游戏,培养培养兴趣,丰富一下业余生活,同时也熟练熟练单片机应用。

然后整理一下过程,本文没有什么专业的流程图,系统框图,随手画的。

希望各位大神勿喷,本菜鸟就献丑了。

关键字:51单片机LCD12864 俄罗斯方块游戏设计一、实物写真1、先展示一下实物效果呗,看能不能吸引到各位大神的眼球!!!!2、单片机选型IO口占用:7个程序存储器占用:6459Byte内部RAM:117.0Byte内部扩展RAM:1016ByteFosc = 24Mhz(也可选择12Mhz)中断使用状况:16位定时器溢出中断1个手头有一块STC12C5A60S2 51系列单片机,本实验也采用的此款单片机,或许有大神能用很节省资源的方法写出这款游戏,本菜鸟甘拜下风。

二、游戏算法整个游戏的算法也就是这样子的吧!下面就对每个步骤进说明吧!三、算法说明算法就捡重点的说吧,省得各位大神都闲啰嗦。

1、当前随机方块获取和下一回合游戏方块生成并显示此步骤拆解成如下流程图所示:(1)随机数生成51单片机需要调用库函数来产生随机数,如下:#include <stdlib.h>//调用库函数的头文件函数rand ()会生成一个int型的随机数,int型变量范围为-32768~32767占用2 字节。

我们使用时其实是可以把它当做一个unsigned int型变量的,取值范围0-65535 这个应该是很好理解的。

但是如果我们需要一个0-7的随机数怎么处理呢,没关系有办法,程序如下:u8 Random(u8 max){u16 temp;u8 a;max = max +1;temp=rand();//获取随机种子a = temp%max;return a;}其实也就是把得到随机数与想要得到数范围的最大数求余运算就可以了,即:a = temp%max;我们的游戏方块可以描述成2个要素:A、形状比如说形状有:■■■■■■■■■等,可用0-n来表示B、姿态比如说形状■■■姿态有4种如下:■■■■■■■■■■■■它们从左往右看可以看出规律分别旋转了0°,90°,180°,270°,也分别相对旋转了90°,可以用0-3来表示。

《基于8052单片机和8X16点阵屏俄罗斯方块游戏板》开发介绍

《基于8052单片机和8X16点阵屏俄罗斯方块游戏板》开发介绍

Step 3.C程序模块简要说明
/*************************************全局变量声明***************************************/ char y;//方块位置属性:底部下落的高度,y=0时:刚刚出现,y=15时:下落到屏幕最底部 char shapenum;//方块形状属性:从0到18 int left; //方块位置属性:方块偏离居中位置的格数,不同的方块left值的上限不同 int mark; //玩家分数变量 int speed; //方块下落速度变量 int initialspeed;//方块下落的初始速度 int systemspeed;//系统下落速度,此值会随着玩家分数的增加而减小,相应的下落速度会增大 int fastspeed;//当用户按下down键时,方块下落速度为此值 int k;//一个全局循环变量,“帧数”变量 int startcontrol=1;//开始画面状态指示变量,为1时说明程序进入开机欢迎界面 int suspendcontrol=0;//游戏暂停与游戏继续画面状态指示变量,为1说明处在暂停界面。 int randnum;//随机数变量,用于产生随机方块 /****************************************************************************************/
信号源:由译码器提供16行扫描信号,由锁存器提供8位 显示信号和驱动电流。 功能:提供8×16个像素点的显示屏,为游戏提供必要的 图形显示模块。
Step 1.硬件构成及功能简介 3.4-to-16 Line Decoder
MM74HC154 关键参数
真值表 引脚图

基于单片机的俄罗斯方块游戏

基于单片机的俄罗斯方块游戏
实际运行表明,该设计可以实现基本的游戏功能,达到游戏的目的。
【关键词】12C5A60SR;LCD液晶;C语言
Tetris game based on single chip microcomputer
Abstract
Tetris is one of the most classic electronic game, it had caused a sensation is really can not be underestimated. This design is the use of C programming language based on 12C5A60SR microcontroller, design the physical circuit diagrams to model the Tetris game. The game needs to use the keys to control block movement, game player can be 90 degrees rotate, by a lattice units moving boxes around, when the region in a row are filled by the box, the guild to disappear and score, the number of columns, and eliminate scores more; when the box at the top of pile to areas not to eliminate, the end of the game.
The actual operation shows that, the design can achieve the basic game functions, achieve the goal of the game.

基于单片机俄罗斯方块游戏设计报告

基于单片机俄罗斯方块游戏设计报告

基于单片机俄罗斯方块游戏设计报告一、研究意义俄罗斯方块是一款风靡全球的电视游戏机和掌上游戏机游戏,作为最经典的游戏之一,它曾造成的轰动与经济价值可以说是游戏史上的一件大事。

这款游戏最初是由苏联的游戏制作人 Alex Pajitnov 制作的,它看似简单但却变化无穷,令人上瘾。

相信大多数用户都还记得为它痴迷得茶不思饭不想的那个俄罗斯方块时代。

虽然用单片机来设计一个简单的俄罗斯方块游戏程序似乎有点大材小用了,但这仅仅是一个单片机在嵌入式游戏方面的简单应用,正因为他的前景无可预计,所以才有这个设计,此次设计仅仅是为了举一个单片机在游戏上应用的一个简单例子,他可以很好的说明单片机功能的强大,更高的可控性和高集成度的好处,因此它可以在电子游戏方面成为一个不可计量的明日之星。

二、研究内容本设计要实现的基本功能是:应用按键来控制方块的变换与移动;消除一行并计分;消除多行额外奖励记分,方块堆满时结束游戏等俄罗斯方块的基本功能。

单片机在手持娱乐设备上的应用具有非常大的潜力,它能将其带入到一个新的阶段。

为了解决外部电路图,必须充分了解所用液晶的显示方法和单片机的外部接口功能,和所需要处理的逻辑关系;还要理解LCD液晶的控制原理,来通过数据端口和控制端口来实现画面在液晶上面的显示。

仿真图如下:三、系统程序设计1)俄罗斯方块驱动流程图:2)俄罗斯方块所有绘图工作流程图:3)俄罗斯方块中按下键的流程图:结束4)俄罗斯方块所有绘图工作流程图:四、分析及结论本文对单片机制作的俄罗斯方块游戏的运行原理进行了分析,全面、详细地阐述了俄罗斯方块游戏的设计过程。

本游戏机已经达到了掌上娱乐的要求,但在设计上还留有进一步改善的余地,如可以美化游戏界面、加入背景和动作音乐、力回馈系统等。

毕业设计的整个开发过程是曲折的,首先在硬件设计上,由于开始对LCD液晶屏不熟悉,加之其程序量较多,所以,在设计的过程中,不免有些困难,通过我多方面的查找资料,并不断的向老师和同学请教,结合网络资源,最终找出比较完善的方案,在理论上能够实现功能要求。

基于单片机实现的俄罗斯方块游戏

基于单片机实现的俄罗斯方块游戏

基于单片机实现的俄罗斯方块游戏俄罗斯方块游戏是一款经典的益智游戏,其简单的操作和不断增加的难度吸引了许多玩家。

在本文中,我们将介绍如何使用单片机实现一个简单的俄罗斯方块游戏。

为了实现这个项目,我们需要以下材料:1. 单片机:例如STM32F103C8T6或Arduino UNO;2.LCD显示屏:用于显示游戏界面;3.按键:用于控制方块的移动和旋转;4.蜂鸣器:用于播放游戏音效。

首先,我们需要连接LCD显示屏和单片机。

根据LCD显示屏和单片机的引脚定义,将它们正确地连接起来。

接下来,我们需要编写单片机的程序。

首先,我们需要初始化LCD显示屏和按键等外设。

接下来,我们需要实现方块的绘制和移动功能。

为了实现这些功能,我们需要使用几个基本的数据结构,例如数组和变量来表示方块的位置和状态。

我们可以使用一个二维数组来表示游戏区域。

每个单元格可以是一个数字,表示该位置有方块或者空白。

使用一个变量来表示当前方块的位置和状态,包括方块的类型、位置和旋转角度。

游戏的逻辑如下:首先,我们需要生成一个新的方块,并将其放置在游戏区域的顶部。

接下来,玩家可以使用按键来控制方块的移动和旋转。

当方块到达底部或者无法继续移动时,它将固定在游戏区域中,并生成一个新的方块。

玩家可以通过移动和旋转方块来填满游戏区域的行,当一行填满时,它将被清除,并且玩家将得分。

游戏的目标是尽可能地填满更多的行,得到更高的分数。

在我们的程序中,我们需要实现方块的绘制和移动功能。

我们可以使用LCD显示屏来绘制方块,使用按键来控制方块的移动和旋转。

在每次移动方块之后,我们需要检查游戏区域是否存在被填满的行,并进行相应的清除和得分操作。

另外,我们可以在游戏中加入一些音效,例如当方块固定在游戏区域中或者当一行被清除时,播放相应的音效。

我们可以使用蜂鸣器来实现这些音效。

在编写完程序后,我们可以将程序烧录到单片机中,并将LCD显示屏和按键等外设连接好。

最后,我们可以开始游戏了!。

基于单片机的俄罗斯方块游戏系统的设计

基于单片机的俄罗斯方块游戏系统的设计

基于单片机的俄罗斯方块游戏系统的设计概述:俄罗斯方块是一款经典的益智游戏,玩家需要通过控制不同形状的方块,使其在游戏区域内堆叠成完整的水平行,一旦一行被填满,就会被消除,并获得分数。

本文将介绍一种基于单片机的俄罗斯方块游戏系统的设计方案。

硬件设计:1.单片机选择:选择合适的单片机作为游戏系统的核心控制器。

可以选用8051、STM32等单片机进行设计,并根据具体需求选择相应的型号。

2.显示屏幕:使用LCD显示屏或OLED屏幕作为游戏界面的显示设备。

屏幕大小可以根据实际需求确定,一般选择2.3英寸至3.5英寸之间的屏幕尺寸。

3.控制按钮:设计合适的按键布局,包括方向控制键(上、下、左、右)、旋转键和暂停键等。

4.音频装置:可以选择蜂鸣器或扬声器作为游戏中的音效设备,用于播放游戏中的音效和音乐。

软件设计:1.初始化设置:系统上电后,进行相关的初始化设置,包括显示屏的初始化、按键的设置、计分初始化等。

2.游戏界面设计:设计游戏界面,包括显示下一个方块、显示当前游戏区域、显示计分、显示游戏状态等。

3.方块的生成和掉落:设计方块的生成算法,并通过时间控制方块的自动下落。

4.方块的移动和旋转:根据玩家的控制信号,移动或旋转当前方块的位置。

设计合适的算法,判断玩家的操作是否合法。

5.碰撞检测:使用适当的算法,实现方块与游戏区域、已落下的方块之间的碰撞检测,判断方块是否可以继续下落或进行旋转。

6.行消除:判断游戏区域的每一行是否被填满,如果是,则将该行消除,并计分。

7.游戏结束判定:当方块堆叠到游戏区域的顶部时,游戏结束。

停止方块的下落,并显示游戏结束信息。

8.游戏暂停和继续:设计游戏暂停和继续的功能,玩家可以通过按下暂停键暂停游戏,并通过再次按下继续键继续游戏。

9.音效和音乐播放:设计合适的算法,实现游戏中的音效和音乐的播放功能。

总结:以上介绍了基于单片机的俄罗斯方块游戏系统的设计方案,包括硬件设计和软件设计两个方面。

(完整word版)基于单片机的俄罗斯方块游戏机课程设计

(完整word版)基于单片机的俄罗斯方块游戏机课程设计
手动按钮复位需要人为在复位输入端RST上加入高电平(图1)。一般采用的办法是在RST端和正电源Vcc之间接一个按钮。当人为按下按钮时,则Vcc的+5V电平就会直接加到RST端。手动按钮复位的电路如所示。由于人的动作再快也会使按钮保持接通达数十毫秒,所以,完全能够满足复位的时间要求.复位电路连接如图所示:
RST
复位输入。当振荡器工作时,RST引脚出现两个机器周期以上高电平将使单片机复位。
ALE/PROG
当访问外部程序存储器或数据存储器时,ALE(地址锁存允许)输出脉冲用于锁存地址的低8位字节。一般情况下,ALE仍以时钟振荡频率的1/6输出固定的脉冲信号,因此它可对外输出时钟或用于定时目的。要注意的是:每当访问外部数据存储器时将跳过一个ALE脉冲.对Flash存储器编程期间,该引脚还用于输入编程脉冲(PROG)。如有必要,可通过对特殊功能寄存器(SFR)区中的8EH单元的D0位置位,可禁止ALE操作。该位置位后,只有一条MOVX和MOVC指令才能将ALE激活。此外,该引脚会被微弱拉高,单片机执行外部程序时,应设置ALE禁止位无效。
P2口
P2是一个带有内部上拉电阻的8位双向I/O口,P2的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路.对端口P2写"1",通过内部的上拉电阻把端口拉到高电平,此时可作输入口,作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(IIL)。在访问外部程序存储器或16位地数据存储器(例如执行MOVX@DPTR指令)时,P2口送出高8位地址数据。在访问8位地址的外部数据存储器(如执行MOVX@RI指令)时,P2口输出P2锁存器的内容。Flash编程或校验时,P2亦接收高位地址和一些控制信号.
P3口
P3口是一组带有内部上拉电阻的8位双向I/O口。P3口输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。对P3口写入”1”时,它们被内部上拉电阻拉高并可作为输入端口。此时,被外部拉低的P3口将用上拉电阻输出电流(IIL)。P3口除了作为一般的I/O口线外,更重要的用途是它的第二功能P3口还接收一些用于Flash闪速存储器编程和程序校验的控制信号。

大学单片机毕业设计课程设计 - 俄罗斯方块

大学单片机毕业设计课程设计 - 俄罗斯方块

信息与电子工程学院题目:俄罗斯方块班级: 12应用电子技术3班材料包括仿真图、PCB、软件、制作图片等学习可留言时间: 2014-6-25目录一摘要 (1)二设计内容与要求 (1)2.1 内容 (1)2.2 要求 (1)三硬件设计说明 (1)3.1 STC89C52芯片 (1)3.1.1芯片简介 (1)3.1.2 电路应用 (2)3.1.3 主要性能参数 (2)3.1.4 功能概述 (2)3.1.5 引脚功能 (2)3.2 74HC573芯片 (4)3.2.1 芯片简介 (4)3.2.2 电路应用 (4)3.2.3 主要性能参数 (4)3.2.4 功能概述 (4)3.2.5 引脚功能 (4)3.3 74HC154芯片 (6)3.3.1 芯片简介 (6)3.3.2 电路应用 (6)3.3.3 主要性能参数 (6)3.3.4 功能概述 (6)3.3.5 引脚功能 (6)四工作原理 (8)4.1系统总体框图 (8)4.2端口去向表 (8)4.3硬件工作原理 (9)4.3.1最小系统模块工作原理 (9)4.3.2数码显示模块 (9)4.3.3点阵驱动模块 (10)4.3.4按键控制模块 (11)4.4软件工作原理 (11)五调试过程 (14)六总结 (15)附录Ⅰ原理图 (16)附录ⅡPCB图 (17)附录Ⅲ实物图 (18)附录ⅣBOM表 (20)附录Ⅴ仪器型号 (21)参考文献 (22)一摘要在这个信息时代,计算机已经离不开我们的生活,适当的游戏可以带来愉快的心情和健康,俄罗斯方块这个小游戏已经风靡全球,是一款老少皆宜的游戏。

二设计内容与要求2.1 内容我组俄罗斯方块共使用了STC89C52、74HC154和74HC573,三个芯片的共同使用,加上两个8*8的点阵屏来完成硬件的操作。

其中共使用6个按键进行功能的操作,每个按键的功能依程序而定分别有:复位、向上、向下、向左、向右和暂停/开始。

2.2 要求1.了解集成芯片的作用STC89C52、74HC154和74HC573及引脚功能;掌握电路的接线方式,记下每个按键的功能。

单片机课程设计报告-俄罗斯方块

单片机课程设计报告-俄罗斯方块
; <o> IBPSTACKTOP: End address of SMALL model stack <0x0-0xFF>
; <i> Set the top of the stack to the highest location.
IBPSTACKTOP EQU 0xFF +1 ; default 0FFH+1
四、调试过程
1、学号显示部分单独调试
这个在之前的很多实验中都有涉及,程序较为简单,语句也不复杂,本实验中才用的是并行动态显示,调试一次成功。
2、游戏程序调试相关
五、验收结果
下图为当时的整个实验装置:
实验中,游戏随机产生方块
按下控制键,方块旋转:
按下控制键,方块加速下落
方块下落到底部,最底层被填满:
最底层填满后,自动消去这一层:
三、
1.程序整体思路
单片机上的程序设计一般是一个大循环结构,对于俄罗斯方块的程序设计,首先产生一个伪随机数,其范围是0-6,分别对应俄罗斯方块中随机产生的七种方块,然后程序根据此数值所对应的图形模块装入RAM的固定区域内,紧接着将此图像写入LCD所对应的显示缓冲区中,显示程序将缓冲区内的内容显示在显示屏上,如果没有控制键按下,图形将自动向下移动。如果有键按下,程序将根据按下的键来改变图形存储区的值,同时程序将判断图形是否已到达边界,当图形最上层到达显示区顶部,则游戏结束,此时将清除显示缓冲的内容,游戏重新开始。
2.图形显示
QH12864T液晶显示器一共有128*64个像素点,本程序中每个像素点用一个坐标表示,左上角为(0,0),右下角为(128,64)。对于显示类的基本操作是任意点亮一个点,熄灭一个点,任意点亮n个点,灭掉n个点,如此一来游戏的第一个关键点就完成了。

基于单片机的俄罗斯方块设计与实现

基于单片机的俄罗斯方块设计与实现
老师的辛勤教导


4.硬件设计部分
针对本课题的设计任务,分析得到:该俄罗斯方块控制 系统硬件设计主要由以下几个模块组成:选用 STC89C52RC单 片机作为系统的芯片,实现人机交互、娱乐等功能 ; 选用 LCD12864实现俄罗斯方块游戏界面、图形显示;选用独立按 键实现游戏控制。
系统电路原理图
5.软件设计部分
基于单片机的俄罗斯方块的 设计与实现
主要内容
1.课题背景 2.设计任务及要求 3.系统总体方案
4.硬件设计部分
5.软件设计部分
6.课题任务的实现
1.课题背景
俄罗斯方块是一款风靡全球的电视游戏机和掌上游戏机 游戏,目前在网络单机游戏和kele8等上都有它的身影。单片 机在游戏上的应用是具有非常大的潜力的,它能将游戏带入 到另一个阶段。单片机最明显的优势,就是可以嵌入到各种 仪器、设备中。这一点是巨型机和网络不可能做到的。单片 机在内部已集成了越来越多的部件,这些部件包括一般常用 的电路,例如:定时器,比较器,D/A转换器,串行通信接口, Watchdog 电路等。单片机在游戏应用方面如模拟射击,贪吃 蛇,推箱子等,它可以很好的说明单片机功能的强大,体现 其更高的可控性和高集成度的好处。
3.系统总体方案
本次设计初期是在keil和proteus联合仿真中进行,编程语 言为C语言,后期是进行实物焊接。本次采用单片机STC89C52RC 控制模块提供电源, LCD 显示,采用独立按键,直接在 I/O 口线 上接上按键开关。因为设计时精简和优化了电路,所以剩余的 口资源还比较多,使用四个按键,分别是旋转键,下键,左键, 右键。这种方案实现可行,既满足系统功能要求,又减少了系 统实现的复杂度。如图所示,系统设计总体框图。

开题报告基于单片机的俄罗斯方块游戏系统的设计

开题报告基于单片机的俄罗斯方块游戏系统的设计

开题报告基于单片机的俄罗斯方块游戏系统的设计毕业设计开题报告题目基于单片机的俄罗斯方块游戏系统的设计一、本课题的研究背景俄罗斯方块是一款风靡全球的电视游戏机和掌上游戏机游戏,它曾经造成的轰动与造成的经济价值可以说是游戏史上的一件大事。

这款游戏最初是由苏联的游戏制作人制作的,它看似简单但却变化无穷,令人上瘾。

相信大多数用户都还记得为它痴迷得茶不思饭不想的那个俄罗斯方块时代。

究其历史,俄罗斯方块最早还是出现在PC机上,而我国的用户都是通过红白机了解、喜欢上它的。

现在联众又将重新掀起这股让人沉迷的俄罗斯方块风潮。

对一般用户来说,它的规则简单,容易上手,且游戏过程变化无穷,而在"联众俄罗斯方块"中,更有一些联众网络游戏所独有的魅力――有单机作战与两人在线对战两种模式,用户可任选一种进行游戏。

网络模式还增加了积分制,使用户既能感受到游戏中的乐趣,也给用户提供了一个展现自己高超技艺的场所。

俄罗斯方块游戏可以说是随计算机的发展而发展,并不断推陈出新演变出各种类似游戏, 深受广大玩家喜爱。

这个游戏有的简单, 有的复杂, 但其根本原理是一样的都是对运动的方块进行组合, 来训练玩家的反应能力。

本文利用单片机进行俄罗斯方块设计,采用51汇编语言进行编程,基于汇编语言的原因是在编写程序的过程中,对于程序的执行会有一个比较直观的表现。

二、国内外研究现状1984年6月.俄罗斯科学院的数学家帕基特诺夫在空闲时编出了一个游戏程序.用来测试计算机的性能。

帕基特诺夫从拼图游戏里得到灵感,设计出了俄罗斯方块。

最早的俄罗斯方块背景颜色图案单一,发展到今天,各种版本的画面变得多姿多彩。

虽最初版本没有积分和通关,但帕基特诺夫仍然玩上了瘾。

这样一种看来粗糙的游戏.却在当年迅速受到欢迎。

1988年,罗杰斯在美国的一个展览上看到了俄罗斯方块。

觉得非常好玩,并从中立刻嗅到了巨大商机。

他先与日本游戏厂商任天堂达成口头协议。

然后出发前往莫斯科与莫斯科科学院谈判,最终罗杰斯于1989年代表任天堂取得了俄罗斯方块在家用机上的授权。

基于51单片机的俄罗斯方块游戏课设

基于51单片机的俄罗斯方块游戏课设

基于51单片机实现的俄罗斯方块游戏整体设计方案 (5)2.1系统的核心部分单片机 (5)2.1.1单片机的选择 (5)2.1.2AT89S52引脚功能描述 (7)2.1.3晶振特性 (9)2.2液晶显示模块 (10)2.2.1液晶显示控制驱动器HD61202的特点 (10)2.2.2液晶显示控制驱动器HD61202的引脚功能 (10)2.2.3液晶显示控制驱动器HD61202的指令系统 (11)2.2.4HD61202的软件设计 (12)2.2.5JM12864J的电路结构特点 (15)2.2.6JM12864J的应用 (16)2.2.7键盘电路 (17)3系统程序的设计 (18)3.1俄罗斯方块驱动流程图 (18)3.2俄罗斯方块所有绘图工作流程图 (19)3.3俄罗斯方块中按下键的流程图 (20)3.4俄罗斯方块所有绘图工作流程图 (21)附录1:C语言程序 (30)附录2:电路原理图 (59)整体设计方案1.1系统的核心部分单片机1.1.1单片机的选择单片机微型计算机是微型计算机的一个重要分支,也是颇具生命力的机种。

单片机微型计算机简称单片机,特别适用于控制领域,故又称为微控制器。

通常,单片机由单块集成电路芯片构成,内部包含有计算机的基本功能部件:中央处理器、存储器和I/O接口电路等。

因此,单片机只需要和适当的软件及外部设备相结合,便可成为一个单片机控制系统。

单片机经过3代的发展,正朝着多功能、高性能、低电压、低功耗、低价格、大存储容量、强I/O功能及较好的结构兼容性方向发展。

其发展趋势不外乎以下几个方面:1.多功能单片机中尽可能地把所需要的存储器和I/O口都集成在一块芯片上,使得单片机可以实现更多的功能。

比如A/D、PWM、PCA(可编程计数器阵列)、WDT(监视定时器---看家狗)、高速I/O口及计数器的捕获/比较逻辑等。

有的单片机针对某一个应用领域,集成了相关的控制设备,以减少应用系统的芯片数量。

基于单片机的俄罗斯方块游戏系统的设计

基于单片机的俄罗斯方块游戏系统的设计

摘要俄罗斯方块是一款风靡全球的电视游戏机和掌上游戏机游戏,它由俄罗斯人阿列克谢·帕基特诺夫发明,故得此名。

俄罗斯方块的基本规则是移动、旋转和摆放游戏自动输出的各种方块,使之排列成完整的一行或多行并且消除得分。

由于上手简单、老少皆宜,从而家喻户晓,风靡世界。

这次设计将使用52单片机和HD61202液晶显示控制驱动器和JM12864J液晶显示器组合,来实现比较简单的俄罗斯方块设计。

此次设计初期是在keil和proteus联合仿真中进行,编程语言为51汇编,后期是进行实物焊接。

论文描述了俄罗斯方块的主要功能函数的实现。

关键词:俄罗斯方块,算法,仿真AbstractTetris is a popular television game machine and game machine game, which Alexei Pajitnov invented by Russians, it was this name. Tetris are the basic rules of movement, rotation and display the game automatically output of the box, which are arranged into a complete one or more rows and eliminate scores. Due to use simple, ages, thus make known to every family, swept the world.Based on single chip computer of the curriculum design of opportunity, I will use the 51 single-chip microcomputer and HD61202 LCD control driver and JM12864J liquid crystal display combination, to carry out a more simple Russian square design.This design is in early keil and proteus joint simulation, programming language for 51 assembly, later is welding material.The paper describes the main functions of the Russian box function of the realization of.Keywords:Russian square, Algorithm, Simulation目录摘要 (1)Abstract (2)目录 (1)引言 (1)1整体设计方案....................................................................................... 错误!未定义书签。

基于stm32的俄罗斯方块课程设计报告

基于stm32的俄罗斯方块课程设计报告

基于stm32的俄罗斯方块课程设计报告
基于STM32F4的(简易版)俄罗斯方块设计
前段时间突然玩了俄罗斯方块这个经典的小游戏,所以就用了一天时间将他移植到f4开发板上去,兴趣使然,也算是对自己的一个小锻炼。

简易版俄罗斯方块
首先是画网格,这里我选择的是用画矩阵的实现方法,是我考虑不周,因为如果用矩阵的话,需要用九十多行代码,但是如果选择划线,只需要二十多行代码。

画矩形
.........
所以就显得很复杂。

然后是设计图案,我用的是在指定区域内填充某个单个颜色,形成一个图案。

这个很好理解,让矩形显现出颜色来组成你想要的图案即可。

在指定区域内填充单个颜色
因为俄罗斯方块需要用到下左右来控制方块的移动。

所以我利用按键得到简标志位,然后通过判断标志位来改变显示图案的位置。

为了方便判断网格的某个区域内是否存在色块,我定义了一个一个数组,虽然只划分了是81个矩形,但是方便期间我定义了100个,然后可以用循环来加减十的倍数,方便控制。

当数组的元素等于0时,代表着有没有色块,如果等于1则为该位
置有色块。

换句话说就等于是给每个矩形一个编号,方便查找以及来判断矩形的位置是否存在色块。

按键
然后再加入得分系统。

当某一行标志全为1时,全行色块消除,得分,如果上面有色块,则上面的色块落下。

综上,原理还是很简单的,后面还可以进一步完善加入显示分数以及一些指示和反馈。

不过简易版的到此就结束了。

后续,嗯.....应该没后续了。

才学疏浅,如有错误之处,望不吝赐教。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
图3.4复位电路
3.
8XX51系列单片机的时钟信号通常用两种电路形式得到:内部振荡方式和外部振荡方式。在引脚XTAL1和XTAL2外接晶振,就构成了内部振荡方式。由于单片机内部有一个高增益反相放大器,当外接晶振后,就构成了自激振荡器,并产生振荡时钟脉冲。晶振通常选用6MHz、12MHz或24MHz。
1.3 分工
在本次设计中,张荣俊同学主要负责软件的设计与分析,汤青红同学负责硬件电路的设计。
2.设计方案
本次设计采用STC89C52单片机控制模块,USB电源模块来提供电源,复位模块,12864LCD显示屏进行屏显,晶振与电容实现时钟电路,按键直接接入I/O口,这样可以简化电路。另外我们还采用了6个按键,分别是左移,右移,下移、方块变化键、确定按键与暂停按键。
《单斯方块游戏机
专 业:电子信息工程技术
班 级:电子B1512班
学 号:
姓 名:
指导老师:
2017-12-01
1.设计题目、要求及分工
1.1 设计题目
本课程设计题目是基于51单片机的俄罗斯方块游戏机。
1.2 设计要求
本课程设计主要器件是STC89C52单片机和液晶12864,通过单片机发生信号控制液晶屏的显示,使用按键实现游戏的开始、暂停、移动、翻转等。
本次设计中我们选用了12MHz的晶振,晶振与锁相环电路配合使用,以提供系统所需的时钟频率。设计中STC89C52使用12MHz晶体振荡器作为振荡源,由于单片机内部带有振荡电路,所以外部只要连接一个晶振和两个电容即可,电容容量一般在15pF到50pF之间,我们选用电容容量为33pF的电容,如图所示即为本设计的振荡电路。
XTAL1
振荡器反相放大器及内部时钟发生器的输入端。
XTAL2
振荡器反相放大器的输出端。
3.4
单片机在启动时都需要复位,以使CPU及系统各部件处于确定的初始状态,并从初态开始工作。89系列单片机的复位信号是从RST引脚输入到芯片内的施密特触发器中的。当系统处于正常工作状态时,且振荡器稳定后,如果RST引脚上有一个高电平并维持2个机器周期(24个振荡周期)以上,则CPU就可以响应并将系统复位。单片机系统的复位方式有:手动按钮复位和上电复位。
手动按钮复位需要人为在复位输入端RST上加入高电平(图1)。一般采用的办法是在RST端和正电源Vcc之间接一个按钮。当人为按下按钮时,则Vcc的+5V电平就会直接加到RST端。手动按钮复位的电路如所示。由于人的动作再快也会使按钮保持接通达数十毫秒,所以,完全能够满足复位的时间要求。复位电路连接如图所示:
RST
复位输入。当振荡器工作时,RST引脚出现两个机器周期以上高电平将使单片机复位。
ALE/PROG
当访问外部程序存储器或数据存储器时,ALE(地址锁存允许)输出脉冲用于锁存地址的低8 位字节。一般情况下,ALE 仍以时钟振荡频率的1/6 输出固定的脉冲信号,因此它可对外输出时钟或用于定时目的。要注意的是:每当访问外部数据存储器时将跳过一个ALE 脉冲。对Flash存储器编程期间,该引脚还用于输入编程脉冲(PROG)。如有必要,可通过对特殊功能寄存器(SFR)区中的8EH 单元的D0 位置位,可禁止ALE 操作。该位置位后,只有一条MOVX 和MOVC指令才能将ALE 激活。此外,该引脚会被微弱拉高,单片机执行外部程序时,应设置ALE 禁止位无效。
PSEN
程序储存允许(PSEN)输出是外部程序存储器的读选通信号,当AT89C52 由外部程序存储器取指令(或数据)时,每个机器周期两次PSEN 有效,即输出两个脉冲。在此期间,当访问外部数据存储器,将跳过两次PSEN信号。
EA/VPP
外部访问允许。欲使CPU 仅访问外部程序存储器(地址为0000H-FFFFH),EA 端必须保持低电平(接地)。需注意的是:如果加密位LB1 被编程,复位时内部会锁存EA端状态。如EA端为高电平(接Vcc端),CPU 则执行内部程序存储器中的指令。Flash存储器编程时,该引脚加上+12V 的编程允许电源Vpp,当然这必须是该器件是使用12V编程电压Vpp。
图3.5时钟电路
3.6液晶屏显示模块
液晶显示屏是整个系统硬件的重要组成部分,担当着人机交互的重要角色。本设计采用铭正同公司生产的MzL02D-12864液晶点阵屏作为显示器件。它是一块128*64点阵的LCD显示模组,模组上的LCM采用COG技术将控制(包括显存)、驱动器集成在LCM的玻璃上,接口简单,操作方便。其特点为单电源供电,对比度编程可调,可采用并行接口为6800/8080时序或者串行SPI的MPU接口方式,整块液晶屏由3.3V的白色LED背光,美观大方。其外接部分分为电源端口、数据端口和命令端口三部分组成。本设计中LCD的数据端口连接到STC89C51单片机的P0端口,LCD命令端口连接到单片机的P2端口。具体实物如图所示:
3.
3.1
图3.1硬件设计框图
3.
本设计的电源系统比较简单,由USB电源输出5V电源进行供电,具体电路如下图所示:
图3.2电源电路
3.
图3.3STC89C52引脚图
P1口
P1 是一个带内部上拉电阻的8 位双向I/O 口, P1的输出缓冲级可驱动(吸收或输出电流)4 个TTL 逻辑门电路。对端口写"1",通过内部的上拉电阻把端口拉到高电平,此时可作输入口。作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(IIL)。与AT89C51 不同之处是,P1.0 和P1.1还可分别作为定时/计数器2 的外部计数输入(P1.0/T2)和(P1.1/T2EX)。
P2口
P2 是一个带有内部上拉电阻的8 位双向I/O 口,P2 的输出缓冲级可驱动(吸收或输出电流)4 个TTL 逻辑门电路。对端口P2 写"1",通过内部的上拉电阻把端口拉到高电平,此时可作输入口,作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(IIL)。在访问外部程序存储器或16 位地数据存储器(例如执行MOVX @DPTR 指令)时,P2 口送出高8 位地址数据。在访问8 位地址的外部数据存储器(如执行MOVX@RI 指令)时,P2 口输出P2锁存器的内容。Flash编程或校验时,P2亦接收高位地址和一些控制信号。
P3 口
P3 口是一组带有内部上拉电阻的8 位双向I/O 口。P3 口输出缓冲级可驱动(吸收或输出电流)4 个TTL 逻辑门电路。对P3 口写入"1"时,它们被内部上拉电阻拉高并可作为输入端口。此时,被外部拉低的P3 口将用上拉电阻输出电流(IIL)。P3 口除了作为一般的I/O 口线外,更重要的用途是它的第二功能P3 口还接收一些用于Flash闪速存储器编程和程序校验的控制信号。
相关文档
最新文档