内容介绍
内容介绍
经典游戏:“俄罗斯方块“项目:
一、所用开发板资源
- 定时器4
- LCD——SPI协议
- 按键——轮询扫描
- MPU6050——I2C协议
二、各模块功能设置
按键:
按键为硬件下拉,初始化时只需要保持默认。
蜂鸣器:
该项目的板子是无源的蜂鸣器,所以如果我们需要使其发出我们所希望的声音,在引脚上我们要手动设置好点平改变的频率和持续的时间,这样才能使其发出我们希望的声音。
LCD:
从LCD的电路图和stm32芯片的管脚对应下,可以在lcd_init.h和lcd_init.c进行管脚配置,即对结构体变量各个参量进行赋值,即可在屏幕得到相应图形。
mpu6050:
mpu6050与姿态。当然,这只是得到了mpu6050的角速度和加速度的原始数据而已,想要知道板子对应的姿态还需要对其进行姿态解算。我在这里采用了以加速度判断角度的方式,通过把bitch,roll,yaw角得出的方式,判断各个姿态,达成了对板子屏幕调整的目的。
按键检测:
按键检测使用轮询方式进行检测。因为仅仅有4个按键,资源消耗不大,这样操作比较简单。
游戏逻辑主体:
- 用23×16的Status数组来显示每一个小区域是否有方块填充。当方块移动时,Status数组值也在一直修改。
- 自底向上逻辑思维。左侧方块区域降落的为10×10像素的黑边灰体的方块,右侧NEXT区域为5×5的黑边灰体的方块显示,于是建立Draw_Realbox和Draw_Realbox1两个函数,分别绘制10×10和5×5的方块。用同样的思想,绘制填充色为白色的方格,即是删除了原来的方格,绘制10x10的方格的程序如下所示:
- 有了基本方块,可以用case语句来组成不同的图形。一共设计了19种基本图形,下面是未变换的7种基本图形。
- 碰撞检测:通过图形移动前后Status的sum值是否相同来判断是否发生了碰撞,当发生碰撞时,根据情况判断图形将要消除、停止或者转向游戏结束。
三、程序运行过程
- 进行延迟、LCD屏、按键、蜂鸣器、I2C控制器、MPU6050的初始化;
- 清屏、进入初始“Welcome“界面;
- 按住K1,进入游戏进行界面。从19个图形中选取4个图形,为其在屏幕上显示。其中一个在屏幕左侧下落,其余3个作为将来掉落的,显示在屏幕右侧。四个按键控制正在掉落图形的变换、下落、左移、右移。当判断四周有障碍物时停止移动,当一行满的时候进行消除操作,上面的方块下移,并且蜂鸣器发生声音,右侧Score加1。当右侧Score每加10时,Level加1,图形掉落速度会加快。当图形碰触界面上沿时,游戏结束,进入游戏结束界面(在每一个界面都会调用mpu6050姿态传感器判断屏幕方向,并修改显示至正确的方向);
- 在游戏结束界面,显示“GAME OVER“和此次游戏获得的分数,按K1键回到Welcome界面,循环以上,继续进行游戏。
四、项目完成功能
- 游戏界面显示:共有三个阶段的界面需要显示,分别为:初始“Welcome“界面、游戏进行界面、游戏结束界面。游戏的逻辑功能和手机上的小游戏相似,并提供计分功能。
- 根据重力调整时钟位置,LCD屏幕的显示会随着器件的转动而发生相应的改变,从而将屏幕更改到适合观看的角度。
- 通过4个按键控制图形的变换、下落、左移、右移。按键对应不同的功能:K1:图形变换、K2:加快下落、K3:图形左移、K4:图形右移。
五、感想与体会
本次项目我收获了很多东西,这是我第一次接触STM32开发板,之前自己只有一些FPGA的开发经验,对于单片机,特别是其底层的寄存器部分很头疼。经过这几周的学习,自己在嵌入式系统开发过程中掌握了很多经验,虽然对底层寄存器级别的实现还了解的不是很清楚,但已经找到了学习的方向。
感谢硬禾学堂给我的这次机会,我会在以后继续努力。希望可以用嵌入式系统实现更多好玩的东西,为未来的生活带来便捷。
软硬件
元器件
电路图
附件下载
俄罗斯方块(Brandon_Yang).rar
俄罗斯方块源代码
工程打开方式.txt
“俄罗斯方块”工程打开方式
团队介绍
该项目由北京理工大学杨琨一人独自完成。
团队成员
杨琨
北京理工大学18级电子信息工程专业学生
评论
0 / 100
查看更多