標題:
基于STM32的PS2手柄智能車程序
[打印本頁]
作者:
2225384891
時間:
2018-12-2 08:41
標題:
基于STM32的PS2手柄智能車程序
單片機源程序如下:
#include <pstwo.h>
u16 Handkey;
u8 Comd[2]={0x01,0x42}; //開始命令。請求數(shù)據(jù)
u8 Data[9]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; //數(shù)據(jù)存儲數(shù)組
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 推挽輸出
}
//向手柄發(fā)送命令
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]); //請求數(shù)據(jù)
CS_H;
if( Data[1] == 0X73)
return 0;
else
return 1;
}
//讀取手柄數(shù)據(jù)
void PS2_ReadData(void)
{
volatile u8 byte=0;
volatile u16 ref=0x01;
CS_L;
PS2_Cmd(Comd[0]); //開始命令
PS2_Cmd(Comd[1]); //請求數(shù)據(jù)
for(byte=2;byte<9;byte++) //開始接受數(shù)據(jù)
{
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的數(shù)據(jù)進行處理 只處理了按鍵部分 默認數(shù)據(jù)是紅燈模式 只有一個按鍵按下時
//按下為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];
}
//清除數(shù)據(jù)緩沖區(qū)
void PS2_ClearData()
{
u8 a;
for(a=0;a<9;a++)
Data[a]=0x00;
}
復制代碼
所有資料51hei提供下載:
部分程序.7z
(183.17 KB, 下載次數(shù): 61)
2024-10-26 16:55 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
作者:
往昔呀
時間:
2018-12-29 20:57
請問此處的PB12是不是對應單片機上的串口B12?如果可以的話,請盡快回復好嗎?謝謝
作者:
kyh21
時間:
2019-12-16 19:49
往昔呀 發(fā)表于 2018-12-29 20:57
請問此處的PB12是不是對應單片機上的串口B12?如果可以的話,請盡快回復好嗎?謝謝
很多板子上的gpiob12寫的就是b12,省空間
作者:
750273008
時間:
2020-4-23 02:03
//PS2_ReadData(); //讀手柄數(shù)據(jù) //data8=PS2_AnologData(PSS_LY)-127; //紅燈模擬量 PSS_RX PSS_RY PSS_LX PSS_LY
作者:
wsy允
時間:
2021-7-9 09:30
請問這個stm32f103能用嗎
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1