俄罗斯方块单片机课程设计作品说明书_第1页
俄罗斯方块单片机课程设计作品说明书_第2页
俄罗斯方块单片机课程设计作品说明书_第3页
俄罗斯方块单片机课程设计作品说明书_第4页
俄罗斯方块单片机课程设计作品说明书_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、单片机课程实训作品说明书 姓名:武跃忠 完成时间: 2016年 7 月 4 日 作品说明介绍 1作品名称:掌上游戏机(俄罗斯方块) 2作品实现功能: a)按下、左、右键控制图形改变位置; b)图形在落到底部和障碍物上时,把图形变为障碍物; c)复位键使游戏重新开始; d)暂停/继续键可以暂停、继续游戏 3.选择目的:实践单片机课程所学到的知识。 作品操作介绍 1作品外观图 点阵屏:显示障碍物以及图形 零欧电阻,用作飞线 16个1K欧电阻,用来限制电流大小 STC12C5A60S单片机,用来烧录烧录主控程序,是整个作品的控 制器 74LS154N芯片(4-16)译码器,用来产生列选信号 电源指示

2、灯:通电时点亮 微动开关 1:向上的按键,用于改变图形 排针:用于连接电源正负极以及 RXD和TXD 10K 欧电阻,用来限制通过电源指示灯的电流 微动开关 2:功能按键,用于游戏的复位操作 ? 自锁开关 : 实现整体的电源总控制(断负) ? 微动开关 3:功能按键,用于游戏的暂停 / 继续 ? 微动开关 4:向右的按键,用于图形右移 ? 微动开关 5:向下的按键,用于图形下移 ? 微动开关 6:向左的按键,用于图形左移 2. 作品功能介绍及操作说明 a) 给游戏机上电 将电源正极接在排针处标有 VCC 的位置 将电源负极接在排针处标有 GND 的位置 按下自锁开关完成上电 b) 让图形移动或

3、改变图形朝向 按向上键:改变图形的朝向 按向下键:让图形瞬间落到可以下落的最下方 按向左键:图形向左移动一位 按向右键:图形向右移动一位 c) 游戏暂停 /继续、复位 按暂停 / 继续键:游戏暂停 / 继续 按复位键:游戏复位,重新开始 三、作品制作说明 1.电路原理图 PETJ fR40 AXHFM j EX /FM.i Pi T 3ND PJ l.AP POCUiCO KI1JM71 用蓉 PQ WC6 冃0 3EM po POWAtSB 因丁加口7 叭mi PI 1EEX P12 M 3 PI 4 Ri.e ph p? aiMi P7 4I7 P25JA13 PJ sbit key_ri

4、ght=P3A7; sbit key_up=P3A5; sbit key_dow n=P3A6; sbit key_start=P3A3; sbit key_reset=P3A2; /方向按键左 /方向按键右 /方向按键上 /方向按键下 /功能按键暂停,开始 /功能按键复位 /图形落地之前 障碍物图形落地之后 shape In dex用来记录当前形状,shapex un sig ned char shape162; un sig ned char map162; /line用来在显示时候标记列数, shapey用来记录图形所在位置 unsigned char line,shapeIndex,s

5、hapex,shapey; unsigned char code fk22=1,1,/ 方块 1,1; unsigned char code sx144=0,1,0,0, / 竖线 0,1,0,0, 0,1,0,0, 0,1,0,0; unsigned char code sx244=0,0,0,0, 0,0,0,0, 1,1,1,1, 0,0,0,0; unsigned char code zl133=1,0,0,/ 正 L 形 1,0,0, 1,1,0; unsigned char code zl233=0,0,1, 1,1,1, 0,0,0; unsigned char code zl3

6、33=0,1,1, 0,0,1, 0,0,1; unsigned char code zl433=1,1,1, 1,0,0, 0,0,0; unsigned char code fl133=0,1,0,/ 反 L 形 0,1,0, 1,1,0; unsigned char code fl233=1,1,1, 0,0,1, 0,0,0; unsigned char code fl333=0,1,1, 0,1,0, 0,1,0; unsigned char code fl433=1,0,0, 1,1,1, 0,0,0; unsigned char code zz133=1,0,0,/ 正 Z 形

7、1,1,0, 0,1,0; unsigned char code zz233=0,1,1, 1,1,0, 0,0,0; unsigned char code fz133=0,1,0,/ 反 Z 形 1,1,0, 1,0,0; unsigned char code fz233=1,1,0, 0,1,1, 0,0,0; unsigned char code txz133=0,1,0, 1,1,1, 0,0,0; unsigned char code txz233=0,0,1, 0,1,1, 0,0,1; unsigned char code txz333=1,1,1, 0,1,0, 0,0,0;

8、unsigned char code txz433=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;j0;j-); /T 形 /用来标记游戏是否被重置 /声明图形左移的函数 /软件延时函数 void mapClear(void) unsigned int i,j; for(i=0;i16;i+) for(j=0;j2;j+) mapij=0; /清除背景数组函数 /清除图形数组函数 void

9、shapeClear(void) unsigned int i,j; for(i=0;i16;i+) for(j=0;j2;j+) shapeij=0; void shapeToMap(void) /把图形变为背景的函数 unsigned int i,j; for(i=0;i16;i+) for(j=0;j2;j+) mapij|=shapeij; void txToShape()把图形载入到shape数组 /i,j 为循环变量, t,k 为临时变量,其他为指向各种大小的二位数组的指 针 unsigned char i,j,t,k,(*tx2)2,(*tx3)3,(*tx4)4; shapeC

10、lear(); 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; k=3; break; case 8: tx3=fl2; k=3;

11、 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; s

12、hape数组中 switch(k)/ 把找到的图形数组放入 case 2: for(i=0;ik;i+) for(j=0;j7) t=(0 x01(i+shapex-8); shape15-shapey-j+11|=t; else t=(0 x01(i+shapex); shape15-shapey-j+10|=t; break; case 3: for(i=0;ik;i+) for(j=0;j7) t=(0 x01(i+shapex-8); shape15-shapey-j+11|=t; else t=(0 x01(i+shapex); shape15-shapey-j+10|=t; bre

13、ak; case 4: for(i=0;ik;i+) for(j=0;j7) t=(0 x01(i+shapex-8); shape15-shapey-j+11|=t; else t=(0 x01(i+shapex); shape15-shapey-j+10|=t; break; void shapeCreat(void)/创建一个新图形的函数 shapex=0; shapey=7; shapeIndex=rand()%19; txToShape(); bit shapeAndMap()/检测是否与障碍物重叠 unsigned char i,j,t; for(i=0;i16;i+) for(j

14、=0;j0) return 0; return 1; bit shapeDown(void) unsigned char i,t; bit flag; flag=1; for(i=0;i=0 x80) shapeToMap(); flag=0; break; if(flag) for(i=0;i=0 x80)?1:0; shapei0=1; shapei1=1; shapei1|=t; shapex+; flag=shapeAndMap(); if(!flag) for(i=0;i=1; shapei1=1; shapei0|=t; shapeToMap(); return flag; /将图

15、形转换为障碍物 /图形右移函数 /没移动到墙体则右移 /检测移动是否合法,非法则撤销 /* 图形左右移函数 ,参数 flag 表示移动模式 为0 时无条件移动,为 1 时会检测是否可移动 */ void shapeRight(bit flag) unsigned char i,t; if(shape00=0i15;i+) shapei0=shapei+10; shapei1=shapei+11; shape150=0; shape151=0; shapey+; else flag=0; if(flag) for(i=0;i0;i-) shapei0=shapei-10; shapei1=sha

16、pei-11; shape00=0; shape01=0; shapey-; else flag=0; if(flag) for(i=0;i16;i+)/检测移动是否合法,非法则撤销 t=shapei0 if(t!=0 x00) shapeRight(0); break; t=shapei1 if(t!=0 x00) shapeRight(0); break; void shapeChange(unsigned char oldShape) bit flag;/ 标记图形是否在合理范围 /i,j 为循环变量 ,k 为临时变量 ,存储需要数组的大小,其他为指向各种大 小的数组的指针 unsign

17、ed 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=zl

18、4; 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;

19、 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

20、=1; /判断变形后图形有没有移动出规 for(i=0;iki+) 定范围 for(j=0;j16) break; case 3: if(shapey=0|shapey+j16) break; case 4: if(shapey=0|shapey+j16) break; if(flag)txToShape(); /如果没有移动出范围则变形 if(!shapeAndMap() /如果变形后与障碍重叠则撤销操 /删除某行函数 / 判断某行是否全为 1 shapeIndex=oldShape; txToShape(); void deleteLine(void) unsigned char t,i,

21、j,k,t1; for(j=0;j2;j+) for(k=0;k8;k+) for(i=0;ik; t if(t!=0 x80k)break; if(i=16)/全为 1 则消除 for(i=0;ik); /保存不需要消除的行 t1 t=(mapi0=0 x80)?1:0; mapi0=1; /障碍全体下移 mapi1k;/把不需要消除的行放回原处 mapi1 mapi1|=t1; else t1=(0 xffk); /保存不需要消除的行 t1 t=(mapi0=0 x80)?1:0;/ 上部障碍下移 mapi0k;/把不需要消除的行放回原处 mapi0 mapi0|=t1; /图形直接移动到

22、底部 void shapeMoveDown(void) while(shapeDown(); void shapeMove(void) /图形移动的主控函数 unsigned char i; bit isStart; isStart=1; /用来标记游戏是否在运行 1 为在运行 0 为暂停 do /延时且检测按键状态 for(i=0;i70;i+) if(!key_right if(!key_right) shapeRight(1); while(!key_right); delay(20); if(!key_left if(!key_left) shapeLeft(1); while(!ke

23、y_left); delay(20); if(!key_down if(!key_down) shapeMoveDown(); while(!key_down); delay(20); if(!key_up 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_re

24、set) 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;i16;i+) if(mapi0%2=1) game_over=1; break; return game_ov

25、er; void init(void) /功能键复位 /判断游戏是否结束 /如果顶端有障碍则游戏结束 /初始化函数 P0M1=0 x00;/设置 IO 口为强推模式 P0M0=0 xff; P2M1=0 x00; P2M0=0 xff; 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;i16;i+) if(i * * I I I I I I i i i i | ;,小,山 3d aEoso5un | E6Sdv| nd 乩:m 朝爛蜜 W3 i *-* * 1 * * * * a W wr * 4 00000000000000 0000000000000 *eeGereeeeoGeeeeeeeeo6G6e006GGe ceooooeeGOOOOGeeee OOGO

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论