资源描述
游戏机的制作:俄罗斯方块
目 录
摘要………………………………………………………………………1
1 方案论证……………………………………………………………………….
1.1 开发意义…………………………………………………………………
1.2 功能介绍………………………………………………………………….
2 设计思路…………………………………………………………………………
.
3 硬件电路………………………………………………………………………
2.1 74HC573驱动芯片电路…………………………………………………….
2.2 8*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.1 74HC573驱动芯片电路
此芯片时个锁存器,也可以做驱动芯片驱动LED点阵屏幕,这里面的电源和地系统附加了 但是实际中的加上去,不然芯片不能工作。
2.2 8*8LED点阵的接口电路
上面的是仿真的图 上端接数据 下端开片选 但是实际中引脚很不规则,所有的花时间去测
用一节干电池,或者用指针万用表打到电阻10K档。
2.3 单片机最小系统电路
2.4 整体电路图以及仿真效果
但是里面的电源、地、晶振、复位、EA等 在仿真中系统自动加的 要是在实际生活中的加进去。
4 系统调试
3.1 硬件调试
第一 检查单片机的最小系统是否正常,包括检查晶振、单片机2端电压、复位电路已经EA
第二 看驱动芯片是否工作正常、接法是否正确,再检查LED点阵是否接的正确,可以用一节干电池测,也可以用指针万用表打到电阻10K档位测。
3.2 软件调试
流程图
程序代码
;=========================================================
;俄罗斯方块,采用移片选的方法.
;编译时间: 09年1月15
;编译者: 谭华
;实现功能: 俄罗斯方块的旋转,左移,右移
; 消行 碰边 触底 产生随即数等 基本实现右移的基本功能
;==============初始化自定义========================================
pianxuan equ p2
shuchu equ p1
bt0 equ 20h.0
bt1 equ 20h.1
bt2 equ 20h.2
bt3 equ 20h.3
bt4 equ 20h.4
bt5 equ 20h.5
bt6 equ 20h.6
bt8 equ 21h.0
bt9 equ 21h.1
bt10 equ 21h.2
bt11 equ 21h.3
;============================================
org 0000h
ajmp start
org 0bh
ljmp intt0
org 30h
;=============主程序初始化================================
start: mov sp, #60h
mov tmod, #21h
mov th0, #0b1h
mov tl0, #0e0h
mov th1, #25
mov tl1, #25
mov r1, #00
call chushihua
call chuzhi
setb ea
setb et0
setb tr0
setb tr1
clr bt0
clr bt1
clr bt2
clr bt3
clr bt4
clr bt5
clr bt8
clr bt9
clr bt10
clr bt11
setb bt6
mov 35h, #0feh
mov r2, #00
mov r4, #00
;=====================================================
; 主程序
;======================================================
main:
jnb bt0, main
clr bt0
call saomiao ;扫描按键
call xianshi0 ;调用下移显示画面子程序
call xianshi ;调用触边后静态图形显示的子程序
jb bt10, loop ;判断是否触顶,=1,游戏结束,跳到满屏显示
call chudi ;调用触底子程序
call xiaohang ;调用消行判断子程序
call yanshi_40ms ;调用延时40ms消抖子程序,40ms到,BT5置1
jnb bt5, xia0
clr bt5
call panduan ;调用按键判断处理子程序
xia0: jnb bt9, xia ;图形快速下落标志位,=1快速下落
clr bt9
call xialuo ;调用图形下落子程序
ajmp main
xia: call yanshi_1s ;延时1s子程序.1s到,BT1=1
jnb bt1, main
clr bt1
call xialuo
ajmp main
loop: call yanshi_500ms ;调用延时500ms子程序,500ms到bt11=1
jnb bt11, main
clr bt11
call manping ;调用满屏全亮子程序
ajmp main
;=====================================================
; 按键扫描
;=====================================================
saomiao:
jb p3.2, qq0
setb bt2
ajmp qq
qq0: jb p3.1, qq1
setb bt3
ajmp qq
qq1: jb p3.0, qq2
setb bt4
ajmp qq
qq2: jb p3.3, qq4
setb bt8
ajmp qq
qq4: setb bt6
clr bt2
clr bt3
clr bt4
clr bt8
qq: ret
;=====================================================
; 图形下移子程序
;=====================================================
xialuo:
mov a, 35h
rl a
mov 35h, a
ret
;============================================
; 判断子程序
;=====================================================
panduan:
jnb bt2, ww0
clr bt2
jnb bt6, ww0
clr bt6
call youyi
ajmp ww
ww0: jnb bt3, ww1
clr bt3
jnb bt6, ww1
clr bt6
call zuoyi
ajmp ww
ww1: jnb bt4, ww2
clr bt4
jnb bt6, ww2
clr bt6
call zhuan
ajmp ww
ww2: jnb bt8, ww
clr bt8
jnb bt6, ww
clr bt6
call kuaixia
ww: ret
;============================================================
; 快速下落子程序
;=============================================================
kuaixia: setb bt9
ret
;============================================================
; 满屏子程序
;============================================================
manping: mov 41h, #0ffh
mov 42h, #0ffh
mov 43h, #0ffh
mov 44h, #0ffh
mov 45h, #0ffh
mov 46h, #0ffh
mov 47h, #0ffh
mov 48h, #0ffh
ret
;============================================================
; 清屏子程序
;============================================================
qingping: mov 41h, #00h
mov 42h, #00h
mov 43h, #00h
mov 44h, #00h
mov 45h, #00h
mov 46h, #00h
mov 47h, #00h
mov 48h, #00h
ret
;============================================
; 下移显示
;=====================================================
xianshi0: mov a, 35h
mov p1, 31h
mov p2, a
call delay
rl a
mov p1, #00
mov p1, 32h
mov p2, a
call delay
rl a
mov p1, #00
mov p1, 33h
mov p2, a
call delay
mov p1, #00
ret
;=====================================================
; 图形右移子程序
;=====================================================
zuoyi:
mov a, 31h
jnb acc.0, dd1
ajmp dd
dd1: mov a, 32h
jnb acc.0, dd2
ajmp dd
dd2: mov a, 33h
jnb acc.0, dd3
ajmp dd
dd3: mov a, 35h
cjne a,#0feh,sa0
call sad0
ajmp dd
sa0: mov a, 35h
cjne a,#0fdh,sa1
call sad1
ajmp dd
sa1: mov a, 35h
cjne a,#0fbh,sa2
call sad2
ajmp dd
sa2: mov a, 35h
cjne a,#0f7h,sa3
call sad3
ajmp dd
sa3: mov a, 35h
cjne a,#0efh,sa4
call sad4
ajmp dd
sa4: mov a, 35h
cjne a,#0bfh,dd
call sad5
ajmp dd
dd: ret
sad0: mov a, 33h
rr a
mov 39h,#00
mov 39h, a
anl a,43h
cjne a,#00,dd4
mov 33h, 39h
mov a, 32h
rr a
mov 39h,#00
mov 39h, a
anl a,42h
cjne a,#00,dd4
mov 32h, 39h
mov a, 31h
rr a
mov 39h,#00
mov 39h, a
anl a,41h
cjne a,#00,dd4
mov 31h, 39h
dec 51h
dd4: ret
sad1: mov a, 33h
rr a
mov 39h,#00
mov 39h, a
anl a,44h
cjne a,#00,dd5
mov 33h, 39h
mov a, 32h
rr a
mov 39h,#00
mov 39h, a
anl a,43h
cjne a,#00,dd5
mov 32h, 39h
mov a, 31h
rr a
mov 39h,#00
mov 39h, a
anl a,42h
cjne a,#00,dd5
mov 31h, 39h
dec 51h
dd5: ret
sad2: mov a, 33h
rr a
mov 39h,#00
mov 39h, a
anl a,45h
cjne a,#00,dd6
mov 33h, 39h
mov a, 32h
rr a
mov 39h,#00
mov 39h, a
anl a,44h
cjne a,#00,dd6
mov 32h, 39h
mov a, 31h
rr a
mov 39h,#00
mov 39h, a
anl a,43h
cjne a,#00,dd6
mov 31h, 39h
dec 51h
dd6: ret
sad3: mov a, 33h
rr a
mov 39h,#00
mov 39h, a
anl a,46h
cjne a,#00,dd7
mov 33h, 39h
mov a, 32h
rr a
mov 39h,#00
mov 39h, a
anl a,45h
cjne a,#00,dd7
mov 32h, 39h
mov a, 31h
rr a
mov 39h,#00
mov 39h, a
anl a,44h
cjne a,#00,dd7
mov 31h, 39h
dec 51h
dd7: ret
sad4: mov a, 33h
rr a
mov 39h,#00
mov 39h, a
anl a,47h
cjne a,#00,dd8
mov 33h, 39h
mov a, 32h
rr a
mov 39h,#00
mov 39h, a
anl a,46h
cjne a,#00,dd8
mov 32h, 39h
mov a, 31h
rr a
mov 39h,#00
mov 39h, a
anl a,45h
cjne a,#00,dd8
mov 31h, 39h
dec 51h
dd8: ret
sad5: mov a, 33h
rr a
mov 39h,#00
mov 39h, a
anl a,48h
cjne a,#00,dd9
mov 33h, 39h
mov a, 32h
rr a
mov 39h,#00
mov 39h, a
anl a,47h
cjne a,#00,dd9
mov 32h, 39h
mov a, 31h
rr a
mov 39h,#00
mov 39h, a
anl a,46h
cjne a,#00,dd9
mov 31h, 39h
dec 51h
dd9: ret
;===============图形左移子程序======================================
;通过图形移动一位,与静止图形相与,为零则移动,否则原地不动
;
;=====================================================
youyi: mov a, 31h
jnb acc.7, cc0
ajmp cc20
cc0: mov a, 32h
jnb acc.7, cc1
ajmp cc20
cc1: mov a, 33h
jnb acc.7, cc
ajmp cc20
cc: mov a, 35h
cjne a,#0feh,zz0
call scd0
ajmp cc20
zz0: mov a, 35h
cjne a,#0fdh,zz1
call scd1
ajmp cc20
zz1: mov a, 35h
cjne a,#0fbh,zz2
call scd2
ajmp cc20
zz2: mov a, 35h
cjne a,#0f7h,zz3
call scd3
ajmp cc20
zz3: mov a, 35h
cjne a,#0efh,zz4
call scd4
ajmp cc20
zz4: mov a, 35h
cjne a,#0bfh,cc20
call scd5
ajmp cc20
cc20: ret
scd0: mov a, 33h
rl a
mov 39h,#00
mov 39h, a
anl a,43h
cjne a,#00,cc2
mov 33h, 39h
mov a, 32h
rl a
mov 39h,#00
mov 39h, a
anl a,42h
cjne a,#00,cc2
mov 32h, 39h
mov a, 31h
rl a
mov 39h,#00
mov 39h, a
anl a,41h
cjne a,#00,cc2
mov 31h, 39h
inc 51h
cc2: ret
scd1: mov a, 33h
rl a
mov 39h,#00
mov 39h, a
anl a,44h
cjne a,#00,cc3
mov 33h, 39h
mov a, 32h
rl a
mov 39h,#00
mov 39h, a
anl a,43h
cjne a,#00,cc3
mov 32h, 39h
mov a, 31h
rl a
mov 39h,#00
mov 39h, a
anl a,42h
cjne a,#00,cc3
mov 31h, 39h
inc 51h
cc3: ret
scd2: mov a, 33h
rl a
mov 39h,#00
mov 39h, a
anl a,45h
cjne a,#00,cc4
mov 33h, 39h
mov a, 32h
rl a
mov 39h,#00
mov 39h, a
anl a,44h
cjne a,#00,cc4
mov 32h, 39h
mov a, 31h
rl a
mov 39h,#00
mov 39h, a
anl a,43h
cjne a,#00,cc4
mov 31h, 39h
inc 51h
cc4: ret
scd3: mov a, 33h
rl a
mov 39h,#00
mov 39h, a
anl a,46h
cjne a,#00,cc5
mov 33h, 39h
mov a, 32h
rl a
mov 39h,#00
mov 39h, a
anl a,45h
cjne a,#00,cc5
mov 32h, 39h
mov a, 31h
rl a
mov 39h,#00
mov 39h, a
anl a,44h
cjne a,#00,cc5
mov 31h, 39h
inc 51h
cc5: ret
scd4: mov a, 33h
rl a
mov 39h,#00
mov 39h, a
anl a,47h
cjne a,#00,cc6
mov 33h, 39h
mov a, 32h
rl a
mov 39h,#00
mov 39h, a
anl a,46h
cjne a,#00,cc6
mov 32h, 39h
mov a, 31h
rl a
mov 39h,#00
mov 39h, a
anl a,45h
cjne a,#00,cc6
mov 31h, 39h
inc 51h
cc6: ret
scd5: mov a, 33h
rl a
mov 39h,#00
mov 39h, a
anl a,48h
cjne a,#00,cc7
mov 33h, 39h
mov a, 32h
rl a
mov 39h,#00
mov 39h, a
anl a,47h
cjne a,#00,cc7
mov 32h, 39h
mov a, 31h
rl a
mov 39h,#00
mov 39h, a
anl a,46h
cjne a,#00,cc7
mov 31h, 39h
inc 51h
cc7: ret
;======================================================
; 图形旋转子程序
;======================================================
zhuan: cjne r1,#0, bu0
call zhuan0
ajmp bu
bu0: cjne r1,#1, bu1
call zhuan1
ajmp bu
bu1: cjne r1,#2, bu2
call zhuan2
ajmp bu
bu2: cjne r1,#3, bu3
call zhuan3
ajmp bu
bu3: cjne r1,#4, bu
call zhuan4
bu: ret
zhuan0: inc r2
cjne r2,#1, gg0
mov 31h, #10h
mov 32h, #18h
mov 33h, #10h
call yizhou
ajmp gg
gg0: cjne r2,#2, gg1
mov 31h, #38h
mov 32h, #10h
mov 33h, #00h
call yizhou
ajmp gg
gg1: cjne r2,#3, gg2
mov 31h, #10h
mov 32h, #30h
mov 33h, #10h
call yizhou
ajmp gg
gg2: cjne r2,#4, gg
mov r2, #00
mov 31h, #10h
mov 32h, #38h
mov 33h, #00h
call yizhou
gg: ret
zhuan1: inc r2
cjne r2,#1, ggg0
mov 31h, #08h
mov 32h, #18h
mov 33h, #10h
call yizhou
ajmp ggg
ggg0: cjne r2,#2, ggg
mov 31h, #30h
mov 32h, #18h
mov 33h, #00h
mov r2, #00
call yizhou
ggg: ret
zhuan2: inc r2
cjne r2,#1, hh0
mov 31h, #18h
mov 32h, #30h
mov 33h, #00h
call yizhou
ajmp hh
hh0: cjne r2,#2, hh
mov 31h, #10h
mov 32h, #18h
mov 33h, #08h
mov r2, #00
call yizhou
hh: ret
zhuan3: inc r2
cjne r2,#1, hh1
mov 31h, #20h
mov 32h, #38h
mov 33h, #00h
call yizhou
ajmp hh4
hh1: cjne r2,#2, hh2
mov 31h, #18h
mov 32h, #10h
mov 33h, #10h
call yizhou
ajmp hh4
hh2: cjne r2,#3, hh3
mov 31h, #38h
mov 32h, #08h
mov 33h, #00h
call yizhou
ajmp hh4
hh3: cjne r2,#4, hh4
mov r2, #00
mov 31h, #10h
mov 32h, #10h
mov 33h, #30h
call yizhou
hh4: ret
zhuan4: inc r2
cjne r2,#1, hh5
mov 31h, #10h
mov 32h, #10h
mov 33h, #18h
call yizhou
ajmp hh8
hh5: cjne r2,#2, hh6
mov 31h, #38h
mov 32h, #20h
mov 33h, #00h
call yizhou
ajmp hh8
hh6: cjne r2,#3, hh7
mov 31h, #18h
mov 32h, #08h
mov 33h, #08h
call yizhou
ajmp hh8
hh7: cjne r2,#4, hh8
mov r2, #00
mov 31h, #08h
mov 32h, #38h
mov 33h, #00h
call yizhou
hh8: ret
;====================================================
yizhou:
mov a, 51h
cjne a,#5, tt7
jmp tt
tt7: cjne a,#6, tt0
call yyizhou
jmp tt
tt0: cjne a,#7, tt1
call yyizhou
call yyizhou
call zhuanpan0
jmp tt
tt1: cjne a,#8, tt2
call yyizhou
call yyizhou
call yyizhou
call zhuanpan0
jmp tt
tt2: cjne a,#9, tt3
call yyizhou
call yyizhou
call yyizhou
call yyizhou
call zhuanpan0
jmp tt
tt3: cjne a,#4, tt4
call zyizhou
jmp tt
tt4: cjne a,#3, tt5
call zyizhou
call zyizhou
jmp tt
tt5: cjne a,#2, tt6
call zyizhou
call zyizhou
call zyizhou
call zhuanpan1
jmp tt
tt6: cjne a,#1, tt
call zyizhou
call zyizhou
call zyizhou
call zyizhou
call zhuanpan1
tt: ret
;=========触边旋转判断====================
zhuanpan0:
mov a, 31h
jnb acc.0, hui0
call zyizhou
ajmp hui
hui0: mov a, 32h
jnb acc.0, hui1
call zyizhou
ajmp hui
hui1: mov a, 33h
jnb acc.0, hui
call zyizhou
hui: ret
;========触边旋转判断====================
zhuanpan1:
mov a, 31h
jnb acc.7, hui3
call yyizhou
ajmp hui2
hui3: mov a, 32h
jnb acc.7, hui4
call yyizhou
ajmp hui2
hui4: mov a, 33h
jnb acc.7, hui2
call yyizhou
hui2: ret
;===========X轴右移一位=================
yyizhou:
mov a, 31h
rl a
mov 31h, a
mov a, 32h
rl a
mov 32h, a
mov a, 33h
rl a
mov 33h, a
ret
;=========X轴左移一位=================
zyizhou:
mov a, 31h
rr a
mov 31h, a
mov a, 32h
rr a
mov 32h, a
mov a, 33h
rr a
mov 33h, a
ret
;==============显示子程序==========================
xianshi: mov p1, 41h
mov p2, #0feh
call delay
mov p1, #00
mov p1, 42h
mov p2, #0fdh
call delay
mov p1, #00
mov p1, 43h
mov p2, #0fbh
call delay
mov p1, #00
mov p1, 44h
mov p2, #0f7h
call delay
mov p1, #00
mov p1, 45h
mov p2, #0efh
c
展开阅读全文