` 大家都玩过经典游戏俄罗斯方块,现在我通过51
单片机基于迪文科技的串口液晶终端把游戏的制作过程和源代码分享给大家,希望能给大家提供帮助。
1、先制作5张 需要的界面,这个通过Photoshop来处理个JPG BMP的图片都行;
2、将图片下发到液晶终端内,编号对应好;
3、程序参考如下:
;俄罗斯方块游戏程序
;V1.0 2010.8.18
;;串口0与显示终端
通信,使用0300H-03FFH作为发送缓冲区,0400H-04FFH作为接收缓冲区
$INCLUDE(C8051F410.INC)
WDT BIT P2.7 ;喂狗管脚
SYSFLAG EQU 20H
TG_FLAG BIT SYSFLAG.6 ;通关成功标志位
GOVER_FLAG BIT SYSFLAG.5 ;游戏失败标志位
FRESH_FLAG BIT SYSFLAG.4 ;刷新标志位
SYSFLAG1 EQU 21H
START_FLAG BIT SYSFLAG1.7 ;开始按钮
LEFT_FLAG BIT SYSFLAG1.6 ;左移按钮
RIGHT_FLAG BIT SYSFLAG1.5 ;右移按钮
DOWN_FLAG BIT SYSFLAG1.4 ;下移按钮
CHANGE_FLAG BIT SYSFLAG1.3 ;变形按钮
AGAIN_FLAG BIT SYSFLAG1.2 ;再来一次按钮
RXAAOK BIT SYSFLAG1.1 ;接收到AA标志位
RX232_DPL EQU 22H
RXCC EQU 23H
RX33 EQU 24H
RXC3 EQU 25H
RX3C EQU 26H
POINT_H EQU 30H ;分数寄存器高字节
POINT_L EQU 31H ;分数寄存器低字节
LINE_H EQU 32H ;被消掉的行数高字节
LINE_L EQU 33H ;被消掉的行数低字节
LEVEL EQU 34H ;游戏等级
DELAY EQU 35H
DELAY20MS EQU 36H
DELAY160MS EQU 37H
FRESH_
tiME EQU 38H
FRESH EQU 39H
FUTURE EQU 3AH ;即将出现的方块的ID号
CURRENT EQU 3BH ;目前下落的方块的ID号
LEFT_NUM EQU 3CH ;主界面运动的方块左边处于第几列
RIGHT_NUM EQU 3DH ;主界面运动的方块右边处于第几列
UP_NUM EQU 3EH ;主界面运动的方块上边处于第几行
DOWN_NUM EQU 3FH ;主界面运动的方块下边处于第几行
WSJS EQU 40H ;伪随机数
BUFFER1 EQU 41H
ORG 0000H
LJMP INITIAL
ORG 0023H
LJMP INT_LCD ;COM0 115200 与显示终端通信
ORG 002BH
LJMP SYSCLK ;定时器2 2ms定时器
ORG 0200H
INITIAL:CLR EA
MOV SP,#80H
LCALL INITCPU ;初始化单片机
MOV DELAY20MS,#00H
MOV SYSFLAG,#00H
MOV SYSFLAG1,#00H
SETB EA
MOV DPTR,#0300H
CLR A
MOVX @DPTR,A
LCALL UP_D_C ;切换到上电界面
MAIN:CPL WDT
JNB START_FLAG,MAIN ;按下确定按钮重新开始游戏
CLR START_FLAG
MOV POINT_H,#00H ;游戏刚开始,分数为0
MOV POINT_L,#00H
MOV LEVEL,#00H ;游戏刚开始,等级为0
MOV FRESH,#40
MOV FRESH_TIME,#0
MOV DELAY160MS,#0
MOV R0,#200
CLR A
MOV DPTR,#0000H ;初始化缓冲区,00代表没有小方块,FF代表有
MAIN1:MOVX @DPTR,A
INC DPH
MOVX @DPTR,A
INC DPL
DEC DPH
DJNZ R0,MAIN1
LCALL UP_D_J ;切换到运行界面
LCALL UP_D_P ;显示分数
LCALL UP_D_L ;显示等级
MOV A,DELAY20MS
MOV B,#19
DIV AB
MOV A,B
JNZ MAIN2
MOV A,#19
MAIN2:MOV FUTURE,A ;得到初始的方块
MOV A,DELAY20MS
MOV WSJS,A ;初始伪随机数
LCALL RANDOM ;随机产生一个方块
MOV DELAY,#200
MAIN3:CPL WDT
MOV A,DELAY
JNZ MAIN3
MOV SYSFLAG,#0
MAIN5:CPL WDT
JNB FRESH_FLAG,MAIN6 ;判断是否要刷新界面(根据等级定时刷新,刷新一次,方块下落一格)
CLR FRESH_FLAG
CLR LEFT_FLAG
CLR RIGHT_FLAG
CLR DOWN_FLAG
CLR CHANGE_FLAG
LCALL DOWN_PROG
JB TG_FLAG,MAIN5A ;通关成功,返回上一层,等待确定按键重新开始游戏
JB GOVER_FLAG,MAIN5B ;游戏失败,返回上一层,等待确定按键重新开始游戏
SJMP MAIN5
MAIN5A:LJMP MAIN11
MAIN5B:LJMP MAIN13
下的程序,请下载一下,当前帖子字节有限。
`