基于小安派AiPi-Eye-S1的Nes游戏机

1.作品展示

作品功能可见以下B站视频

外壳可以使用灰太狼大佬提供的外壳STL文件。在嘉立创三维猴上打印(外壳12元+快递6元)。
外壳从以下的帖子中获取:
模型分享

2.作品说明

2.1 硬件部分

硬件上使用到了AiPi-Eye-S1开发板以及3.5寸 240*320像素的电容触摸屏,使用时可以使用USB Type-C线通过开发板上的Type-C接口为设备进行供电。也可以使用锂电池给板子供电,实测壳体的液晶屏和PCB之间的间距足够放下一个3.7v的锂电池。程序下载使用USB转TTL工具。
在这里插入图片描述

2.2 软件部分

  1. 开发环境
    个人是在WSL ubuntu18.04环境下使用VSCode进行项目的开发,具体的环境搭建过程可参考帖子: 【轻松上手】1.小安派开箱及开发环境搭建)
    在这里插入图片描述

  2. ui设计
    本项目直接使用了LCD的bsp驱动来进行UI的绘制。UI界面分为两层,底层是game的界面,上浮的一层显示的是game手柄的8个触摸按键。为了方便的确定触摸按键的位置,特地在solidworks中绘制了一个草图,用草图的尺寸来方便确定每个按键的屏幕像素坐标。
    在这里插入图片描述

额外需要说明的是显示是使用的横向的坐标系,但是触摸驱动使用的是纵向的坐标系。他们的坐标原点是不一样的,需要进行坐标的变换。

在这里插入图片描述

在这里插入图片描述

  1. 程序设计思路

本项目程序直接使用官方SDK的example/hello案例上进行添加代码的,其整体的实现思路如下:

系统初始化
基于FreeRTOS创建两个任务
(1) button_task任务负责对触摸屏进行实时的读取;
(2) main_task中对输入的game rom进行读取,然后解析并模拟6502的执行。整个game的核心就在这个任务中。在完成每一行的解码后,在这个task中会及时的去渲染屏幕中的对应行。

3. 使用说明

3.1 固件烧录

以下操作需要再环境配置完成后进行。

  1. 程序编译
    在项目根目录下打开终端,输入make
    在这里插入图片描述

    如无错误,最终会显示以下内容
    在这里插入图片描述

  2. 固件烧录
    在终端中输入make flash COMX=COMxx 其中xx为实际连接的下载器的COM口号,如下图中COM口为39。
    在这里插入图片描述

    烧录正常输出:
    在这里插入图片描述

3.2 Rom替换

理论上这个项目的模拟器是支持所有不带多合一的rom的。而且由于模组的rom空间比较大,其实可以放下很多的game数据。当前预放了三个gamerom, 需要运行哪一个就去掉哪一个的注释,然后编译烧录。rom替换的具体方法可以参考:【轻松上手】小安派nes game rom替换

在这里插入图片描述

4.其他说明

  1. 因为模拟器是我在多年前用C写的,方便调试该模拟器可以运行在Windows平台上,使用SDL显示画面。当然因为当时写模拟器的时候也没有考虑音频解码,所以game是没有声音的。后续有兴趣我们可以一起来讲更优秀的nofrendo模拟器移植过来,它是支持音频的。

    当前nofrendo的移植已经编译通过正在调试。

  2. 当前触摸屏太小了,所以操作起来不是很方便。所以也在考虑使用uniapp在手机端做一个基于wifi连接的手柄。

总结一下,小安派的性能是非常强大的。玩法也是随心所欲,欢迎一起加油,把小安派用到自己想要的地方。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/173345.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

rust学习——智能指针

智能指针 在各个编程语言中,指针的概念几乎都是相同的:指针是一个包含了内存地址的变量,该内存地址引用或者指向了另外的数据。 在 Rust 中,最常见的指针类型是引用,引用通过 & 符号表示。不同于其它语言&#xf…

【Redis】Docker部署Redis数据库

Docker部署Redis数据库 1. Redis介绍2. CentOS 7 安装 & Docker 配置3. 拉取Redis 镜像、创建容器3.1 配置Docker镜像源3.2 拉取Redis 镜像3.3 容器创建 1. Redis介绍 Redis(Remote Dictionary Server ),即远程字典服务,是一个开源的使用…

新一代AI技术,引领医疗智能革新共筑未来医疗生态

加快推进数字化转型,是我国抢抓新一轮科技革命和产业变革机遇的必然选择,数字化转型已不是“选择题”,而是关乎生存和长远发展的“必修课”。在此目标下,公共服务领域迎来深刻变革,医院也不例外,数字经济的…

力扣每日一题73:矩阵置零

题目描述: 给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。 示例 1: 输入:matrix [[1,1,1],[1,0,1],[1,1,1]] 输出:[[1,0,1],[0,0,0],[1,0,1]]示例 2…

MySQL 5.7限制general_log日志大小

背景 需求: 在MySQL 5.7.41中开启general_log 并限制其大小,避免快速增长占用硬盘空间。 解决: 通过定时任务,执行简单的脚本,判断general_log 日志的大小,实现对通用查询日志的“每日备份”或“每日清…

基于群居蜘蛛算法的无人机航迹规划

基于群居蜘蛛算法的无人机航迹规划 文章目录 基于群居蜘蛛算法的无人机航迹规划1.群居蜘蛛搜索算法2.无人机飞行环境建模3.无人机航迹规划建模4.实验结果4.1地图创建4.2 航迹规划 5.参考文献6.Matlab代码 摘要:本文主要介绍利用群居蜘蛛算法来优化无人机航迹规划。 …

如何使用 Docker 搭建 Jenkins 环境?从安装到精通

不少兄弟搭 jenkins 环境有问题,有的同学用 window, 有的同学用 mac, 有的同学用 linux。 还有的同学公司用 window, 家里用 mac,搭个环境头发掉了一地。。。 这回我们用 docker 去搭建 jenkins 环境,不管你是用的是什么系统&…

一文5000字从0到1使用Jmeter实现轻量级的接口自动化测试(图文并茂)

接口测试虽然作为版本的一环,但是也是有一套完整的体系,有接口的功能测试、性能测试、安全测试;同时,由于接口的特性,接口的自动化低成本高收益的,使用一些开源工具或一些轻量级的方法,在测试用…

【PointNet—论文笔记分享】

第一个直接基于原始点云数据进行分割、分类的模型,之前都是基于多视图或者体素的方式。 论文: PointNet: Deep Learning on Point Sets for 3D Classification and Segmentation代码: TensorFlow版 Pytorch版 基本模型架构: 分别对每个点进行特征提取…

SpringBoot集成Redis Cluster集群(附带Linux部署Redis Cluster高可用集群)

目录 一、前言二、集成配置2.1、POM2.2、添加配置文件application.yml2.3、编写配置文件2.4、编写启动类2.5、编写测试类测试是否连接成功 一、前言 这里会使用到spring-boot-starter-data-redis包,spring boot 2的spring-boot-starter-data-redis中,默…

适用于物联网的UI设计工具都有哪些?

随着科学技术的飞速发展,“万物相连的互联网”时代逐渐成为现实。如今,物联网已经不是什么新词了。事实上,早在各种屏幕设备诞生之前,人们就与物理世界交织在一起,产生了无数的互动。如何将人们多年积累的互动经验与物…

windows下OOM排查

如下有一段代码 package com.lm.demo.arthas.controller;import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController;import java.util.A…

PHP危险函数

PHP危险函数 文章目录 PHP危险函数PHP 代码执行函数eval 语句assert()语句preg_replace()函数正则表达式里修饰符 回调函数call_user_func()函数array_map()函数 OS命令执行函数system()函数exec()函数shell_exec()函数passthru() 函数popen 函数反引号 实列 通过构造函数可以执…

负载均衡的综合部署练习(hproxy+keepalived和lvs-DR+keepalived+nginx+Tomcat)

一、haproxykeepalived haproxy 2台 20.0.0.21 20.0.0.22 nginx 2台 20.0.0.23 20.0.0.24 客户机 1台 20.0.0.30 这里没有haproxy不是集群的概念,他只是代理服务器。 访问他直接可以直接访问后端服务器 关闭防火墙 安装haproxy和环境: yum in…

【Spring】快速入门Spring Web MVC

文章目录 1. 什么是Spring Web MVC1.1 MVC1.2 Spring MVC 2. 使用Spring MVC2.1 项目创建2.2 建立连接2.2.1 RequestMapping 注解2.2.2 RestController 注解2.2.3 RequestMapping 使⽤2.2.4 RequestMapping 是什么请求?POST?GET?…&#xff1…

Android原生项目集成uniMPSDK(Uniapp)遇到的报错总结

uni小程s序SDK 集成到Android原生项目:老项目中用到的库较多,会出现几种冲突问题,总结如下: 报错1: Execution failed for task :app:processDebugManifest. > Manifest merger failed with multiple errors, see logs Andro…

YUV的红蓝颠倒(反色)的原因及解决

原因 UV排列反了。 比如说,NV21和YUV420SP的Y排列相同,UV则相反。给你YUV420SP,你当作NV21保存JPG,就会发生红蓝拿起。 解决办法 就是把UV互换一下。具体代码: NV21转YUV420SP的代码_nv21转yuv420格式-CSDN博客 …

SpringCloud复习:(3)LoadBalancerInterceptor

使用Ribbon时,execute方法会由RibbonLoadBalancerClient类来实现 它会调用重载的execute方法 getLoadBalancer默认会返回ZoneAwareLoadBalancer(基类是BaseLoadBalancer).此处调用的getServer方法就会根据负载均衡策略选择适当的服务器来为下一步的htt…

算法通过村第十七关-贪心|白银笔记|贪心高频问题

文章目录 前言区间问题判断区间是否重复合并区间插入区间 字符串分割加油站问题总结 前言 提示:如果生活把你的门关上了,那你就再打开,这就是门,门就是这样的。 --佚名 贪婪的思想不一定要理解的很透彻,但是贪婪的问题…

苍穹外卖-day03

苍穹外卖-day03 课程内容 公共字段自动填充新增菜品菜品分页查询删除菜品修改菜品 **功能实现:**菜品管理 菜品管理效果图: 1. 公共字段自动填充 1.1 问题分析 在上一章节我们已经完成了后台系统的员工管理功能和菜品分类功能的开发,在…