目录
1. 引言 1
1.1. 编写目的 1
1.2. 项目背景 1
2. 软硬件需求 1
2.1. 硬件部分 1
2.2. 软件部分 2
3. 仿真电路图 2
4. 初步设计 2
4.1. 总流程 2
4.2. I2C通讯 4
5. 数据处理 4
5.1. 数据存储 4
5.2. 编码 4
5.3. 解码 4
6. 独特的想法 5
6.1. 使用I2c通讯 5
6.2. 编码 5
6.3. 优化操做 5
7. 团队分工与绩效算法 5
7.1. 团队分工 5
7.2. 绩效算法 5
8. 程序兼容性说明 6git
团队Github地址:https://github.com/kielingpao/team_workgithub
1. 引言
1.1. 编写目的
本文档编写目的在于阐述项目的背景、意义,功能和需求分析、一些初步设计,数据处理,和一些程序兼容性分析。
1.2. 项目背景
俄罗斯方块是一款很是经典的游戏,它曾经形成的轰动与经济价值能够说是游戏史上的一件大事。很多同龄朋友的童年都经历过玩游戏机,其中俄罗斯方块是很是热门的,几乎家喻户晓。此次作俄罗斯方块能够说是为了缅怀童年,可是更重要的是,记念青春。
2. 软硬件需求
2.1. 硬件部分
(1) 硬件部分分为主机和遥控器,分别由两个单片机进行控制。
(2) 单片机1:负责显示游戏的界面。使用数码管显示当前得分,使用不一样颜色LED灯表示游戏过程当中和游戏结束,使用液晶屏显示界面,这个液晶的界面包括显示游戏区域、下一个方块、得分、排行榜。另外还配有蜂鸣器,当方块能够消除一行或多行的时候,蜂鸣器鸣响一秒;当游戏结束的时候,蜂鸣器鸣响三秒。
(3) Ampire12864液晶:本程序所选择的LCD是AMPIRE128×64的汉字图形型液晶显示模块,可显示汉字及图形。
(4) 单片机2::负责控制遥控器操做。按键除去复位按键以外有六个:肯定,左,右,加速,旋转,暂停。用户只须要操做遥控器则可进行游戏。用户根据按下“左,右”键来控制降落方块的位置和形状;经过按下“加速”键加速降落方块的移动;经过按下“旋转键”来控制降落方块的形状。
(5) 通讯:主机与遥控器之间使用 I2C 通讯,实现遥控器控制方块的移动及旋转。这个I2c通讯使用at24c02芯片做为中介,主要经过I2C通讯把信息发给e2prom暂时保存起来,而后e2prom也使用i2c通讯方式把信息发送给另一个单片机。I2C通讯是硬件部分的亮点。
(6) AT24C02芯片:排行榜和通讯都有用到AT24C02芯片,记录全部在该程序进行游戏的得分数据,即便是断电,得分数据依然保存在e2prom存储器中。
AT24C02芯片简介:AT24C02为I2C总线串行EEPROM储存器,它的存储容量为4k位(4096位),存储器的内部结构为512×8位,芯片具备写保护,可靠性高,擦写次数可达100万次,数据断电保存100年不变。
2.2. 软件部分
(1) 降落的方块真正的随机化,能够实现随机降落不一样形状的方块。而且能够在屏幕上显示下一个。
(2) 降落的方块不能够越过障碍方块。当已落下的方块高度超过屏幕高度的时候游戏结束。
(3) 当已落下的方块之间填满一行或多行的时候,则能够获得相应的得分,当消去1行的时候得1分;消去2行得2分;当同时消去3行的时候,获得6分;同时消去4行的时候,获得8分。
(4) 实现多种关卡,不一样的起始状况,第二关加快了游戏速度和增长了障碍方块。在达到指定分数后显示胜利标题,并切换进入下一关卡。
(5) 降落的方块在越过必定位置的时候有概率切换方块的形状,以此来增长游戏难度和丰富游戏内容,增长可玩性。
(6) 实现了排行榜,得分数据经过i2c通讯方式写进e2prom存储器中。算法
3. 仿真电路图
元器件有:两个配置有11.0592HZ晶振、复位电路、电源的AT89C51单片机,一排10K上拉电阻,一块AT24C02芯片,蓝色LED灯、绿色LED灯各一个,数码管两个,蜂鸣器一个,按键六个。windows
4. 初步设计
4.1. 总流程
图表 4
(1) 程序初始化部分
a) 程序一开始就启动定时器,可是没有开中断,为了经过定时器获取随机数种子,并且只有在游戏进入按键循环的时候才须要靠中断来控制方块降低和刷新游戏区域。
b) LCD液晶也初始化,开屏幕显示、开光标、设置显示起始行、设置页地址、列地址。
c) I2c的数据线和时钟线拉高,随时准备通讯。
d) 控制数码管显示分数零。
(2) 游戏主体
a) 按键循环,获取按键信息控制方块的移动旋转快速降低和游戏暂停。
b) 当程序检测游戏结束或者得分超过指定分数的时候,分别设置游戏结束标志位和过关标志位,while循环检测到这两个标志位就退出按键循环。
c) 若是是游戏结束标志位,则新一轮游戏速度不变、没有障碍方块,若是是过关标志位,则加快游戏速度、设置障碍方块。
4.2. I2C通讯
两个单片机之间使用i2c通讯。通常单片机之间不适用i2c通讯,由于单片机自己不具有i2c总线接口,因此只能根据I2c协议模拟时序进行通讯。初步设想单片机2负责把按键数据使用i2c通讯方式发送到e2prom的固定地址,而后e2prom也使用i2c通讯把信息传给单片机1,而后单片机1把一个无关数据放回该地址通知单片机2已经收到了数据。
5. 数据处理
5.1. 数据存储
1. 使用I2c通讯和e2prom AT24C02芯片存储数据。
2. 单片机2的按键数据经过i2c通讯写进e2prom的特定地址,单片机1每次须要按键数据的时候就经过这个地址取得数据。
3. 游戏初始化的时候,使用i2c通讯方式读取e2prom中的分数排名信息,而后将排行榜显示在液晶上面。
4. 游戏结束的时候,使用i2c通讯方式读取e2prom中保存的得分排名数据,判断得分是否能进排行榜,若是能则把数据i2c通讯写进e2prom。
5.2. 编码
使用编码的思想。将方块数据编码为unsigned int两个字节16位类型,16位表明4*4,恰好能够表明一个方块,而且每一位(也就是方块的每个方格点)表明液晶的4*4的像素点。游戏区域编码为一个unsigned int数组,数组元素为16个,也就是16行,每一位也表明液晶的4*4像素点。16个整型数组就表明的整个游戏区域,能表明液晶游戏部分40*64的像素点。全部的游戏操做移动旋转、判断覆盖、消行、游戏结束等等所有进行编码成整形数据,直接对这个数组操做,而不是直接对液晶操做。
5.3. 解码
每隔必定时间将游戏区域数据进行解码,反应在液晶上面。因为液晶每次写数据都是在某一页的某一列写一个字节,也就是竖的八行,写数据是字节倒序的,方块方格点表明液晶的4*4像素点,因此每次读取编码的竖着的两位(方格点),如果11,则在液晶部分依次写1111 1111, 1111 1111, 1111 1111, 1111 1111。如果10,则在液晶部分依次写0000 0000,0000 0000,1111 1111, 1111 1111。如果01,则在液晶部分依次写1111 1111, 1111 1111,0000 0000,0000 0000。如果00,则在液晶部分依次写0000 0000,0000 0000,0000 0000,0000 0000。依此类推,直到游戏区域所有刷新。
6. 独特的想法数组
6.1. 软件模拟I2C通讯协议
51单片机自己不具有I2C总线,不支持I2C通讯,要使用I2C通讯就要对单片机根据I2C协议的时序进行模拟。通常单片机与单片机之间的通讯方式是串口通讯。那种通讯能实现即时通讯,不须要使用中介,不须要延时。
排行榜的得分信息也是用I2c通讯方式保存在rom存储器中,因此即便是断电,信息仍然能保留不丢失。
6.2. 编码用最少的数字保存所有信息
用最少的数字保存所有信息,只须要18个整型变量就能够表达整个游戏的全部内容和数据。在须要的时候进行解码。将方块和游戏区存储在整型数组中,每一位表明液晶的4*4像素点,移动、旋转、降低都是对这个数组进行操做,而不是直接对液晶进行操做。定时器每隔必定时间对这些数据的每一位进行解码,检测每一位,若该位为1则在液晶上写4*4的黑点,若该位为0则在液晶上写4*4的白点,把每一位数据都反应在液晶上。这样处理起来很容易,并且能够成为一个通用的方法,之后处理液晶我均可以使用这种思想,把区域编码,用数组存储,而后再在液晶外面、数组里面进行任何我须要的操做,须要显示的时候,再把信息解码显示到液晶上面。
6.3. 其余优化操做
使用定时器中断每隔必定时间刷新游戏区域,而不是对整个液晶进行重绘。
只有在定时器中断刷新游戏区的时候才须要操做液晶,其余任何游戏操做都不须要处理液晶的实现,只是对数组这个简单的地方进行操做。
7. 团队分工与绩效算法
7.1. 团队分工测试
通讯:软件模拟I2C通讯协议:郑鉴优化
硬件搭建:郑鉴编码
中断、定时器控制、操做系统:郑鉴spa
音频模块:软件解码MP3文件需考虑解码速率与CPU主频、文件系统、DMA控制数据传输:郑鉴操作系统
算法:旋转算法、消行算法、游戏结束算法:余伟淇
界面:余伟淇
测试:余伟淇
文档:余伟淇
7.2. 绩效算法
成员的绩效 = 团队得到的分数 + 我的的团队贡献分
在项目alpha 和 beta 阶段评审后, 团队会获得一个项目分数(每一个成员都会获得一样的分数,作为本身的原始分数的一部分)。团队成员的努力程度不一样,达成目标的程度不一样,帮助同伴的付出不一样,那就要在“团队贡献分” 上有所区分。 全部人贡献分的总和为 20N,其中N为团队的人数。 在alpha/beta 以后,团队按照本身制定的规则,把 (20N)瓜分给每人,这就是 “团队贡献分”。
要求:请每人阅读教材 “人、绩效和职业道德”一章,而后团队开一个讨论会,协商讨论团队贡献分的分配规则。每人得分为天然数,而且每一个人分数不能相同。 请写一个团队博客详细说明每一个团队的成员计划如何帮助团队完成任务,以及团队贡献分的分配规则。
8. 程序兼容性说明
keil4,proteus7.8,zimo211,windows 七、windows10开发环境
matlab编写字模提取软件