FC手柄键值读取

小霸王游戏机手柄(一)——硬件破解   小霸王游戏机可以说是陪伴了我们大半个童年,还记得小时候和朋友同学们一起玩小霸王游戏机时的兴奋。   这里沾一下小霸王游戏机的手柄   从图片中可以看出,小霸王游戏机的手柄接口从外形上类似我们常说的DB9接口,但是其引脚定义与引脚功能与DB9接口差别较大。 1、DB9接口如下: 其引脚定义为: 引脚序号 2 3 5 1、4、6 7、8 信号定义 TXD RXD GND 内部相连... 阅读详情
AI摘要

本文介绍了FC手柄的两种类型及其控制电路组成,详细解释了手柄的10个按键功能(实际上为8个独立按键)及其实现连发功能的原理。此外,还提供了一段用于读取手柄按键值的伪代码,展示了如何通过编程实现对手柄输入的读取。

FC手柄,大致可分为两种:一种手柄插口是11针的,一种是9针的,可以直接和DR9的串口头对插。
FC手柄有10个按键(实际上只有8个):
上、下、左、右、Start、Select、A、B、A连发、B连发。
A和A连发是一个键值,而B和B连发也是一个键值,只是连发按键当你一直按下的时候,会不停的发送(方便快速按键,比如发炮弹之类的功能)。
FC手柄的控制电路,由1个8位并入串出的移位寄存器(CD4021),外加一个时基集成电路(NE555,用于连发)构成。读取手柄按键值的信息十分简单:先Latch(锁存键值),然后就得到了第一个按键值(A,下降沿采集),之后在7个Clock的作用下,依次读取其他按键的键值,总共8个按键键值。

读写时序图:

这里写图片描述

code

//手柄延迟函数
//t:要延迟的时间
void JOYPAD_Delay(u16 t)
{
    while(t--);
}
//读取手柄按键值.
//FC手柄数据输出格式:
//每给一个脉冲,输出一位数据,输出顺序:
//A->B->SELECT->START->UP->DOWN->LEFT->RIGHT.
//总共8位,对于有C按钮的手柄,按下C其实就等于A+B同时按下.
//按下是1,松开是0.
//返回值:
//[7]:右
//[6]:左
//[5]:下
//[4]:上
//[3]:Start
//[2]:Select
//[1]:B
//[0]:A
u8 JOYPAD_Read(void)
{
    vu8 temp=0;
    u8 t;
    JOYPAD_LAT=1;   //锁存当前状态
    JOYPAD_Delay(80);
    JOYPAD_LAT=0; 
    for(t=0;t<8;t++)
    {
        temp>>=1;    
        if(JOYPAD_DAT==0)temp|=0x80;//LOAD之后,就得到第一个数据
        JOYPAD_CLK=1;               //每给一次脉冲,收到一个数据
        JOYPAD_Delay(80);
        JOYPAD_CLK=0;   
        JOYPAD_Delay(80); 
    }
    return temp;
}
STM32F1开发指南笔记38----游戏手柄实验 相信80后小时候都玩过FC游戏机(又称:红白机/小霸王游戏机),那是一代经典,给童年带来了无限乐趣。本章,介绍如何通过STM32来驱动FC游戏机手柄,将FC游戏机的手柄作为战舰STM32开发板的输入设备(综合实验可以直接通过这个手柄来玩FC游戏)。 main.c函数 #include "led.h" #include "delay.h" #include "key.h" #include "sys.h" #include "lcd.h" #include "usart.h" #include " 阅读详情

相关推荐

基于ESP32-S3的Cardputer复古游戏站开发全流程解析

嵌入式系统开发是物联网和智能硬件的核心技术之一,其原理在于通过微控制器在资源受限的环境下实现特定功能。在技术价值上,嵌入式开发能够将计算能力赋予小型化、低功耗设备,广泛应用于便携设备、智能家居和工业控制等领域。以游戏模拟器为例,它需要在有限的内存和算力下,通过软件模拟经典游戏硬件的CPU、图形和音频处理单元,实现跨平台兼容。本文聚焦于如何利用ESP32-S3芯片的240MHz双核处理器和外部PSRAM,在Cardputer这类“卡片电脑”上,从开发环境搭建、模拟器核心移植、输入输出适配到内存与功耗优化,完整

weixin_34054931的博客 548

童年神机小霸王(六) 手柄

首发公号:Rand_cs,求关注支持 Controller&Format Controller 本文讲述 NES 的输入设备,最为常见的就是手柄 joypad: 一般支持两个手柄,手柄 1 和手柄 2 分别映射到 CPU 的地址空间 0x4016 和 0x4017,我们可以从这两个寄存器读出手柄按键的状态,1 代表按下,0 表示弹起状态。 手柄的内部有个移位寄存器来存放这些键的状态,每次从 0x4016 读取的数据只表示一个键的状态,需要连续读取 8 次才能读取所有键的状态,8 个键的读取顺序.

weixin_46645613的博客 6398

STM32游戏手柄实验:从按键扫描到串口协议完整实现

嵌入式开发中,GPIO控制、定时器中断、状态机与串口协议是绕不开的基础技能。机械按键的抖动问题直接影响输入可靠性,而定时器中断与状态机消抖正是解决这一问题的经典方案。通过合理设计按键矩阵扫描逻辑,再配合带校验的串口帧协议,就能让手柄数据稳定传输到上位机。ADC采样摇杆模拟量、组合键宏设计则进一步扩展了交互维度,让课设作品接近真实游戏手柄体验。本文以STM32F103为例,从硬件选型、CubeMX初始化、定时器扫描、消抖状态机到USART组包逐层展开,并给出可复现的代码与调试技巧。无论你是学习嵌入式开发还是准

weixin_29182481的博客 297

使用树莓派读取游戏手柄数据

使用树莓派读取游戏手柄数据 本教程使用树莓派读取游戏手柄数据,python3版本,可将数据读取为list。 大致思路是使用joystick软件,解析出手柄的数据,保存在文件中,再读文件数据。考虑到sd卡读写次数有限,将上述临时文件放在内存当中。 一、在shell环境下先安装手柄的操作软件 #1.更新包信息 sudo apt-get update #2.安装手柄软件 sudo apt-get install joystick 二、测试软件是否正常工作 插上手柄,在shell中输入 cat /dev/input

lianqingde的博客 3874

x86_64 Linux 复古游戏机模拟器集合 marley 配置与排错指南

在 Linux 平台上体验经典老游戏,模拟器是不可或缺的工具,而面向 x86_64 架构的模拟器集合往往比单一模拟器更具实用价值。这类工具通常采用核心与前端分离的架构,由核心负责还原真实主机的 CPU、图形与音频逻辑,由前端统一管理窗口、输入和配置。动态重编译技术则是提升模拟性能的关键,能够将旧主机指令实时翻译为宿主机器码,配合丰富寄存器与缓存资源,让 8 位家用机到 16 位掌机游戏都能流畅运行。统一配置体系与插件式核心管理,使得手柄映射、音频缓冲、BIOS 加载和 ROM 目录规划都能在集中框架内完成,

weixin_34194087的博客 477

qt的gamepad模块读取xbox手柄按键

qt的gamepad模块读取xbox手柄按键

【正点原子STM32连载】 第四十一章 游戏手柄实验 摘自【正点原子】STM32F103 战舰开发指南V1.2

FC游戏机曾经是一统天下(现在也还是很多人玩),红极一时,那时任天堂单是FC机的主机的发售收入就超过全美国的电视台的收入的总和。本章,我们将使用STM32来驱动FC手柄,实现手柄控制信号的读取,我们先来了解一下FC手柄。FC手柄,大致可分为两种:一种手柄插口是11针的,一种是9针的。但11针的现在市面上很少了(因为11针手柄是早期FC组装兼容机最主要的周边),现在几乎都是9针FC组装手柄的天下,所以我们本章使用的是9针FC手柄,该手柄还有一个特点,就是可以直接和DB9的串口公头对插!

weixin_55796564的博客 2407

FC游戏机手柄原理图

任天堂FC手柄原理图

STM32上使用HAL库驱动9针FC手柄实现游戏自由!

本文介绍了FC游戏手柄的驱动实现方案。FC手柄采用CD4021移位寄存器和NE555时基电路设计,通过Clock、Data和Latch三个信号线传输按键数据。使用STM32的GPIO口模拟时序读取8个按键状态(A、B、SELECT、START及方向键)。文中提供了双人游戏手柄的驱动代码,包括引脚定义、GPIO初始化和按键读取函数实现。通过锁存当前状态后移位读取数据的方式获取按键值,按下为0,松开为1。该方案完整实现了FC手柄的功能,可用于怀旧游戏开发。

qq_34885669的博客 670

FC游戏机电路原理图

84版任天堂红白机原理图,可以根据这个原理图制作pcb板

FC-SCH-PCB.rar_FC游戏机原理_fc 电路图_fc单芯片 1818_fc游戏机电路_fc芯片 原理

FC游戏机电路原理图,1818P芯片,游戏手柄电路,射频电路等等。

使用F1C200S从零制作掌机之USB游戏手柄

按键键值定义和对应关系,使用以下程序测试。插入USB即可自动识别。

weixin_36117563的博客 889

nes.rar_nes手柄_nes游戏_woreucb_单片机nes游戏_游戏机

FC、NES游戏机手柄驱动程序及时序图,51单片机程序

第四篇:手把手教你移植任天堂,没有声音、无需外置SD卡、可使用独立按键也可使用外置手柄,本人使用的芯片为ESP32,移植到STM32均可使用。(本篇主要介绍joypad这个文件,按键移植)

第四篇:手把手教你移植任天堂,没有声音、无需外置SD卡、可使用独立按键也可使用外置手柄,本人使用的芯片为ESP32,移植到STM32均可使用。(本篇主要介绍joypad这个文件,按键移植)

yuweize520的博客 1249

基于STM32的FC游戏手柄控实验

相信80后小时候都有玩过FC游戏机(又称:红白机/小霸王游戏机),那是一代经典,给我们的童年带了了无限乐趣。本章,我们将向大家介绍如何通过STM32来驱动FC游戏机手柄,将FC游戏机的手柄作为战舰STM32开发板的输入设备(综合实验可以直接通过这个手柄来玩FC游戏)。在本章中,我们将使用STM32驱动FC手柄,将手柄的按键键值等信息通过TFTLCD模块显示出来。

手柄操控电路原理图+PCB源文件-电路方案

STM32+液晶屏,实时操控电路。

玩转easyARM imax283A开发版(二),移植NES模拟器并增加按键驱动,让板子可以玩超级玛丽游戏

移植移植infoNES模拟器到嵌入式linux上,并增加支持声音输出和按键 代码放在了github上。 https://github.com/yongzhena/infoNES 先来个效果截图: 按键驱动源码: #include <linux/module.h> #include <linux/kernel.h> #include &lt...

猫哥 的沉淀、积累、总结。天天学习,好好向上...c/c++,嵌入式 linux,Android,HarmonyOS,AIOT) 2352

从零开始的计网学习——物理层

计算机网络对于IT人不论是就业还是升学都是核心的一门课程,一起从零开始,学习计算机网络!

Nimrod__的博客 2万+

ESP32S3红白机模拟器实战:从选型到自制掌机全记录

红白机模拟器是嵌入式领域经典的实时系统挑战,其核心在于用软件精确复现6502 CPU、PPU渲染、APU音频以及Mapper切换逻辑。普通单片机往往因内存不足或单核性能受限而难以流畅运行,而ESP32S3凭借双核240MHz、片内512KB SRAM以及可外扩PSRAM的特性,成为低成本自制掌机的理想平台。通过PSRAM扩展存储帧缓冲与ROM,利用双核分工处理模拟器主循环与音频/屏幕刷新,再配合I2S音频输出和SPI屏幕驱动,即可在ESP32S3上稳定运行魂斗罗、超级马里奥等经典游戏。本文从硬件选型、模拟器

weixin_33896726的博客 364

树莓派4B安装 ubuntu20.04 & VNC远程桌面 & 安装ROS noetic

树莓派4B安装ubuntu20.04 & VNC远程桌面1、安装ubuntu方式1:下载Imager文件。方式2:下载镜像文件。2、查询树莓派 IP 地址3、使用ssh远程登录树莓派4、更新源地址5、更新6、安装桌面环境7、允许root登陆8、登陆远程桌面9、设置中文 1、安装ubuntu 方式1:下载Imager文件。...

weixin_44415639的博客 2万+

【人工智能】大模型可以分为L0层:基础大模型/通用大模型、L1层:行业大模型、L2层:细分场景模型三个层级

大模型确实可以分为L0、L1、L2三个层级,这种分层架构不仅有助于提升模型的泛化能力和适应性,还能更好地满足不同行业和场景的需求。华为盘古大模型的分层架构(L0、L1、L2)在多个证据中得到了详细描述和验证。例如,华为云盘古大模型3.0明确分为L0基础大模型、L1行业大模型和L2场景模型三层架构。此外,其他来源也一致支持这一分层架构,如用友网络的企业服务大模型、智谱AI的GLM-4系列等。

奶爸的编程之路,也就一周冷个三天 3983
上一篇: STM32 CAN总线说明
下一篇: C语言memcpy和memmove函数的理解和区别
炒青蛙
博客等级 码龄13年 53粉丝 19原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值