51单片机课程设计俄罗斯方块.docx

上传人:doc321 文档编号:12826712 上传时间:2021-12-06 格式:DOCX 页数:51 大小:173.98KB
返回 下载 相关 举报
51单片机课程设计俄罗斯方块.docx_第1页
第1页 / 共51页
51单片机课程设计俄罗斯方块.docx_第2页
第2页 / 共51页
51单片机课程设计俄罗斯方块.docx_第3页
第3页 / 共51页
51单片机课程设计俄罗斯方块.docx_第4页
第4页 / 共51页
亲,该文档总共51页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《51单片机课程设计俄罗斯方块.docx》由会员分享,可在线阅读,更多相关《51单片机课程设计俄罗斯方块.docx(51页珍藏版)》请在三一文库上搜索。

1、.单片机课程设计俄罗斯方块学院:工程技术学院专业:08 级电子科学与技术小组成员 :何冠羲,马志祥,李洋,张世刚,叶彪,郑先安,洪之.专业专注.目录摘要引言1 程序整体思路.专业专注.2 8X8LED 模块显示原理3 硬件电路仿真图4 图形显示5 消层算法6 旋转算法7 实物焊接8心得体会附录 程序代码摘要记得在很小的时候,有一种掌上游戏机,里面有一款游戏叫做俄罗斯方块,那时的我们只是简单的按照游戏规则进行“堆积木 ”,而其中的原理却很少有人去思考 ,毕竟当时的我们都还很年幼。.专业专注.基于单片机课程设计的机会,我们这个小组将使用51 单片机和 8x8led 的组合,来实现比较简单的俄罗斯方

2、块设计。此次设计初期是在keil 和 proteus 联合仿真中进行 ,编程语言为 51 汇编,后期是进行实物焊接 。论文描述了俄罗斯方块的主要功能函数的实现,算法分析和实物焊接过程中遇到的问题 。关键词 :俄罗斯方块 ;算法 ; 8X8led ;.专业专注.引 言游戏是人们活动中一项非常重要的内容,有人认为如果哪一天人类对所有的游戏都失去兴趣 ,恐怕世界的末日就要到了。电脑对游戏的贡献有目共睹,.专业专注.现在摸过电脑的人很少有没玩过电脑游戏的,喜欢游戏的人也很少有不玩电脑的。俄罗斯方块是一款风靡全球的电视游戏机和掌上游戏机游戏,它曾经造成的轰动与造成的经济价值可以说是游戏史上的一件大事。这

3、款游戏最初是由苏联的游戏制作人 Alex Pajitnov 制作的,它看似简单但却变化无穷,令人上瘾 。相信大多数用户都还记得为它痴迷得茶不思饭不想的那个俄罗斯方块时代。究其历史,俄罗斯方块最早还是出现在PC机上,而我国的用户都是通过红白机了解、喜欢上它的 。现在联众又将重新掀起这股让人沉迷的俄罗斯方块风潮。对一般用户来说 ,它的规则简单 ,容易上手 ,且游戏过程变化无穷 ,而在 "联众俄罗斯方块 "中,更有一些联众网络游戏所独有的魅力 有单机作战与两人在线对战两种模式 ,用户可任选一种进行游戏。网络模式还增加了积分制,使用户既能感受到游戏中的乐趣,也给用户提供了一个展现自

4、己高超技艺的场所。俄罗斯方块游戏可以说是随计算机的发展而发展,并不断推陈出新演变出各种类似游戏 , 深受广大玩家喜爱 。这个游戏有的简单 , 有的复杂 , 但其根本原理是一样的都是对运动的方块进行组合, 来训练玩家的反应能力 。本文利用单片机进行俄罗斯方块设计,采用 51汇编语言进行编程 ,基于汇编语言的原因是在编写程序的过程中 ,对于程序的执行会有一个比较直观的表现。.专业专注.1. 程序整体思路单片机上的程序设计一般是一个大循环结构,对于俄罗斯方块的程序设计,首先产生一个伪随机数,其范围是 0-6 ,然后程序根据此数值所对应的图形模块装入ram 的固定区域内,紧接着将此图像写入led 所对

5、应的显示缓冲区中,显示程序将缓冲区内的内容显示在led 上,如果没有控制键按下,图形将自动向下移动。如果有键按下 ,程序将根据按下的键来改变图形存储区的值,同时程序将判断图形是否已到达边界,当图形最上层到达显示区顶部,则游戏结束,此时将清楚显示缓冲的内容 ,游戏重新开始。2 8x8led 显示原理8x8led 显示屏的原理图如下.专业专注.由于人眼的视觉暂留现象,通过逐行扫描显示的方式来显示要显示的内容,当每一行扫描的时间很小时人眼观察的将是一幅完整的图像。3 硬件电路仿真图.专业专注.4 图形显示8x8led 一共有 64 个 led ,可以从下至上一次对其编号,对于显示类的基本操作是任意点

6、亮一个点 ,熄灭一个点 ,任意点亮n ( 0<n<=64)个点 ,灭掉 n 个点,如此一来游戏的第一个关键点就完成了。我们将 ram 中从 21h 单元到 28h 单元作为 led 的显示缓冲区,这里面的每一位对应led的一个点 ,led 将实时显示缓冲区的内容,也就是当此缓冲区内容一改变, led 上看到的也会做出相应的改变。同时在俄罗斯方块中那些方块被存放在一个类似于一维的数组之中,每一个方块对应四个小方块,根据伪随机数将这四个小方块对应的值装入ram 固定的区域内。如果要显示方块只需将这些方块所对应的点写入缓冲区。5 消层算法设置循环变量数R2=8 ,即总共至少要扫描8 次,

7、每一次循环过程中检测此行是否已.专业专注.满,也就是检测这一行所对应的存储单元是否全为一,如果全为一则将消去此行,即将此行对应的 ram 清零 。 同时将此行上面 ram的内容按每列依次下移,下移完之后重新将R2=0 ,又从第一行开始检测。此行不全为零时只需将R2=R2+1 。 直到 R2=9消层过程结束。6 旋转算法首先要确定一个旋转中心,假如旋转中心的编号是34,将 34 除以 8,商是 4 存入 R1余数是 2 存入 R2,及时用商和余数建立坐标系。此时若以此为旋转中心的图形需要旋转,则将每一个小方块对应编号除以8,商减去 R1,余数减去R2,而每一个方块一次将旋转90度,所以有公式 x

8、1,y1,x2,y2x2= - y1,y2= x1其中 x1, y1 为旋转之前的坐标 , x2,y2 为旋转之后的坐标。 旋转完之后将 x2 加上 R1将 y2加上 R2,然后将 x2 乘以 8 再加上 y2。 执行四次此过程旋转结束 。7 实物焊接器件: stc51 单片机一块 , 8x8led 显示模块一块 ,电阻 10k10 个,开关 5 个,与门 ,12m 晶振一个 ,电容 3 个。首先按照目的进行进行元器件布局,然后按照电路图里的导线的连接次序将元器件焊在电路板上 ,焊好之后进行调试。8 心得体会写程序的过程中,首先应该把程序思路理清,然后再写代码,否则写到一半感觉行不通时是很令人

9、心烦的。还有就是焊接是一个技术活,因为在电子工艺实习之后大家便没有碰过电烙铁 ,所以焊的过程还是很辛苦的。.专业专注.专业专注.附录 :程序代码ORG0000HAJMPSTARTORG0003HAJMPINTERRUPTAAEQU10000000BBBEQU11111111BHANGEQU32HLIEEQU33HCOUNTEQU34HREMOVEROWEQU35HSTEPSEQU36H.专业专注.XUNHUANEQU37HBIANLIANGEQU38HGRAPHRAM1EQU39HGRAPHRAM2EQU40HGRAPHRAM3EQU41HGRAPHRAM4EQU42HXXXEQU43HYYY

10、EQU44HKEYEQU45HLEDHEADEQU21HTESTBIT100BITSBIT99RIGHTBIT98LEFTBIT97DOWNBIT96HARDBIT95TURNBIT94KEYDOWNBIT93TESTINGBIT92BOTTOMBIT91;.专业专注.;程序由此处开始执行;START:MOVTCON,#00000001B; 设置外部中断0 响应方式为下降沿触发SETBEX0SETBEAMOVSP,#60H;将堆栈指针 SP 设置在 RAM 的高地址处MOVR7,#6;R7作为存放 0-6这 7个随机数的变量MOVP0,#11111111B;将 P0口最为输入口LCALLWRI

11、TEGRAPHTORAMCLRTESTINGGAMELOOP:;CLREALCALLSHOWGRAPHMOVR6,#30TIMING:LCALLSHOWLEDRAMLCALLDELAYDJNZR6,TIMINGLCALLDOWNTESTJNBDOWN,NEXT1ABCD:.专业专注.MOVA,28HCJNEA,#0,GAMEOVERLCALLREMOVEBLOCKLCALLWRITEGRAPHTORAMJMPGAMELOOPNEXT1:;JBKEYDOWN,KEY1JMPKEY4KEY1:CLRTESTINGCLRKEYDOWNMOVA,KEYCJNEA,#1,KEY2;1-LEFTLCALL

12、LEFTTESTJBLEFT,KEY4LCALLCLEANGRAPHLCALLMOVELEFTLCALLGAMELOOPKEY2:CJNEA,#2,KEY3;2-RIGHTLCALLRIGHTTESTJBRIGHT,KEY4.专业专注.LCALLCLEANGRAPHLCALLMOVERIGHTLCALLGAMELOOPKEY3:CJNEA,#4,KEY4;4-ROTATE;LCALLROTATIONTEST;JNBTURN,KEY4LCALLCLEANGRAPHLCALLROTATIONJMPGAMELOOPKEY4:CJNEA,#8,KEY5SWEAT:LCALLDOWNTESTJBDOWN

13、,GAMELOOPLCALLCLEANGRAPHLCALLMOVEDOWNJMPSWEATKEY5:LCALLCLEANGRAPHLCALLMOVEDOWN.专业专注.INCR7CJNER7,#7,NEXT5MOVR7,#0NEXT5:JMPGAMELOOPGAMEOVER:MOVR0,#8MOVR1,#LEDHEADCLEAR:LCALLCLEANGRAPHMOVR1,#0INCR1DJNZR0,CLEARMOVR0,#4MOVR1,#GRAPHRAM1ASDF:MOVA,R1ADDA,#16MOVR1,AINCR1DJNZR0,ASDFJMPGAMELOOP.专业专注.;测试图形是否能向下

14、移动;DOWNTEST:PUSH0PUSH1PUSH2PUSH3PUSHBPUSHACCMOVR2,#4MOVR0,#GRAPHRAM1DOWN0:MOVA,R0SUBBA,#8MOVB,AMOVR3,#4CLRCMOVR1,#GRAPHRAM1DOWN2:CLRC.专业专注.SUBBA,R1JZDOWN1INCR1MOVA,BDJNZR3,DOWN2LCALLTESTBITJBBITS,DOWN3DOWN1:INCR0DJNZR2,DOWN0CLRDOWNJMPHOPEDOWN3:SETBDOWN;DOWN WEI YI BIAO SHI BU NENG WANGXIA YI DONGCPL

15、P3.4JMPDOWN4HOPE:MOVR2,#4MOVR0,#GRAPHRAM1YOUQIANG2:MOVR3,#1CCC2:.专业专注.MOVA,R3MOVB,ACLRCSUBBA,R0JNZCCC1SETBDOWNSETBBOTTOMJMPDOWN4CCC1:MOVA,BINCR3CJNER3,#9,CCC2INCR0DJNZR2,YOUQIANG2DOWN4:POPACCPOPBPOP3POP2POP1POP0RET.专业专注.;外部中断 0 中断处理程序;INTERRUPT:PUSH0PUSH1PUSHACCINCR7CJNER7,#7,INTTMOVR7,#0INTT:SETBTE

16、STINGSETBKEYDOWNMOVA,P0CPLAMOVKEY,APOPACCPOP1POP0RETI;测试能否旋转.专业专注.;向下移动;MOVEDOWN:PUSH0PUSH1PUSHACCMOVR0,#GRAPHRAM1MOVR1,#4MOVE1:MOVA,R0CLRCSUBBA,#8MOVR0,AINCR0DJNZR1,MOVE1POPACCPOP1POP0RET.专业专注.;向左移动;MOVELEFT:PUSH0PUSH1PUSHACCMOVR0,#GRAPHRAM1MOVR1,#4MOVE2:MOVA,R0CLRCSUBBA,#1MOVR0,AINCR0DJNZR1,MOVE2P

17、OPACCPOP1POP0RET;向右移动.专业专注.;MOVERIGHT:PUSH0PUSH1PUSHACCMOVR0,#GRAPHRAM1MOVR1,#4MOVE3:MOVA,R0CLRCINCAMOVR0,AINCR0DJNZR1,MOVE3POPACCPOP1POP0RET;将图形写入RAM 缓存中;WRITEGRAPHTORAM:.专业专注.PUSHACCPUSHBPUSH0PUSH1PUSH2PUSH7MOVR1,#4MOVA,R7MOVB,#4MULABMOVR2,AMOVR0,#GRAPHRAM1MOVDPTR,#GRAPHWRITEGRAPH:MOVA,R2MOVCA,A+D

18、PTR;SUBBA,#16MOVR0,AINCR2INCR0DJNZR1,WRITEGRAPHPOP7.专业专注.POP2POP1POP0POPBPOPACCRET;测试某一个二进制位是否为1;TESTBIT:PUSH0PUSH1PUSHBPUSHACCMOVB,#8DIVABMOVR0,AMOVA,BCJNEA,#0,TEST3MOVA,R0DECAJMPTEST4.专业专注.TEST3:MOVA,R0TEST4:MOVDPTR,#TAB1MOVR1,#LEDHEADADDA,R1MOVR1,AMOVA,BMOVCA,A+DPTRANLA,R1CJNEA,#0,TEST1CLRBITSJMP

19、TEST2TEST1:SETBBITSTEST2:POPACCPOPBPOP1POP0.专业专注.RET;测试图形是否能向左移动;LEFTTEST:PUSH0PUSH1PUSH2PUSH3PUSHBPUSHACCMOVR2,#4MOVR0,#GRAPHRAM1LEFT0:MOVA,R0CLRCSUBBA,#1MOVB,AMOVR3,#4;CLRC.专业专注.MOVR1,#GRAPHRAM1LEFT2:CLRCSUBBA,R1JZLEFT1INCR1MOVA,BDJNZR3,LEFT2LCALLTESTBITJBBITS,LEFT3LEFT1:INCR0DJNZR2,LEFT0CLRLEFTJM

20、PLEFT4LEFT3:SETBLEFT;DOWN WEI YI BIAO SHI BU NENG WANGXIA YI DONGCPLP3.4JMPLEFT5LEFT4:MOVR2,#4.专业专注.MOVR0,#GRAPHRAM1YOUQIANG:MOVR3,#9MOVA,#1HHH2:MOVB,ACLRCSUBBA,R0JNZHHH1SETBLEFTJMPLEFT5HHH1:MOVA,BADDA,#8DJNZR3,HHH2INCR0DJNZR2,YOUQIANGLEFT5:POPACCPOPBPOP3.专业专注.POP2POP1POP0RET;测试图形是否能向右移动;RIGHTTEST:P

21、USH0PUSH1PUSH2PUSH3PUSHBPUSHACCMOVR2,#4MOVR0,#GRAPHRAM1RIGHT0:MOVA,R0ADDA,#1MOVB,AMOVR3,#4;CLRC.专业专注.MOVR1,#GRAPHRAM1RIGHT2:SUBBA,R1JZRIGHT1INCR1MOVA,BDJNZR3,RIGHT2LCALLTESTBITJBBITS,RIGHT3RIGHT1:INCR0DJNZR2,RIGHT0CLRRIGHTJMPRIGHT4RIGHT3:SETBRIGHT;DOWN WEI YI BIAO SHI BU NENG WANGXIA YI DONGCPLP3.4JMPRIGHT5RIGHT4:MOVR2,#4.专业专注.MOVR0,#GRAPHRAM1YOUQIANG1:MOVR3,#8MOVA,#8III2:MOVB,ACLRCSUBBA,R0JNZIII1SETBRIGHTJMPRIGHT5III1:MOVA,BADDA,#8DJNZR3,III2INCR0DJNZR2,YOUQIANG1RIGHT5:POPACCPOPBPOP3.专业专注.POP2POP1POP0RET;图形旋转;ROTATION:

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1