俄罗斯方块设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
本科课程设计
题目:基于单片机的8*8LED 俄罗斯方块设计姓名孙俊
学号2008130346
院(系)物理与信息科学学院电子系
专业、年级电子信息科学与技术2008级
指导教师刘美容
二○一一年十月
基于单片机的8x8 俄罗斯方块设计
一、设计任务
《俄罗斯方块》是一款世人皆知,看似简单实则变化无穷的小游戏。
本次设计以51单片机为基础,设计一款功能简单的8*8点阵俄罗斯方块游戏,我们将以汇编语言编程实现以下操作:图形的显示合成,通过按键控制图形的移动和旋转,满格消行,手动复位等。
本次设计俄罗斯方块功能简单,用单片机的最小系统就能得以实现。
而单片机的最小系统设计中实际上最重要的就是对键盘/显示器接口电路的设计,由于系统功能不同所以要求就不同,接口设计也就不同。
对一个键盘/显示器接口设计应从整个系统出发,综合考虑软、硬件特点。
其中,硬件设计包括初始的设计原理和原理图介绍,到最终的电路图实际焊接以及布局,软件设计我们会给出具体的设计方案,比如图形的显示合成,通过按键控制图形的移动和旋转,满格消行等的设计流程图,以及具体的汇编程序。
二、设计方案
本次设计初期是在keil和proteus联合仿真中进行,编程语言为51汇编语言,后期是进行实物焊接。
本次我们采用单片机STC89C52控制模块提供电源,以点阵式LED 显示,采用独立按键,直接在I/O口线上接上按键开关。
因为设计时精简和优化了电路,所以剩余的口资源还比较多,我们使用四个按键,分别是旋转键,下键,左键,右键。
这
种方案实现可行,既满足系统功能要求,又减少了系统实现的复杂度。
而由于STC89C52是一种带8K 字节闪烁可编程可檫除只读存储器的低电压,高性能COMOS8的微处理器,该器件采用ATMEL 搞密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。
89C52内置8位中央处理单元、256字节内部数据存储器RAM 、8k 片内程序存储器(ROM )32个双向输入/输出(I/O)口、3个16位定时/计数器和5个两级中断结构,一个全双工串行通信口,片内时钟振荡电路。
三、8*8俄罗斯方块硬件电路设计及原理图
(1)选用设备
AT89C51芯片一片,USB 数据线一根,共阳极的点阵屏一个,驱动三极管八个,开关按键五个,导线,限流电阻若干。
(2)硬件电路系统总框图如图所示
图1 硬件系统总框图
1)电源(5v 的稳压电源,通过整流,滤波,稳压得到) 电源电路 CPU 控制电路 按键电路 显示电路
如图2所示电路为输出电压+5V、输出电流1.5A的稳压电源。
它由电源变压器B,桥式整流电路D1~D4,滤波电容C1、C2,防止自激电容C2、C3和一只固定式三端稳压器(7805)极为简捷方便地搭成的。
220V交流市电通过电源变压器变换成交流低压,再经过桥式整流电路D1~D4和滤波电容C1的整流和滤波,在固定式三端稳压器LM7805的Vin和GND两端形成一个并不十分稳定的直流电压(该电压常常会因为市电电压的波动或负载的变化等原因而发生变化)。
此直流电压经过LM7805的稳压和C3的滤波便在稳压电源的输出端产生了精度高、稳定度好的直流输出电压。
本稳压电源可作为TTL电路或单片机电路的电源。
三端稳压器是一种标准化、系列化的通用线性稳压电源集成电路,以其体积小、成本低、性能好、工作可靠性高、使用简捷方便等特点,成为目前稳压电源中应用最为广泛的一种单片式集成稳压器件。
图2 电源电路图
2)复位电路
本设计采用手动复位电路,如图4所示,按键后:电容器被短路放电、CREST直接和VCC相连,就是高电平,此时进入“复位状态”。
松手后:电源开始对电容器充电,此时,充电电流在电阻上,形成高电平送到CREST,仍然是“复位状态”;稍后,充电结束,电流降为0,电阻上的电压也将为0,CREST降为低电平,开始正常工作。
图3 手动复位电路
2)晶振电路(提供时钟脉冲)
如图4所示,晶振其实是一个频率产生器,他主要把传进去的电压转化为频率信号。
提供给分频率一个基准的14.318MHZ的振荡频率,它是一个多谐振荡器的正回馈环电路,也就是说它把输入作为输出,把输出作为输入的回馈频率,象这样一个永无休止的循环自激过程。
图4 晶振电路
3)点阵显示屏及其驱动电路
如图5所示,三极管采用PNP型,发光二极管采用共阳型。
单片机的P1口作为数据端,P2口作为片选端。
图5 点阵显示屏及其驱动电路
4)独立按键电路
如图6、图7所示,按键K1定义为右键,按键K2定义为左键,按键K3定义为下键,按键K4定义为旋转键。
图6 按键电路图图7 按键电路仿真图
(5)系统工作原理(整个电路如图8所示)
1) 编程设置好游戏规则,通过编程器写入89C52单片机系统。
2) 由89C52单片机通过P1口输送数据,P2口片选。
3) 通过89C52单片机的RESET位来控制系统是工作或设置初值,为0就对系统进行初始化,为1系统就开始工作;通过STC89C52单片机的P3.2,P3.3,P3.4位来控制游戏方块的右移,左移,下移,P3.5位来控制俄罗斯方块的旋转。
图 8 8*8俄罗斯方块游戏整机电路原理图
四、8*8俄罗斯方块软件设计
系统软件的设置主要包含延迟时间设计、方块显示程序设计、判断按键程序、方块旋转程序、判断在下移,左移,右移,旋转时是否冲突程序、俄罗斯方块消行程序以及游戏结束界面显示程序设计。
(1)主程序流程设计,如图9所示:首先在内存分配八个字节的空间作为显示内存,每行对应一个字节的内容,一共六十四位与六十四个LED灯相对应,图形的显示通过循环的行选中,每次分别将对
应行内容送到对应端口,从而达到扫描显示的目的。
图9 主程序流程图
(2) 图像的合成,如图10所示:一共七种方块对应于0—6的标识。
将每个方块分成四个LED,分别对四个LED 进行编号(将整个点阵看成0——7行,0——7列),编号=行数*8+列数,将每个方块的四个LED编号列出来,按次序列成表格,通过标识查表得LED灯编号,然后将编号存入对应的LED内存,然后通过一定变换,将此表示此LED的内容与相应的下一行进行逻辑或操作(①将#01H左循环位
移列数的次数,②再将显示内存首地址+行数+1,再取内容,③把①②的内容相或)便实现了图像合成的目的。
图10 图像合成子程序
(3)消行处理,如图11所示:查询显示内存的各个字节是否有为#0FFH,若有则将其前面的显示内存各字节内容循环下移,最后在显示内存首地址补零。
注意:方块在下落的过程中会自动判断每一行方块是否满行,如果满行时,就会将这一行小方块的隐藏,在将上面的小方块向下移动。
当有多行同时出现这样情况时使用递归调用,实现连续消行。
图11 消行子程序
;/////////主程序/////
MAIN:
JNB SS,$;判断中断是否到来
CLR SS ;中断标志清0
ACALL HECHENG;调用移动与背景合成程序
ACALL DISPLAY;调用动态显示子程序
ACALL JIANPAN ;调用键盘扫描程序
INC R3 ;等待1秒
CJNE R3,#50,MAIN
MOV R3,#0
ACALL MOVINGDOWN ;1秒到了下移
ACALL JIESHU ;调用结束jnb sunjun, llll
sunjun555:
mov r4,#50
oooo: call jieshuhou
djnz r4,oooo
mov r4,#50
oooo1: call jieshuhou1
djnz r4,oooo1
mov r4,#50
oooo2: call jieshuhou2
djnz r4,oooo2
ljmp sunjun555
llll: JB CHONGTU,LEE_A ;判断是否冲突 JNB CHONGHE,MAIN ;判断是否需要合成 LEE_A: ACALL BACKHECHENG ;移动合成到背景 ACALL XIAOHANG ;调用消行子程序
ACALL QINGCHU ;清除移动区数据
ACALL CHUSUIJI ;出随机数
ACALL SUIJI ;通过随机数取出积木 ACALL TIHUAN3 ;新积木送旋转区
ACALL TIHUAN ;再送移动区
MOV SHUCHU,#00H ;关屏幕
AJMP MAIN1
;/////////////显示子程序///////////////
;输入:XIANSHOW0--7
;输出:SHUCHU
;功能:显示
DISPLAY:
MOV R0,#XIANSHOW0
MOV R2,#7fH
NEXT_II: MOV PIANXUAN,R2
MOV A,@R0
CPL A
MOV SHUCHU,A
ACALL DELAY
MOV SHUCHU,#0FFH
INC R0
MOV A,R2
Rr A
MOV R2,A ;片选
CJNE R0,#40H,NEXT_II
RET
;////////////////消行子程序////////////////////
;输入: BACKSHOW0--7
;输出: BACKSHOW0--7
;功能:消掉全亮的行
XIAOHANG:
XH: MOV R7,#0 ;R7赋予初值,一共判8行
MOV R0,#BACKSHOW7 ;从最底行开始判断,但当消了一行后,37H 内的数据即为
XH_1: ;上一行的数据,即继续判断上行需要消行否
MOV A,@R0 ;首先判断每一行是否为0FF
CPL A ;数据取反
JZ XIAOCHU ;如果为0(原来就为0FF),则可以去消行。
DEC R0 ;判断下一行需要消行否
INC R7
CJNE R0,#3FH,XH_1
RET
XIAOCHU:
MOV @R0,#0 ;把需要消行的那一行数据清0
X_H: MOV A,R0 ;消行当前行赋予ACC,暂存
MOV R1,A
DEC R1 ;上一行往下移
MOV A,@R1 ;上一行数据移下来,移到消行所在行
MOV @R0,A
DEC R0 ;整体往下移动一格
CJNE R0,#2FH,x_H ;30H为最上行,判断移完没有
CJNE R7,#08,XH ;判断到顶行为止
RET
;////////////////结束子程序////////////////////
JIESHU: MOV R0,#BACKSHOW0
MOV A,@R0
clr liyongzhi
cjne a,#00h,lyz
RET
LYZ: setb liyongzhi
Ret
jieshuhou: ;游戏结束后界面一
MOV XIANSHOW0,#40H
MOV XIANSHOW1,#40H
MOV XIANSHOW2,#40H
MOV XIANSHOW3,#40H
MOV XIANSHOW4,#40H
MOV XIANSHOW5,#40H
MOV XIANSHOW6,#40H
MOV XIANSHOW7,#7fh
ACALL DISPLAY
Ret
五、8*8俄罗斯方块测试结果、分析
1)按键测试
当电路连接完毕后,将写好的测试程序刷写到芯片内,K1、K2、K3 、K4以及复位按键分别给端口送高电平和低电平,通电观察即可检测。
2)点阵显示屏的测试
将串口的和电路板上的接口连接,将写好的测试程序刷写到芯片内,开电源即可测试。
3)整体电路测试
系统上电,刷写好程序即可开始测试,观测一次游戏从开始到结束的周期的显示状态是否正常,同时观察是否达到预期的显示功能。
图12 8X8led俄罗斯方块游戏实际效果
六、结论与体会
通过这次的8*8led俄罗斯方块设计与制作,从很大程度上培养了我的动手能力以及理论到实践的一种思维转换能力,让我接触到
STC89C52,了解了其内部结构与工作原理,更加深刻的认识了解了单片机产品的开发设计流程。
本系统采用MSC- 52系列单片机89C52为中心器件来设计实现8*8 led俄罗斯方块游戏, 显示方块直接通过P1、P2输出。
系统设计简便、实用性强、操作简单、程序设计简便。
系统不足之处不能计分、游戏级别的不能自由选择,游戏速度的不能自由选择等等。
同时本次设计与制作让我在对锡焊工具的熟悉程度、硬件电路的调试、焊接技术等方面都有所提高。
更重要的是让我学到了一种新的编程思维模式,让我对汇编语言的熟练度以及运用能力得到了一定的提升。