小霸王游戏机手柄(二)——代码读取

news/2024/11/26 11:51:11/

  在我的上一个博客小霸王游戏机手柄(一)——硬件解读中我们已经知道了手柄所用芯片及其时序功能,还知道了DB9接口所用到的5个管脚中每个管脚的硬件连接及其作用,接下来就可以编写程序来读取手柄的数据了。
  在这里我们使用STM32作为硬件平台来进行代码编写。代码如下:

//管脚宏定义
#define LOAD PAout(11)
#define CLK  PAout(12)
#define DATA PBin(10)//管脚初始化函数,LOAD、CLK设置为输出,CLK设置为输入
void XBW_Init(void)
{GPIO_InitTypeDef GPIO_InitStructure; //定义结构体变量RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA|RCC_AHB1Periph_GPIOB,ENABLE); //使能端口A B时钟GPIO_InitStructure.GPIO_Mode=GPIO_Mode_OUT; //输出模式GPIO_InitStructure.GPIO_Pin=GPIO_Pin_11|GPIO_Pin_12;//管脚设置A11 A12GPIO_InitStructure.GPIO_Speed=GPIO_Speed_100MHz;//速度为100MGPIO_InitStructure.GPIO_OType=GPIO_OType_PP;//推挽输出GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_DOWN;//下拉GPIO_Init(GPIOA,&GPIO_InitStructure); //初始化结构体GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN; //输出模式GPIO_InitStructure.GPIO_Pin=GPIO_Pin_10;//管脚设置B10GPIO_InitStructure.GPIO_Speed=GPIO_Speed_100MHz;//速度为100MGPIO_Init(GPIOB,&GPIO_InitStructure); //初始化结构体
}//读取对应键状态函数
u8 XBW_Get_Data(void)
{int i;u8 Data=0;LOAD=1;     //将P1-P8的数据锁存到移位寄存器(Q1-Q8)中delay_ms(1);LOAD=0;     //设置成串行输出模式Data=DATA;  //保存手柄数据,先将Q8保存CLK=0;delay_ms(5);for(i=0;i<8;i++){Data<<=1;CLK=1;   //时钟上升沿,数据移位Data+=DATA;CLK=0;   //等待下一次上升沿delay_ms(1);}return Data;
}

  函数读取到的数据为一个8位二进制数,转换为二进制后,如果某一位为0,则表示相应位的按键被按下。


http://www.ppmy.cn/news/350663.html

相关文章

Gin微服务框架_golang web框架_完整示例Demo

Gin简介 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站 Gin是一个golang的微框架&#xff0c;封装比较优雅&#xff0c;API友好&#xff0c;源码注释比较明确&#xff0c;具有快速灵活&…

APP性能测试,你需要关注哪些指标?

一、Android客户端性能测试常见指标 1、内存 2、CPU 3、流量 4、电量 5、启动速度 6、滑动速度、界面切换速度 7、与服务器交互的网络速度 二、预期标准指定原则 1、分析竞争对手的产品&#xff0c;所有指标要强于竞品 2、产品经理给出的预期性能指标数据 3、符合业…

网易云ncm文件转mp3

本人卖了一个ipod nano6&#xff0c;帮买家导些歌&#xff0c;结果用网易云下下来一堆ncm文件&#xff0c;一脸懵逼&#xff0c;因为ipod只能放mp3文件。上网查了一下ncm文件&#xff0c;只能在会员有效期内放这个歌。 于是上网查了下&#xff0c;发现GitHub上有例程代码可以破…

SYRE蓝牙表带:让iPod nano支持蓝牙耳机

众所周知 iPod nano是个很神奇的产品&#xff0c;不单单可以听歌&#xff0c;还可以当作手表。但是&#xff0c;把iPod nano当作手表戴在手上了以后接上耳机线连接在手上不觉得很奇怪吗&#xff1f;有时候会因为动作太大会拉扯到耳机带来不便&#xff0c;或者是把耳机活生生从耳…

nano怎么设置一开始就显示时针

nano6 按下电源键时&#xff0c;是显示正式播放或目录啥的。 如果想把它当作手表的话&#xff0c;是一开始就显示时钟。 设置如下&#xff1a; 设置→通用→日期与时间→唤醒时显示时间 解决办法来自于下面的视频3分12秒 http://v.youku.com/v_show/id_XMzUwMDUxODUy.html…

鸟哥的linux私房菜学习笔记 ---第5章-2

1,bc 简易计算器2,[ctrl]d end of file3,~代表用户的主文件夹&#xff0c;是个变量 root的主文件夹在 /root4,sync 将内存中的数据写入到硬盘中&#xff0c;一般在关机之前必做步骤&#xff0c;好的习惯5,nano 简单好用的文本编辑器 nano 文件名直接打开新或已有文件 可以直接…

ubuntu18.04 安装melodic 版本ros

1 打开软件更新 选择清华源代码&#xff0c;点击关闭后&#xff0c;选择弹出的提示更新软件源。 2。设置软件源 sudo sh -c . /etc/lsb-release && echo "deb http://mirrors.tuna.tsinghua.edu.cn/ros/ubuntu/ $DISTRIB_CODENAME main" > /etc/apt/sou…

Python实现BP网络并进行语音识别(三)

title: Python实现BP网络并进行语音识别&#xff08;三&#xff09; date: 2019-06-09 20:45:40 tags: [python, BP, 语音识别] 前言 在深度学习领域&#xff0c;一份好的数据决定了成功的一半。为了得到优质的声音样本&#xff0c;我特意选取了三位相声大师的单口相声&#…