
基于立创梁山派和天魁星复刻的游戏机
简介
因为很想了解小时候,那些游戏机的原理,所以刚好看到立创的梁山派可以学习复刻的游戏机教程,就刚好来试试手
简介:因为很想了解小时候,那些游戏机的原理,所以刚好看到立创的梁山派可以学习复刻的游戏机教程,就刚好来试试手开源协议
:GPL 3.0
描述
项目简介
本项目是基于立创梁山派和天魁星复刻的游戏机,可以实现nes游戏的游玩
项目功能
本设计是基于立创梁山派的游戏机;设置有一个1.69寸的ipsLCD的屏幕,用来显示多彩画面;psp超薄vr摇杆,用来操作人物进行移动和画面选项的切换等等;屏幕下面三个按钮分别是左边的可以确认,加音量,中间的是进行复位,返回;右边的是可以减小音量和返回界面。右边两个按键是作为游戏中的操作按键。
项目参数
- 本设计采用GD32F470ZGT6的梁山派作为mcu,具有高性能,高闪存;
- 本设计采用1.69ipsLCD屏幕显示,显示多彩的游戏画面;
- 选用psp超薄vr摇杆,具有具有灵活的滑动手感;使用电位器模拟x, y 轴,驱动它只需有两个ADC检测,可以满足一般需求.
- 选用耳机孔设计与喇叭输出既满足了对声音外放的需求,也可以插入耳机线,安静有简洁,做到随时切换。电路中使用单片机DAC模拟输出,驱动方便简单
- 选用 EEPROM 具有容量大,存储快,驱动简单的特点;
- 设计按键,分别用来模拟各种游戏中的动作按键与实现游戏机的功能切换
原理解析(硬件说明)
本项目由以下部分组成,电源部分、屏幕部分、主控部分、摇杆部分,按键部分,本项目主要是通过梁山派开发板和天魁星拓展板进行游戏机的开发
屏幕驱动电路设计:
选用中景园1.69寸屏幕,给屏幕采用ST7789V 芯片 SPI驱动,使用开发只需移植官方案例,使用简单。屏幕采用240*280分辨率, 具有显示清晰,色彩鲜明,驱动简单等特点。可以结合单片机的 SPI 协议进行通信
声音输出电路:
用耳机孔设计与喇叭输出既满足了对声音外放的需求,也可以插入耳机线,安静有简洁,做到随时切换。电路中使用单片机DAC模拟输出,驱动方便简单。
电源管理电路:电源是电阻分压连接单片机引脚通过 ADC 功能实现对电池电量的监测
存储电路:选用 EEPROM 具有容量大,存储快,驱动简单的特点
按键:多个按键,多种选择,用来模拟游戏机的功能切换与人物互动
震动马达:实现游戏机的反馈效果
软件代码
main.c
#include "main.h"
#define Printf Printf0
#define Print Print0
#define Println Println0
#define Printfln Printfln0
int main(void)
{
nvic_priority_group_set(NVIC_PRIGROUP_PRE4_SUB0);
nvic_irq_enable(SysTick_IRQn, 0, 0); // Delay延时
nvic_irq_enable(TIMER2_IRQn, 1, 1); // System系统计时
nvic_irq_enable(TIMER4_IRQn, 2, 2); // DacAudio音频
nvic_irq_enable(USART0_IRQn, 3, 3); // 串口0
nvic_irq_enable(TIMER3_IRQn, 4, 4); // Task任务
Delay_Init(); // 延时
Serial0_Init(115200); // 串口0
Protocol_Init(); // 通信协议
DataType_Init(); // 数据类型
Lcd_Init(); // LCD屏幕
Gui_Init(); // GUI工具
App_Init(); // 应用层
Led_Init(); // LED灯
Key_Init(); // 按键
Random_Init(); // 随机数
ImitateI2C_Init(); // 模拟I2C
Eeprom_Init(); // EEPROM存储
Adc_Init(); // ADC模拟电压采集
Dac_Init(); // DAC模拟电压输出
DacAudio_Init(); // DAC音频输出
PwmMotor_Init(); // PWM驱动实心马达
System_Init(); // 系统计时
Println("----------- main -----------");
Printfln("%s", __DATE__);
Printfln("%s", __TIME__);
while (1)
{
Main_Run0();
}
}
void Main_Run0(void)
{
App_Task();
}
void Main_Run1(void)
{
DacAudio_Task(); // DAC音频输出任务
Key_Task(); // 独立按键任务
Serial0_Task(); // 串口0 接收、发送和处理任务
Led_Task(); // LED灯任务
AdcKey_Task(); // ADC摇杆任务
AdcBat_Task(); // ADC电池采集任务
PwmMotor_Task(); // PWM电机驱动任务
}
其余代码在下面工程附件里
## 注意事项
* 天魁星和梁山派不要插反了,摇杆对着type—c口
1、学习目标:掌握嵌入式项目的开发流程,知道如何设计一个游戏机硬件电路、软件编程以及系统调试等能力。
2、功能介绍:
实现LCD显示游戏内容;
实现psp摇杆控制角色的移动;
实现五方按键控制界面的切换;
使用独立按键控制角色执行相应动作;
具备声音输出功能;
通过flash保存游戏数据;
3、技能掌握
- 硬件开发能力
1.1 学习嵌入式项目电路分析
阅读和理解嵌入式项目原理图,如游戏机硬件电路。
学习如何分析电路中的关键部分,如电源、信号处理、通信接口等。
1.2 元器件选型与数据手册阅读
学习如何根据需求选择合适的元器件。
阅读并理解元器件的数据手册,了解其基本特性、工作参数和限制。
1.3 原理图设计与PCB设计
使用嘉立创EDA软件进行原理图设计。
学习PCB布局和布线规则,进行PCB设计。
1.4 了解特定电路的设计
深入学习SPI通讯协议屏幕、模拟按键、音频功放等电路的工作原理和设计要点。
1.5 仪器使用和电路分析能力
掌握万用表、示波器、信号发生器、学生电源等仪器的使用方法。 - 软件开发能力
2.1 GD32基础功能及外设使用
学习GD32微控制器的架构、功能和外设接口。
编写代码实现GPIO、UART、SPI等外设的初始化与通信。
2.2 ADC采集原理与实现
学习ADC(模数转换器)的工作原理和配置方法。
编写代码实现ADC采集,用于读取五向按键值和电池电压。
2.3 DAC原理与音频输出
学习DAC(数模转换器)的工作原理和音频编码格式。
编写代码实现音频输出,如播放游戏音效。
2.4 SPI协议与LCD驱动
深入学习SPI通信协议及其在LCD驱动中的应用。
编写LCD驱动代码,实现屏幕显示游戏内容。
2.5 图片取模与UI界面制作
学习图片取模方法,将图片转换为可在LCD上显示的格式。
使用图形设计软件(如Photoshop、GIMP等)制作游戏UI界面。
2.6 游戏机基本工作原理
了解游戏机的基本工作原理,如游戏逻辑、数据存储和读取等。
编写代码实现游戏机的基本功能,如角色控制、动作执行等。
2.7 嵌入式软件开发与调试
掌握嵌入式软件开发的基本流程和方法。
学会使用keil进行代码调试和性能优化。
学习如何阅读和修改开源代码,以提高开发效率和质量。 - 系统调试与集成
将硬件和软件部分进行集成,并进行系统调试。
测试游戏机的各项功能是否正常工作,如显示、按键控制、音频输出等。
根据测试结果进行问题排查和修改,直到游戏机功能完善且稳定。 - 总结与提升
在学习的过程中,注定是磕磕碰碰的,面对我平时不怎么会用的DAC,学习起来还是有点难度,我想我在之后的学习应该要加强DAC的学习。希望能继续跟着立创继续开展梁山派的拓展学习
设计图

BOM


评论