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

  在我的上一个博客小霸王游戏机手柄(一)——硬件解读中我们已经知道了手柄所用芯片及其时序功能,还知道了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 A12
	GPIO_InitStructure.GPIO_Speed=GPIO_Speed_100MHz;//速度为100M
	GPIO_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;//管脚设置B10
	GPIO_InitStructure.GPIO_Speed=GPIO_Speed_100MHz;//速度为100M
	GPIO_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,则表示相应位的按键被按下。

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值