)
【立创开发板】梁山派贪吃蛇基于GD32的ST7789屏幕驱动与PSP摇杆游戏机实战一最近有不少朋友在玩立创EDA的梁山派开发板问我能不能用它做个好玩的小项目。正好手头有块小屏幕和一个PSP摇杆我就琢磨着不如做个掌上游戏机吧从零开始用GD32单片机驱动屏幕、读取摇杆、播放声音最后再写个贪吃蛇游戏放进去听起来就很有意思。这个系列教程我就带着大家一步步把这个想法变成现实。咱们不搞虚的就从最基础的硬件选型、电路设计再到屏幕、摇杆这些外设的驱动移植手把手教你。即使你是嵌入式新手跟着做下来也能收获一个能玩、能学的完整项目。今天这第一篇咱们先搞定“硬件”和“电路”这两大块。1. 硬件选型与采购清单做硬件项目第一步就是把需要的零件都找齐。我这次做的贪吃蛇游戏机核心就是“显示”、“控制”和“互动反馈”。下面是我实际采购的器件清单你可以照着买也可以根据手头资源灵活替换。1.1 核心显示ST7789驱动的IPS屏显示是游戏机的眼睛。我选择了一块1.69英寸的LCD屏分辨率是240x280。这块屏有几个优点很适合我们驱动芯片是ST7789这是一款非常常见的LCD驱动IC资料多社区支持好移植驱动会轻松很多。接口是SPI串口相比并口屏SPI屏接线少通常只需要4-6根线节省单片机IO口布线也简单。IPS材质可视角度大颜色表现也比传统的TN屏好很多玩游戏观感更佳。注意购买时一定要确认是“ST7789驱动”的“SPI接口”屏。不同驱动芯片的初始化命令完全不同。采购信息商品1.69寸LCD显示屏 240*280 ST7789驱动 串口IPS屏来源淘宝提示你可以直接用我提供的淘宝链接或者在电商平台搜索“ST7789 1.69 IPS”也能找到类似产品。1.2 灵魂操控PSP风格摇杆控制是游戏机的手。为了有掌机的感觉我选择了PSP同款的超薄模拟电位器摇杆。它本质上是一个双轴X轴和Y轴的电位器随着你推动摇杆会输出变化的电压单片机通过ADC模数转换器读取这个电压值就能知道摇杆的方向和幅度。采购信息商品PSP摇杆 超薄电位器来源淘宝关于摇杆帽我最初买了PSP1000的摇杆帽但发现并不完全匹配最后是用热熔胶固定的。所以这里不太建议你单独购买原装的摇杆头通常也够用。如果你追求完美手感可以尝试寻找尺寸更匹配的或者发挥动手能力改造一下。1.3 动作按键与复位键除了方向我们还需要确认A、返回B等动作键。我用了点不一样的A/B键为了获得更好的手感我直接用了机械键盘的青轴准备后期配上好看的键帽。咔哒咔哒的确认感玩游戏很带劲。菜单键/复位键这两个键使用频率较低我用的是最普通的轻触按键再套上一个按键帽成本低也够用。采购信息轻触按键商品轻触按键 按键帽来源淘宝1.4 沉浸感加持震动与音频好的游戏体验离不开声音和震动反馈。震动马达我选择了一种焊接面积比较大的扁平马达。这种马达的好处是容易手工焊接固定也稳。震动效果可以用来表示蛇撞墙或者吃到食物。来源立创商城提示在立创商城搜索“振动马达”选那种引脚焊盘大的就行。音频喇叭为了能发出游戏音效我选用了一个3020规格、4欧姆的小喇叭。这个尺寸和阻抗比较常见也容易驱动。来源淘宝2. 电路设计思路与原理图分析零件齐了接下来就得设计电路把它们“粘”在一起并连接到我们的主控——梁山派GD32开发板上。我用立创EDA画了原理图咱们分模块来看。2.1 供电是根本5V充放电一体模块整个系统需要稳定的电源。我直接采用了立创开源平台上的一个5V充放电一体模块。这个模块集成度非常高它能把锂电池的电压比如3.7V升压到5V给系统供电同时自带充电管理功能可以通过Micro USB口给电池充电。用这个模块省去了自己设计充电、升压电路的麻烦非常方便。电路连接思路电池正负极接到模块的B和B-。模块的OUT和OUT-输出5V这就是我们整个游戏机的主电源VCC_5V。Micro USB口只用于充电。2.2 连接屏幕SPI接口接线我们的屏幕是SPI接口需要连接以下几根线屏幕引脚连接到梁山派引脚作用VCCVCC_5V或3.3V电源。注意查看屏幕规格书确认是5V还是3.3V供电。GNDGND电源地。SCL/SCK任意一个SPI的CLK引脚 (如 PA5)SPI时钟线由单片机产生。SDA/MOSI对应SPI的MOSI引脚 (如 PA7)SPI数据线单片机通过它向屏幕发送数据和命令。RES任意一个GPIO (如 PB0)复位引脚。拉低一段时间再拉高用于硬件复位屏幕。DC任意一个GPIO (如 PB1)数据/命令选择引脚。告诉屏幕接下来发送的是命令拉低还是显示数据拉高。CS任意一个GPIO (如 PA4)片选引脚。拉低时屏幕才响应SPI通信。如果只有一块屏可以一直拉低。BLKVCC_5V或3.3V(通过三极管控制)背光控制。最简单的方法是直接接电源常亮。如果想控制亮度可以用一个GPIO通过三极管或MOS管来控制。提示RES、DC、CS这三个引脚不参与SPI数据传输只起到控制作用所以用普通的GPIO口就行非常灵活。2.3 读取摇杆ADC是关键PSP摇杆输出的是模拟电压。我们需要用梁山派上的ADC模数转换器来读取它。X轴和Y轴的输出引脚分别连接到梁山派的两个ADC输入通道例如PA0和PA1。摇杆的VCC接3.3V注意不是5V避免损坏ADCGND接系统地。通常摇杆在中心位置时输出电压大约是VCC/2即1.65V。向前/向右推电压升高向后/向左推电压降低。我们在程序里通过判断ADC读取的数值范围来确定方向。2.4 驱动喇叭功放电路单片机GPIO口的驱动能力很弱直接接喇叭是没声音的。所以我们需要一个简单的功放电路来放大信号。我使用了一个非常常见的功放芯片LM4871也可以用其他如8002等。单片机的一个GPIO口具有PWM功能更好输出音频信号连接到功放芯片的输入。功放芯片的输出直接驱动4欧姆的喇叭。功放芯片的电源来自VCC_5V注意加上滤波电容以减少电源噪声对声音的干扰。2.5 控制马达与按键震动马达马达的驱动电流比GPIO大需要用三极管或者MOS管来开关控制。单片机的一个GPIO口连接三极管的基极三极管的集电极-发射极串联在马达的供电回路中。GPIO输出高电平时三极管导通马达震动。机械轴/轻触按键这些按键的一端接地GND另一端连接到单片机的GPIO口并且在该GPIO口上启用内部上拉电阻。这样按键未按下时GPIO读到的是高电平因为上拉按键按下时GPIO被拉到地读到低电平。程序里检测这个电平变化就知道按键是否被按下了。3. 项目核心我们要学会什么硬件搭好了就像有了身体。接下来我们要给它注入灵魂——软件。通过这个项目咱们可以重点攻克以下几个嵌入式开发的经典问题IPS显示屏ST7789驱动代码的移植这是重中之重。我们需要理解SPI通信时序并根据ST7789的数据手册编写初始化序列和画点、画图函数最终在屏幕上显示图像。方向摇杆的工作原理及调试学习ADC的配置与使用掌握如何将模拟电压值转换为数字方向信号并处理摇杆的“死区”问题中心位置的小幅波动。贪吃蛇游戏的逻辑思维这是纯软件逻辑涉及链表或数组管理蛇身、食物随机生成、碰撞检测、分数计算等是锻炼编程思维的好例子。音频文件的输出如何将简单的蜂鸣声或WAV格式的音效文件通过PWM或DAC方式播放出来增加游戏趣味性。4. 下一步与进阶思考做完基础功能这个游戏机还有很大的完善空间这也是我们后续可以深入的方向解决屏幕闪烁直接操作显存画图可能会闪屏。可以引入**双缓冲区Double Buffer**机制在后台缓冲区画好一整帧图像再快速切换到前台显示画面就流畅了。制作游戏菜单不止有贪吃蛇可以做个菜单界面选择游戏、设置音量等。读取SD卡文件把游戏资源如图片、音效、多个游戏ROM放在SD卡里需要时再读取解放单片机有限的Flash空间。使用字库显示中文在屏幕上显示漂亮的汉字为菜单和游戏信息显示打下基础。好了硬件选型和电路设计的部分就先讲到这里。你可以根据上面的清单采购元件并在立创EDA等工具中尝试绘制自己的原理图。下一篇教程我们将正式进入软件部分从点亮第一块ST7789屏幕开始。