3355|0

423

帖子

9

TA的资源

纯净的硅(初级)

楼主
 

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

本帖最后由 穿越火线大月 于 2014-4-16 18:15 编辑

为什么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 }




void delay_1ms(uchar k)
{
   do
   {
    TMOD=0x01;
    TH0=-(300/256);
    TL0=-(300%256);
    TR0=1;
    while(!TF0);
    TF0=0;
   }while (k--);
         TR0=0;
         TMOD=0x00;
}

[url=]附件[/url]

捕获.JPG222.JPG (14.35 KB, 下载次数: 2)

捕获.JPG222.JPG

PS21.rar

28.02 KB, 下载次数: 12

此帖出自单片机论坛
点赞 关注
 

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表