91av视频/亚洲h视频/操亚洲美女/外国一级黄色毛片 - 国产三级三级三级三级

  • 大小: 988KB
    文件類型: .7z
    金幣: 1
    下載: 0 次
    發布日期: 2021-05-11
  • 語言: 其他
  • 標簽: stm32??PS2??

資源簡介

PS2游戲手柄資料。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

資源截圖

代碼片段和文件信息

#include?“ps2.h“
/*********************************************************
Copyright?(C)?2015-2025?LHRobot.
www.peihua13.com
File:PS2驅動程序
Author:hua13???Version:1.0?????Data:2017/11/01
Description:?PS2驅動程序
**********************************************************/
u16?Handkey;
u8?Comd[2]={0x010x42}; //開始命令。請求數據
u8?Data[9]={0x000x000x000x000x000x000x000x000x00};?//數據存儲數組
u16?MASK[]={
????PSB_SELECT
????PSB_L3
????PSB_R3?
????PSB_START
????PSB_PAD_UP
????PSB_PAD_RIGHT
????PSB_PAD_DOWN
????PSB_PAD_LEFT
????PSB_L2
????PSB_R2
????PSB_L1
????PSB_R1?
????PSB_GREEN
????PSB_RED
????PSB_BLUE
????PSB_PINK
}; //按鍵值與按鍵說明
/*************************************************************
*******函數功能:手柄接口初始化?
*******輸入:??DI->PB12?
*******輸出:??DO->PB13????CS->PB14??CLK->PB15
************************************************************/
void?PS2_Init(void)
{
????//輸入??DI->PB12
RCC->APB2ENR|=1<<3;?????//使能PORTB時鐘
GPIOB->CRH&=0XFFF0FFFF;//PB12設置成輸入 默認下拉??
GPIOB->CRH|=0X00080000;???

????//??DO->PB13????CS->PB14??CLK->PB15
RCC->APB2ENR|=1<<3;????//使能PORTB時鐘?? ??? ?? ?
GPIOB->CRH&=0X000FFFFF;?
GPIOB->CRH|=0X33300000;//PB13、PB14、PB15?推挽輸出??? ? ??
}

//向手柄發送命令
void?PS2_Cmd(u8?CMD)
{
volatile?u16?ref=0x01;
Data[1]?=?0;
for(ref=0x01;ref<0x0100;ref<<=1)
{
if(ref&CMD)
{
DO_H;???????????????????//輸出以為控制位
}
else?DO_L;

CLK_H;????????????????????????//時鐘拉高
delay_us(50);
CLK_L;
delay_us(50);
CLK_H;
if(DI)
Data[1]?=?ref?|?Data[1];
}
}

//判斷是否為紅燈模式
//返回值;0,紅燈模式
// ??其他,其他模式
u8?PS2_RedLight(void)
{
CS_L;
PS2_Cmd(Comd[0]);??//開始命令
PS2_Cmd(Comd[1]);??//請求數據
CS_H;
if(?Data[1]?==?0X73)???return?0?;
else?return?1;
}

//讀取手柄數據
void?PS2_ReadData(void)
{
volatile?u8?byte=0;
volatile?u16?ref=0x01;

CS_L;

PS2_Cmd(Comd[0]);??//開始命令
PS2_Cmd(Comd[1]);??//請求數據

for(byte=2;byte<9;byte++)??????????//開始接受數據
{
for(ref=0x01;ref<0x100;ref<<=1)
{
CLK_H;
CLK_L;
delay_us(50);
CLK_H;
??????if(DI)
??????Data[byte]?=?ref??|??Data[byte];
}
????????delay_us(50);
}
CS_H;
}

//對讀出來的PS2的數據進行處理????只處理了按鍵部分?????????默認數據是紅燈模式??只有一個按鍵按下時
//按下為0,?未按下為1
u8?PS2_DataKey()
{
u8?index;

PS2_ClearData();
PS2_ReadData();

Handkey=(Data[4]<<8)|Data[3];?????//這是16個按鍵??按下為0,?未按下為1
for(index=0;index<16;index++)
{ ????
if(?(Handkey&(1<<(MASK[index]-1)?)?)==0)
return?index+1;
}
return?0;??????????//沒有任何按鍵按下
}

//得到一個搖桿的模擬量 ?范圍0~256
u8?PS2_AnologData(u8?button)
{
return?Data[button];
}

//清除數據緩沖區
void?PS2_ClearData()
{
u8?a;
for(a=0;a<9;a++)
Data[a]=0x00;
}

評論

共有 條評論