单片机俄罗斯方块游戏设计大全设计思路大全程序大全.docx
《单片机俄罗斯方块游戏设计大全设计思路大全程序大全.docx》由会员分享,可在线阅读,更多相关《单片机俄罗斯方块游戏设计大全设计思路大全程序大全.docx(113页珍藏版)》请在冰豆网上搜索。
单片机俄罗斯方块游戏设计大全设计思路大全程序大全
游戏机的制作:
俄罗斯方块
摘要………………………………………………………………………1
1方案论证……………………………………………………………………….
1.1开发意义…………………………………………………………………
1.2功能介绍………………………………………………………………….
2设计思路…………………………………………………………………………
.
3硬件电路………………………………………………………………………
2.174HC573驱动芯片电路…………………………………………………….
2.28*8LED点阵的接口电路…………………………………………………..
2.3单片机最小系统电路………………………………………………………..
2.4整体电路图………………………………………………………………….
4系统调试………………………………………………………………………..
3.1硬件调试………………………………………………………………………
3.2软件调试……………………………………………………………………..
5作品展示…………………………………………………………………………
.
6元器件清单……………………………………………………………………..
7结束语……………………………………………………………………………..
致谢……………………………………………………………………………
参考文献………………………………………………………………………….
游戏机的制作:
俄罗斯方块
摘要:
近年来随着计算机在社会领域的渗透,单片机的应用正在不断地走向深入,应用到各个领域。
在实时检测和自动控制的单片机应用系统中,单片机往往是作为一个核心部件来使用,仅单片机方面知识是不够的,还应根据具体硬件结构,以及针对具体应用对象特点的软件结合,以作完善。
我做的题目是一个用51单片机制作的游戏机,大致分位软件和硬件2大部分,硬件主要通过5按键、1个8*8LED点阵屏、一个单片机系统,实现积木的左、右、下、变化、复位五个模式,完全达到俄罗斯方块所实现的功能。
次项目用专门的PROTUES仿真,而采用KEIL软件程序进行程序调试
关键词:
AT89S52单片机芯片;74HC573驱动芯片;GYXM-1558ASR-LED点阵屏
1方案论证
1.1开发意义:
充分理解点阵显示的原理,已经动态扫描的应用,对生活中的产品有了个全新的认识,不但懂得理论与实际的差距,也时对自己思维的一次强有力的挑战,做出这个东西让我收获良多。
1.2功能介绍:
开始让他显示个积木,在按键没实现控制的时候,每隔1S下移一次,有触底处理功能,当碰到底的时候图形不能下移,判断能否消行,能消行则消行,不能再判断是否到顶,到底则从新开始,没到底产生下个随即数,中间有5个按键控制,一个实现图形左移,一个实现图形右移,一个实现下移,一个实现旋转,一个复位。
2设计思路
图形的上下移动:
根据点阵理论可通过图形数据的左右移动和地址变化来实现。
图形的变化:
可通过地址变化来得到。
即把需要变化的数据送到一固定地址,通过地址变化再送回显示的地址里面。
图形的碰边处理:
可通过各个边上的数据判断是否到边来实现。
与原有图形相遇:
可通过与原有图形数据进行比较处理来实现。
:
图形的旋转:
在固定地址里面实现旋转比较容易,但是在行进中的图形旋转就比较费脑筋,我是用一个地址计数下移的次数,再用一个地址计数左移右移的次数。
再根据这些次数确定图形的地址,再把这些地址送到图形变化的一个固定的地址中,变化后再送回到显示的地址中去显示。
图形的碰边处理:
如果不对图形进行边框处理,图形就会一直移动,看不到我们想要的效果。
我是用把边框数据与图形数据进行位运算。
再判断这些数据就可以得到图形是否到边。
3硬件电路
2.174HC573驱动芯片电路
此芯片时个锁存器,也可以做驱动芯片驱动LED点阵屏幕,这里面的电源和地系统附加了但是实际中的加上去,不然芯片不能工作。
2.28*8LED点阵的接口电路
上面的是仿真的图上端接数据下端开片选但是实际中引脚很不规则,所有的花时间去测
用一节干电池,或者用指针万用表打到电阻10K档。
2.3单片机最小系统电路
2.4整体电路图以及仿真效果
但是里面的电源、地、晶振、复位、EA等在仿真中系统自动加的要是在实际生活中的加进去。
4系统调试
3.1硬件调试
第一检查单片机的最小系统是否正常,包括检查晶振、单片机2端电压、复位电路已经EA
第二看驱动芯片是否工作正常、接法是否正确,再检查LED点阵是否接的正确,可以用一节干电池测,也可以用指针万用表打到电阻10K档位测。
3.2软件调试
流程图
程序代码
;=========================================================
;俄罗斯方块,采用移片选的方法.
;编译时间:
09年1月15
;编译者:
谭华
;实现功能:
俄罗斯方块的旋转,左移,右移
;消行碰边触底产生随即数等基本实现右移的基本功能
;==============初始化自定义========================================
pianxuanequp2
shuchuequp1
bt0equ20h.0
bt1equ20h.1
bt2equ20h.2
bt3equ20h.3
bt4equ20h.4
bt5equ20h.5
bt6equ20h.6
bt8equ21h.0
bt9equ21h.1
bt10equ21h.2
bt11equ21h.3
;============================================
org0000h
ajmpstart
org0bh
ljmpintt0
org30h
;=============主程序初始化================================
start:
movsp,#60h
movtmod,#21h
movth0,#0b1h
movtl0,#0e0h
movth1,#25
movtl1,#25
movr1,#00
callchushihua
callchuzhi
setbea
setbet0
setbtr0
setbtr1
clrbt0
clrbt1
clrbt2
clrbt3
clrbt4
clrbt5
clrbt8
clrbt9
clrbt10
clrbt11
setbbt6
mov35h,#0feh
movr2,#00
movr4,#00
;=====================================================
;主程序
;======================================================
main:
jnbbt0,main
clrbt0
callsaomiao;扫描按键
callxianshi0;调用下移显示画面子程序
callxianshi;调用触边后静态图形显示的子程序
jbbt10,loop;判断是否触顶,=1,游戏结束,跳到满屏显示
callchudi;调用触底子程序
callxiaohang;调用消行判断子程序
callyanshi_40ms;调用延时40ms消抖子程序,40ms到,BT5置1
jnbbt5,xia0
clrbt5
callpanduan;调用按键判断处理子程序
xia0:
jnbbt9,xia;图形快速下落标志位,=1快速下落
clrbt9
callxialuo;调用图形下落子程序
ajmpmain
xia:
callyanshi_1s;延时1s子程序.1s到,BT1=1
jnbbt1,main
clrbt1
callxialuo
ajmpmain
loop:
callyanshi_500ms;调用延时500ms子程序,500ms到bt11=1
jnbbt11,main
clrbt11
callmanping;调用满屏全亮子程序
ajmpmain
;=====================================================
;按键扫描
;=====================================================
saomiao:
jbp3.2,qq0
setbbt2
ajmpqq
qq0:
jbp3.1,qq1
setbbt3
ajmpqq
qq1:
jbp3.0,qq2
setbbt4
ajmpqq
qq2:
jbp3.3,qq4
setbbt8
ajmpqq
qq4:
setbbt6
clrbt2
clrbt3
clrbt4
clrbt8
qq:
ret
;=====================================================
;图形下移子程序
;=====================================================
xialuo:
mova,35h
rla
mov35h,a
ret
;============================================
;判断子程序
;=====================================================
panduan:
jnbbt2,ww0
clrbt2
jnbbt6,ww0
clrbt6
callyouyi
ajmpww
ww0:
jnbbt3,ww1
clrbt3
jnbbt6,ww1
clrbt6
callzuoyi
ajmpww
ww1:
jnbbt4,ww2
clrbt4
jnbbt6,ww2
clrbt6
callzhuan
ajmpww
ww2:
jnbbt8,ww
clrbt8
jnbbt6,ww
clrbt6
callkuaixia
ww:
ret
;============================================================
;快速下落子程序
;=============================================================
kuaixia:
setbbt9
ret
;============================================================
;满屏子程序
;============================================================
manping:
mov41h,#0ffh
mov42h,#0ffh
mov43h,#0ffh
mov44h,#0ffh
mov45h,#0ffh
mov46h,#0ffh
mov47h,#0ffh
mov48h,#0ffh
ret
;============================================================
;清屏子程序
;============================================================
qingping:
mov41h,#00h
mov42h,#00h
mov43h,#00h
mov44h,#00h
mov45h,#00h
mov46h,#00h
mov47h,#00h
mov48h,#00h
ret
;============================================
;下移显示
;=====================================================
xianshi0:
mova,35h
movp1,31h
movp2,a
calldelay
rla
movp1,#00
movp1,32h
movp2,a
calldelay
rla
movp1,#00
movp1,33h
movp2,a
calldelay
movp1,#00
ret
;=====================================================
;图形右移子程序
;=====================================================
zuoyi:
mova,31h
jnbacc.0,dd1
ajmpdd
dd1:
mova,32h
jnbacc.0,dd2
ajmpdd
dd2:
mova,33h
jnbacc.0,dd3
ajmpdd
dd3:
mova,35h
cjnea,#0feh,sa0
callsad0
ajmpdd
sa0:
mova,35h
cjnea,#0fdh,sa1
callsad1
ajmpdd
sa1:
mova,35h
cjnea,#0fbh,sa2
callsad2
ajmpdd
sa2:
mova,35h
cjnea,#0f7h,sa3
callsad3
ajmpdd
sa3:
mova,35h
cjnea,#0efh,sa4
callsad4
ajmpdd
sa4:
mova,35h
cjnea,#0bfh,dd
callsad5
ajmpdd
dd:
ret
sad0:
mova,33h
rra
mov39h,#00
mov39h,a
anla,43h
cjnea,#00,dd4
mov33h,39h
mova,32h
rra
mov39h,#00
mov39h,a
anla,42h
cjnea,#00,dd4
mov32h,39h
mova,31h
rra
mov39h,#00
mov39h,a
anla,41h
cjnea,#00,dd4
mov31h,39h
dec51h
dd4:
ret
sad1:
mova,33h
rra
mov39h,#00
mov39h,a
anla,44h
cjnea,#00,dd5
mov33h,39h
mova,32h
rra
mov39h,#00
mov39h,a
anla,43h
cjnea,#00,dd5
mov32h,39h
mova,31h
rra
mov39h,#00
mov39h,a
anla,42h
cjnea,#00,dd5
mov31h,39h
dec51h
dd5:
ret
sad2:
mova,33h
rra
mov39h,#00
mov39h,a
anla,45h
cjnea,#00,dd6
mov33h,39h
mova,32h
rra
mov39h,#00
mov39h,a
anla,44h
cjnea,#00,dd6
mov32h,39h
mova,31h
rra
mov39h,#00
mov39h,a
anla,43h
cjnea,#00,dd6
mov31h,39h
dec51h
dd6:
ret
sad3:
mova,33h
rra
mov39h,#00
mov39h,a
anla,46h
cjnea,#00,dd7
mov33h,39h
mova,32h
rra
mov39h,#00
mov39h,a
anla,45h
cjnea,#00,dd7
mov32h,39h
mova,31h
rra
mov39h,#00
mov39h,a
anla,44h
cjnea,#00,dd7
mov31h,39h
dec51h
dd7:
ret
sad4:
mova,33h
rra
mov39h,#00
mov39h,a
anla,47h
cjnea,#00,dd8
mov33h,39h
mova,32h
rra
mov39h,#00
mov39h,a
anla,46h
cjnea,#00,dd8
mov32h,39h
mova,31h
rra
mov39h,#00
mov39h,a
anla,45h
cjnea,#00,dd8
mov31h,39h
dec51h
dd8:
ret
sad5:
mova,33h
rra
mov39h,#00
mov39h,a
anla,48h
cjnea,#00,dd9
mov33h,39h
mova,32h
rra
mov39h,#00
mov39h,a
anla,47h
cjnea,#00,dd9
mov32h,39h
mova,31h
rra
mov39h,#00
mov39h,a
anla,46h
cjnea,#00,dd9
mov31h,39h
dec51h
dd9:
ret
;===============图形左移子程序======================================
;通过图形移动一位,与静止图形相与,为零则移动,否则原地不动
;
;=====================================================
youyi:
mova,31h
jnbacc.7,cc0
ajmpcc20
cc0:
mova,32h
jnbacc.7,cc1
ajmpcc20
cc1:
mova,33h
jnbacc.7,cc
ajmpcc20
cc:
mova,35h
cjnea,#0feh,zz0
callscd0
ajmpcc20
zz0:
mova,35h
cjnea,#0fdh,zz1
callscd1
ajmpcc20
zz1:
mova,35h
cjnea,#0fbh,zz2
callscd2
ajmpcc20
zz2:
mova,35h
cjnea,#0f7h,zz3
callscd3
ajmpcc20
zz3:
mova,35h
cjnea,#0efh,zz4
callscd4
ajmpcc20
zz4:
mova,35h
cjnea,#0bfh,cc20
callscd5
ajmpcc20
cc20:
ret
scd0:
mova,33h
rla
mov39h,#00
mov39h,a
anla,43h
cjnea,#00,cc2
mov33h,39h
mova,32h
rla
mov39h,#00
mov39h,a
anla,42h
cjnea,#00,cc2
mov32h,39h
mova,31h
rla
mov39h,#00
mov39h,a
anla,41h
cjnea,#00,cc2
mov31h,39h
inc51h
cc2:
ret
scd1:
mova,33h
rla
mov39h,#00
mov39h,a
anla,44h
cjnea,#00,cc3
mov33h,39h
mova,32h
rla
mov39h,#00
mov39h,a
anla,43h
cjnea,#00,cc3
mov32h,39h
mova,31h
rla
mov39h,#00
mov39h,a
anla,42h
cjnea,#00,cc3
mov31h,39h
inc51h
cc3:
ret
scd2:
mova,33h
rla
mov39h,#00
mov39h,a
anla,45h
cjnea,#00,cc4
mov33h,39h
mova,32h
rla
mov39h,#00
mov39h,a
anla,44h
cjnea,#00,cc4
mov32h,39h
mova,31h
rla
mov39h,#00
mov39h,a
anla,43h