单片机应用进阶--俄罗斯方块游戏板--开发详细介绍-经典开发流程.ppt

上传人:本田雅阁 文档编号:2066687 上传时间:2019-02-09 格式:PPT 页数:46 大小:2.95MB
返回 下载 相关 举报
单片机应用进阶--俄罗斯方块游戏板--开发详细介绍-经典开发流程.ppt_第1页
第1页 / 共46页
单片机应用进阶--俄罗斯方块游戏板--开发详细介绍-经典开发流程.ppt_第2页
第2页 / 共46页
单片机应用进阶--俄罗斯方块游戏板--开发详细介绍-经典开发流程.ppt_第3页
第3页 / 共46页
亲,该文档总共46页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《单片机应用进阶--俄罗斯方块游戏板--开发详细介绍-经典开发流程.ppt》由会员分享,可在线阅读,更多相关《单片机应用进阶--俄罗斯方块游戏板--开发详细介绍-经典开发流程.ppt(46页珍藏版)》请在三一文库上搜索。

1、基于8052单片机和816点阵屏,俄罗斯方块游戏板,点击图片进入,Step 1.硬件构成介绍游戏板所用主要器件及其要实现的功能 1.1 核心处理器-STC80C52RC 1.2 8x8单色点阵-LG12088BH-W 1.3 4-to-16 Line Decoder-MM74HC154 1.4 四位八段共阳数码管-LG5641BH 1.5 同向锁存器-SN74HC573AN 1.6 开关按键 1.7 焊接实物图: Step 2.仿真软件辅助设计Proteus 7.10仿真模块展示 Step 3.C程序模块简要说明,开发概览,Step 1.硬件构成及功能简介,1.核心处理器 STC80C52RC

2、 8051-based Fullly Static 24MHz CMOS controller with 32 I/O Lines 3 Timers/Counters 8 Interrupts/2 Priority Levels UART Three-Level Program Memory Lock 8K Bytes Flash Memory 128 Bytes On-chip RAM 功能:整个游戏板的控制中心,1.核心处理器 最小系统电路 12MHz晶振 RC复位电路 5V直流电源,Step 1.硬件构成及功能简介,2.8x8单色点阵 LG12088BH-W 主要参数 驱动电流:205m

3、A 颜色:红色 规格:88黑底 数量:2 信号源:由译码器提供16行扫描信号,由锁存器提供8位 显示信号和驱动电流。 功能:提供816个像素点的显示屏,为游戏提供必要的 图形显示模块。,Step 1.硬件构成及功能简介,3.4-to-16 Line Decoder MM74HC154 关键参数 真值表 引脚图,Step 1.硬件构成及功能简介,3.4-to-16 Line Decoder 信号源:P2低四位(P1.0至P1.3),使能E1接P2.7,E2接地 功能:为816点阵提供16行低电平扫描信号。,Step 1.硬件构成及功能简介,4.四位八段共阳数码管 LG5641BH 主要参数: 驱

4、动电流:10mA左右 信号源:用两块锁存器分别控制位选信号和段选信号。 功能:为游戏板提供必要的分数显示模块。,Step 1.硬件构成及功能简介,5.同向锁存器 SN74HC573AN 关键参数 真值表: 引脚图: 驱动性:可驱动数码管和点阵正常点亮 数量:3块,Step 1.硬件构成及功能简介,5.同向锁存器 .作为点阵显示信号输送和驱动的锁存器(一块) 信号源:单片机P3I/O 功能:给点阵送显示信号并提供驱动电流。(LE接地),Step 1.硬件构成及功能简介,5.同向锁存器 .作为P0口拓展和数码管位选、段选信号输送以及驱动 电流提供锁存器(两块)。 信号源:单片机P0口(已上拉10K

5、电阻)。 两个锁存控制端接在单片机P2口。 功能:为数码管送入段选信号和位选信号,提供电流驱动,Step 1.硬件构成及功能简介,6.开关按键 一个自锁开关:用作整个游戏板的开关(带发光二极管)。 六个按键:一个用作复位键,其余五个用作人为控制输入。 信号源:人为击按。 功能:Start/Suspend键:游戏开始和暂停控制 Up键:控制形状逆时针旋转 Left和Right键:控制形状左右移动一格 Down键:控制形状快速下降,Step 1.硬件构成及功能简介,焊接实物图:,Step 1.硬件构成及功能简介,点阵和单片机正面,点阵和单片机反面,焊接实物图:,Step 1.硬件构成及功能简介,数

6、码管正面,数码管反面,焊接实物图:,Step 1.硬件构成及功能简介,程序运行时状态,Proteus 7.10仿真模块展示 单片机最小系统模块 按键模块,Step 2.仿真软件辅助设计,Proteus 7.10仿真模块展示 点阵显示模块,Step 2.仿真软件辅助设计,Proteus 7.10仿真模块展示 四位数字显示模块,Step 2.仿真软件辅助设计,Proteus 7.10仿真模块展示 仿真运行时Proteus设计文件视频文件,Step 2.仿真软件辅助设计,视频文件 资料简单的操作示意.avi,Proteus设计文件 俄罗斯方块-高度仿真版.DSN,详细内容见附件,Step 3.C程序

7、模块简要说明,附件1:Keil工程文件夹 俄罗斯方块keil文件,附件2:C51程序文件 elsfk.c,附件3:C51程序文件word版 俄罗斯方块C程序.doc,/* 名称:基于8052单片机和8X16点阵屏俄罗斯方块游戏板 时间:2012年05月23日17时 单位:武汉理工大学信息学院电子1003班 作者:电子那点事(新浪微博账号,欢迎关注) */ #include #include #include #define uchar unsigned char sbit slock=P27; /译码器输出使能端 sbit upkey=P23; /“旋转图形/向上”按键 sbit leftke

8、y=P21; /“左移/向左”按键 sbit rightkey=P22; /“右移/向右”按键 sbit downkey=P20; /“快速下移/向下”按键 sbit duan=P25; /数码管段选信号所用锁存器的锁存允许端 sbit wei=P26; /数码管位选信号所用锁存器的锁存允许端 sbit startsuspendkey=P24; /“开始/暂停/继续”多功能切换按键,Step 3.C程序模块简要说明,/*图形编码机制介绍* 1.由于俄罗斯方块图形的宽度和高度最多只有四位,所以要以4X4为基本单元。 2.硬件采用16行扫描、8位送显示信号 3.各个图形的宽度不一致,所以要人为给图

9、形设定居中位置。 若图形宽度为偶数可直接将其居中,若为奇数则靠左居中。 4.由于图形需要旋转,所以由基本的图形会衍生出另外3种图形。 5.因此每个图形应该给定4个8位的二进制码,并放入一个二维数组里。 6.经典俄罗斯方块游戏里有19种不同形状的方块,包括旋转得到的。 7.数组的第一个下标为该图形的编号 */ uchar code allshape194= 0x00,0x00,0x18,0x18,0x10,0x10,0x10,0x10,0x00,0x00,0x00,0x3c, 0x00,0x08,0x18,0x10,0x00,0x00,0x30,0x18,0x00,0x10,0x18,0x08,

10、 0x00,0x00,0x18,0x30,0x00,0x08,0x08,0x18,0x00,0x00,0x38,0x08, 0x00,0x18,0x10,0x10,0x00,0x00,0x20,0x38,0x00,0x10,0x10,0x18, 0x00,0x00,0x08,0x38,0x00,0x18,0x08,0x08,0x00,0x00,0x38,0x20, 0x00,0x00,0x10,0x38,0x00,0x08,0x18,0x08,0x00,0x00,0x38,0x10, 0x00,0x10,0x18,0x10; /*/,Step 3.C程序模块简要说明,/数码管数形显示编码 uc

11、har code number10=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90; /位选信号编码,方便写循环使用 uchar code weima4=0x01,0x02,0x04,0x08; /各个图形的宽度属性,用于判断左移和右移的步格数上限 char shapewidth19=2,1,4,2,3,2,3,2,3,2,3,2,3,2,3,3,2,3,2; /旋转图形时,用于改变图形的编号以实现图形的切换 char shaperotate19=0,2,1,4,3,6,5,8,9,10,7,12,13,14,11,16,17,18,15;

12、/用于存储方块降落后固定显示的图形信息 uchar staticdata20=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xff; /规定一次性消掉的行数的分数奖励机制 uchar rate5=0,1,3,6,10; /*/,Step 3.C程序模块简要说明,/*全局变量声明*/ char y;/方块位置属性:底部下落的高度,y=0时:刚刚出现,y=15时:下落到屏幕最底部 char shapenum;/方块形状属性:从0到18 int left; /方块位置属性:方块偏离居中位置的格数,不同的方块left值的上限不同 int mark; /玩家分数变量 in

13、t speed; /方块下落速度变量 int initialspeed;/方块下落的初始速度 int systemspeed;/系统下落速度,此值会随着玩家分数的增加而减小,相应的下落速度会增大 int fastspeed;/当用户按下down键时,方块下落速度为此值 int k;/一个全局循环变量,“帧数”变量 int startcontrol=1;/开始画面状态指示变量,为1时说明程序进入开机欢迎界面 int suspendcontrol=0;/游戏暂停与游戏继续画面状态指示变量,为1说明处在暂停界面。 int randnum;/随机数变量,用于产生随机方块 /*/,Step 3.C程序模

14、块简要说明,/*函数声明*/ void delayms(int); /粗略延时函数 uchar move(uchar,int);/对二进制码实行移位,可为负值 void shapedisplay(); /对点阵扫描一场,对数码管扫描一场,用于显示图形和数字 void keyscan();/对所有键盘扫描一次,并执行相应运算和操作 uchar check(char,int);/用于检查方块将要下落的位置或是将要旋转的位置是否有障碍 uchar shapedisappear();/用于消行,返回一次性消掉的行数 numberdisplay(int amark);/用于四位数字显示 void sta

15、rtimage();/游戏等待开始画面函数 void overimage();/游戏结束后的画面 void dataset();/对数据初始化,为游戏重新开始做准备 /*/,Step 3.C程序模块简要说明,/*主函数*/ void main() char j; startimage(); /进入开机,函数内有键盘扫描,只有按下“开始”键会退出函数,否则不退出 dataset(); /对数据进行初始化 while(1) /进入大循环 k=speed; /确定显示的帧数 while(k-) keyscan(); /扫描键盘,放入高速循环语句中提高键盘的响应速度,并检测此时用户是否有相应请求 sh

16、apedisplay(); /显示图形和数字 y+; /图形下落一格,Step 3.C程序模块简要说明,if(check(shapenum,left) /在没有显示之前判断将要下落的位置是否有障碍物,如果有障碍就进入到if语句中 if(y=1) /如果y=1;说明方块刚出现就遇到障碍物了,这时游戏需结束 overimage(); /进入游戏结束画面,此函数内没有键盘扫描,运行一段时间会自动退出 startimage(); /又进入开机画面 dataset(); /对数据进行初始化,将前一用户数据清零 else /遇到障碍物,但还不至于图形不能出现 for(j=0;j4;j+) /将下落形状的值

17、赋给固定图形,形成停留显示的效果 staticdatay+j+=move(allshapeshapenumj,left); ,Step 3.C程序模块简要说明,mark+=rateshapedisappear(); /消掉已拼满的函数,并记录所得分数 y=0; /为下一个方块赋属性值:从第一行出现 left=0; /为下一个方块赋属性值:居中显示 randnum=rand()%19;shapenum=randnum; /为下一个方块赋属性值:给定形状 systemspeed=initialspeed-10*(mark/40); /计算相应分数下的系统速度值,分数越高,速度越快 speed=sy

18、stemspeed; /将此值赋给速度控制量 /*/,Step 3.C程序模块简要说明,/*自定义函数*/ void delayms(int xms) /粗略的延时函数 int i,j; for(i=xms;i0;i-) for(j=110;j0;j-); /*/ uchar move(uchar aa,int anum) /移位函数 if(anum=0) aa=(-anum); return aa; /*/,Step 3.C程序模块简要说明,void shapedisplay() /显示函数 uchar j; for(j=y3?3-y:0;j4;j+) /显示动态方块 slock=1;P1=

19、j+y-3;P3=move(allshapeshapenumj,left); slock=0;delayms(1);P3=0x00; for(j=0;j16;j+) /显示静态方块 slock=1;P1=j;P3=staticdataj+3; slock=0;delayms(1);P3=0x00; numberdisplay(mark); /分数显示 /*/,Step 3.C程序模块简要说明,numberdisplay(int amark) /大数拆分并显示,带去无效零功能 char i; uchar num4; num0=amark/1000%10;num1=amark/100%10;num

20、2=amark/10%10;num3=amark%10; if(amark10) /显示一位数 for(i=3;i4;i+) P0=0xff; duan=1; P0=numbernumi; duan=0; P0=0x00; wei=1; P0=weimai; wei=0; delayms(1); wei=1; P0=0x00; wei=0; ,Step 3.C程序模块简要说明,else if(amark100) /显示两位数 for(i=2;i4;i+) P0=0xff; duan=1; P0=numbernumi; duan=0; P0=0x00; wei=1; P0=weimai; wei

21、=0; delayms(1); wei=1; P0=0x00; wei=0; ,Step 3.C程序模块简要说明,else if(amark1000) /显示三位数 for(i=1;i4;i+) P0=0xff; duan=1; P0=numbernumi; duan=0; P0=0x00; wei=1; P0=weimai; wei=0; delayms(1); wei=1; P0=0x00; wei=0; ,Step 3.C程序模块简要说明,else /显示四位数 for(i=0;i4;i+) P0=0xff; duan=1; P0=numbernumi; duan=0; P0=0x00;

22、 wei=1; P0=weimai; wei=0; delayms(1); wei=1; P0=0x00; wei=0; return 0; /*/,Step 3.C程序模块简要说明,void keyscan() /键盘扫锚并执行用户输入的指令 /按键无效条件:1.左移超边缘;2.左移遇障碍;3.处在欢迎界面;4.处在暂停界面 if(leftkey=0 ,Step 3.C程序模块简要说明,/按键无效条件:1.右移超边缘;2.右移遇障碍;3.处在欢迎界面;4.处在暂停界面 if(rightkey=0 ,Step 3.C程序模块简要说明,/按键无效条件:1.翻转超左右边缘;2.翻转遇障碍;3.处在

23、欢迎界面;4.进入暂停界面 if(upkey=0 ,Step 3.C程序模块简要说明,if(downkey=0 /按键命令:使进入继续游戏状态 while(!startsuspendkey) ,Step 3.C程序模块简要说明,if(startsuspendkey=0 /等待结束暂停状态的命令 ,Step 3.C程序模块简要说明,if(startsuspendkey=0 /*/,Step 3.C程序模块简要说明,uchar check(char ashapenum,int aleft) /判断方块是否会遇到障碍物 char i=3,j=0; while(!j /返回0,说明没有障碍 /*/,S

24、tep 3.C程序模块简要说明,uchar shapedisappear()/方块落定后消掉拼满的行,并使没有拼满的行整体下移填补空缺行 char i,j,r=4; for(i=0;i0;j-) staticdataj=staticdataj-1; i-,r-; return 4-r; /函数返回一次性消掉的行的数目 /*/,Step 3.C程序模块简要说明,void startimage() /开机欢迎画面,在没有按键作用的时候会不断执行 uchar i,j; startcontrol=1; while(startcontrol) for(i=10;i0;i-) for(j=0;j16;j+

25、=2) slock=1;P1=j;P3=0xaa; slock=0;delayms(1);P3=0x00; for(j=1;j16;j+=2) slock=1;P1=j;P3=0x55; slock=0;delayms(1);P3=0x00; keyscan(); /随时响应用户输入 ,Step 3.C程序模块简要说明,for(i=10;i0;i-) for(j=1;j16;j+=2) slock=1;P1=j;P3=0xaa; slock=0;delayms(1);P3=0x00; for(j=0;j16;j+=2) slock=1;P1=j;P3=0x55; slock=0;delayms

26、(1);P3=0x00; keyscan(); /随时响应用户输入 /*/,Step 3.C程序模块简要说明,void overimage() /游戏结束画面,分数会强制闪烁8次,并自动结束 int i,j; for(j=0;j8;j+) for(i=0;i200;i+) numberdisplay(mark); delayms(500); /*/,Step 3.C程序模块简要说明,void dataset() /数据全部清零,重新开始游戏 char j; startcontrol=1; suspendcontrol=0; y=0; left=0; shapenum=0; initialspeed=100; speed=initialspeed; systemspeed=initialspeed; fastspeed=5; randnum=rand()%19; shapenum=randnum; mark=0; for(j=0;j19;j+) /清除点阵上的显示数据 staticdataj=0; /*/,Step 3.C程序模块简要说明,

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

当前位置:首页 > 其他


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