[求助] 为什么PS2手柄的数据很不稳定,需要复位才能采集到

穿越火线大月   2014-4-16 10:30 楼主
为什么PS2手柄的数据很不稳定,需要复位才能采集到,求救 我用的是无线PS2手柄 #include #define uchar unsigned char #define uint unsigned int #define time 100 uchar HAND; uchar keybuf0; //手柄按键编码存储单元 uchar keybuf1; uchar RES[8]; uchar t=0; sbit DAT=P3^0; sbit CMND=P3^1; sbit ATT=P3^2; //手柄控制信号 sbit CLK=P3^3; void delay_1ms(uchar k); void key_scan(); void psout(); void psinout(); void delay(uchar k) ; void key_function(); void main() { while(1) { delay_1ms(1); key_scan(); delay_1ms(1); key_function(); //各个按键对应的功能 } } void key_function() { P0=keybuf0; //RES[3]%256; P1=keybuf1; //RES[4]%256; delay(5); } void key_scan()//键扫描 { t=0; ATT=0; //主机读手柄先拉低ATT HAND=0x01; //主机发送开始命令 psinout(); //0xff delay(5); HAND=0x42; //主机发送请求数据命令 psinout(); //0x41:手柄返回请求应答信号 delay(25); /*psout(); //0x5A delay(25); psout(); //keybuf0(空0xff) //手柄返回按键编码第一字节 delay(25); psout(); //keybuf1(空0xff) //手柄返回按键编码第二字节*/ HAND=0x00; //主机发送请求数据命令 psinout(); //0x41:手柄返回请求应答信号 delay(25); HAND=0x00; //主机发送请求数据命令 psinout(); //0x41:手柄返回请求应答信号 delay(25); HAND=0x00; //主机发送请求数据命令 psinout(); //0x41:手柄返回请求应答信号 //delay(25); keybuf0=RES[3]; keybuf1=RES[4]; delay(10); ATT=1; } void psout()//主机接收子程序 { int j,k; unsigned char duf=0; j=1; for(k=0;k<=7;k++) //逐位发送 { CLK=1; delay(5); CLK=0; delay(5); if(DAT==1) duf=duf+j; j=j*2; CLK=1; delay(5); } RES[t++]=duf; //if(t==6)t=0; } void psinout()//手柄发送子程序 { uchar buf,duf=0; uchar i,j=1; buf=HAND; for(i=0;i<=7;i++) //逐位接收 { CLK=1; delay(5); if(buf&0x01) CMND=1; else CMND=0; buf=buf>>1; CLK=0; delay(5); if(DAT==1) duf=duf+j; j=j*2; CLK=1; delay(5); } RES[t++]=duf; } void delay(uchar k) { uchar i; for(i=0;i 本帖最后由 穿越火线大月 于 2014-4-16 18:15 编辑
  • 捕获.JPG222.JPG

    PS21.rar (2014-4-16 10:31 上传)

    28.02 KB, 下载次数: 12

回复评论

暂无评论,赶紧抢沙发吧
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复