贪吃蛇——基于STM32F1x嵌入式控制平台设计小游戏移植(项目5功能2)
本项目基于STM32F103嵌入式系统学习平台,使用C语言于Keil5工具实现移植贪吃蛇小游戏功能。
标签
嵌入式系统
STM32
MPU
贪吃蛇
憨憨浩
更新2021-02-27
2609

一、项目背景

在学校的鼓励下,嵌入式学习0基础0经验的我报名参与了本次寒假在家练活动。初心只是希望能获得创新积分,而拿到板子并且观看了网上的视频教程后,我对STM32F103这类的嵌入式系统学习产生了极大的兴趣。在微信群同学们的讨论中,我也对完成本次任务产生了极大的动力。本次功能的实现花费了我较多的时间和精力,但是将它完成后的成就感是多打几把游戏无法体会到的。

二、项目要实现的功能和要达到的性能指标

根据项目要求,我选择实现功能2——移植或自己编写一款经典的游戏,并可用板上的4个按键操作,同时蜂鸣器能够发出声音,姿态传感器能够感知板子旋转的方向,自动将屏幕调整到合适观看的角度。我选择了较为简单的贪吃蛇小游戏。从要求中可以知道,我需要完成的任务总体来看有三个:

  1. 实现4个按键操作游戏;
  2. 蜂鸣器能够发出声音;
  3. MPU姿态传感器能够感知板子方向并自动调整。

      

三、项目的实施方案

   本项目的实验需要用到Keil5平台,利用最熟悉的C语言编程实现。由于网上稍微查找就能找到不少功能的源代码,所以功能的实现虽然繁琐,但还是有机会完成的。现对项目实施方案及详细内容进行简要介绍。

  • 游戏主体实现

贪吃蛇游戏本质上就是小蛇移动——吃到食物——小蛇变长的过程。在此过程中,涉及到目标产生的地点以及小蛇长度的变化。游戏结束触发的条件有两个:1.小蛇撞到地图边界;2.小蛇撞到自己的身体。

因此,在游戏主体实现的过程中,需要完成的工作有:地图构造、小蛇初始位置及移动方向、游戏结束的触发、对小蛇方向的控制、小蛇长度及运行速度的变化、目标食物的随机产生。用到的不过是一些if-else判断语句以及for循环。这些功能使用C语言工具以及网上一些参考经验能够轻松实现。在移植过程中,我根据b站正点原子课程中的讲解,一步一步学习,这门课程讲解的非常详细,我完成的也还算顺利。

FvoJM8dL1ukguPBa8MCywrKM2mj-

图1 小蛇及目标物体

FsKZJAMGtIn2e8AZnozS55iECXWy

图2 工程目录

  • 蜂鸣器发声实现

蜂鸣器发声的实现也较为简单,并且非常有趣。在微信群里发过的100步入门课程的第31步蜂鸣器驱动程序中有详细的介绍,通过16分钟的课程,我有了大致的认识和理解。我们的板子上使用的是无源蜂鸣器,需要外部给予频率,可以实现不同频率的声音。通过引脚的设定,可以控制蜂鸣器的发声频率和持续时间,通过频率的变化可以产生不同的音调,比如低音Do的频率是262Hz、Mi的频率是659Hz。

FkuGj7FLH9JhtydzjTNdmmtTqhMN

图3  蜂鸣器电路

  • MPU-6050姿态感知调整实现

除此认识MPU-6050是在做微机原理大作业的时候,当时就觉得这种芯片功能非常强大,没想到能够有机会亲身接触到它。然而实现姿态感知的过程并不简单,网上的一些方法非常的复杂,我尝试去理解,但终究无法实现。最终还是学习了100步入门课程的第89到91步——MPU6050驱动程序分析,使用STM32的硬件I2C总线做驱动,参考正点原子的MPU6050驱动程序,改动了引脚后才实现得到芯片的角速度与加速度,后续的处理还是花费了不少的时间。通过咨询已经完成任务的同学,我学到了用加速度判断角度的方式没从而实现了姿态感知与自动调整。

在游戏开始之前,利用简单的算法在屏幕上显示了一个“上”字(调用显示文字的函数LCD_ShowChinese(u16 x,u16 y,u8 *s,u16 fc,u16 bc,u8 sizey,u8 mode)较为复杂,在这里我偷懒使用了LCD_Fill函数实现),以此来检测MPU的功能是否能正常实现,结果很成功。

FoOoDMZroSbLHx6RlLPCzdgQ61MT

FpR1W5ZJdTVmyQA2ww_pp3mJYnIv

图4、5 姿态感知测试

四、项目完成情况

       本次实现功能主体——贪吃蛇小游戏:

  • 开机显示“上”字样,用于测试MPU-6050姿态,能根据持向调整屏幕显示方向;
  • 按下任意按键开始游戏,初始状态小蛇长度为4,目标物产生位置随机;
  • 小蛇每次接触目标物长度+1,移动速度逐渐加快,接触到自己身体或屏幕边缘游戏结束;
  • 游戏过程中由蜂鸣器产生bgm,游戏结束音乐停止。
  • 游戏结束刷新屏幕,重返开机显示“上”字画面。

所有要求任务完成。

五、项目总结及改进意见或后期的计划

       通过本次活动,我实现了0的突破,实现了0基础自学STM32。在本项目的实现过程中,我参考了不少的资料,利用互联网获取信息能力得以提升,也得到了不少优秀的同学的帮助,尽管素不相识,但他们还是不遗余力地帮助了我,也正是因为大家的帮助以及硬禾学堂老师的讲解,我才得以实现本次目标。在此过程中,我也认识到不少优秀的小伙伴,也是一大收获。

在实现移植小游戏功能的同时,我对自己一直以来玩的经典游戏有了更深层次的理解,感叹于行业前辈们的聪明才智。由于是第一次进行嵌入式系统的学习与实践,最终虽然完成了任务,但用户操作界面非常不友好。项目通过后,我计划把自己过程中偷懒没有学习的(诸如动态显示汉字串,利用姿态传感器控制角色等)更复杂的功能学会,尽量实现在板子上。

除此之外,我将会利用课余时间学习STM32F103的更多知识,争取实现更多的功能。也准备在本项目结束后了解更多的芯片类型,学习更多强大的嵌入式系统,丰富自己的知识面,在未来的职业生涯中一定能派上用场。感谢硬禾学堂能够给我们这次学习的机会,使我们度过一个充实的寒假。

六、参考资源

1.正点原子STM32F103的b站视频课:https://www.bilibili.com/video/BV1kx411k7JT

2.硬禾学堂STM32入门100步步步为营课程:

https://appu1kfqmyl7963.h5.xiaoeknow.com/content_page/eyJ0eXBlIjoiMyIsInJlc291cmNlX3R5cGUiOiI2IiwicmVzb3VyY2VfaWQiOiJwXzVkYzRmMTQ1Mjk3M2RfaVJtWjdvQ2YiLCJwcm9kdWN0X2lkIjoicF81ZGM0ZjE0NTI5NzNkX2lSbVo3b0NmIiwiYXBwX2lkIjoiYXBwVTFLRnFNWUw3OTYzIiwic2hhcmVfdXNlcl9pZCI6InVfNWZmZmUyOWY1MmEwZl81YTJnM1ZpU29mIiwic2hhcmVfdHlwZSI6NSwic2NlbmUiOiJcdTkwODBcdThiZjdcdTk0ZmVcdTYzYTUifQ?sw=1

3.贪吃蛇C语言实现参考内容:

https://blog.csdn.net/dengjin20104042056/article/details/93601197

4.MPU-6050的介绍与使用方法参考:https://blog.csdn.net/guosir_/article/details/78325208

附件下载
移植小游戏项目工程文件.rar
LCD.hex
团队介绍
北京理工大学电子信息工程18级魏子浩
团队成员
魏子浩
北理工电信大三考研人
评论
0 / 100
查看更多
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2023 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号