查看: 1724|回复: 2

[求助] PS2手柄的51程序求救,为什么只有复位才能测到数据...

[复制链接]

122

主题

19

好友

4736

积分

状元

Rank: 6Rank: 6

  • TA的每日心情
    无聊
    2015-12-14 11:43
  • 签到天数: 556 天

    [LV.9]以坛为家II

    爱板会员勋章 发帖机器勋章 论坛骨干勋章 活跃会员勋章

    发表于 2014-4-15 23:43:36 |显示全部楼层
    本帖最后由 xinxincaijq 于 2014-4-16 08:57 编辑

    捕获.JPG222.JPG


    PS22.rar (28.08 KB, 下载次数: 0)
    PS2手柄的51程序求救,为什么只有复位才能测到数据???
    1. #include<reg52.h>
    2. #define  uchar unsigned char
    3. #define  uint  unsigned int
    4. #define  time  100

    5. uchar  HAND;                       
    6. uchar  keybuf0;  //手柄按键编码存储单元
    7. uchar  keybuf1;
    8. uchar  RES[8];               
    9. uchar   t=0;

    10. sbit  DAT=P3^0;
    11. sbit  CMND=P3^1;
    12. sbit  ATT=P3^2;   //手柄控制信号   
    13. sbit  CLK=P3^3;                  
    14.                  
    15.                     


    16. void delay_1ms(uchar k);
    17. void key_scan();
    18. void psout();
    19. void psinout();
    20. void delay(uchar k) ;
    21. void key_function();


    22. void main()
    23. {
    24.     while(1)
    25.     {
    26.    
    27.                 delay_1ms(1);
    28.     key_scan();
    29.                 delay_1ms(1);
    30.                                 
    31.                
    32.     key_function();    //各个按键对应的功能
    33.     }
    34. }

    35. void key_function()

    36. {
    37.                
    38.                         
    39. P0=keybuf0;                                                //RES[3]%256;
    40. P1=keybuf1;                                                //RES[4]%256;

    41. delay(5);
    42. }


    43.     void key_scan()//键扫描
    44. {
    45.     t=0;
    46.     ATT=0;         //主机读手柄先拉低ATT
    47.     HAND=0x01;     //主机发送开始命令
    48.     psinout();     //0xff
    49.     delay(5);
    50.                
    51.     HAND=0x42;     //主机发送请求数据命令
    52.     psinout();     //0x41:手柄返回请求应答信号
    53.     delay(25);
    54.                
    55.     /*psout();       //0x5A
    56.     delay(25);
    57.                
    58.     psout(); //keybuf0(空0xff)  //手柄返回按键编码第一字节
    59.     delay(25);
    60.                
    61.     psout(); //keybuf1(空0xff)  //手柄返回按键编码第二字节*/
    62.                
    63.                 HAND=0x00;     //主机发送请求数据命令
    64.     psinout();     //0x41:手柄返回请求应答信号
    65.     delay(25);
    66.                
    67.                 HAND=0x00;     //主机发送请求数据命令
    68.     psinout();     //0x41:手柄返回请求应答信号
    69.     delay(25);
    70.                
    71.                 HAND=0x00;     //主机发送请求数据命令
    72.     psinout();     //0x41:手柄返回请求应答信号
    73.     //delay(25);
    74.                
    75.     keybuf0=RES[3];              
    76.     keybuf1=RES[4];
    77.     delay(10);
    78.                
    79.     ATT=1;
    80. }


    81.     void psout()//主机接收子程序            
    82. {
    83.     int j,k;
    84.     unsigned char duf=0;
    85.     j=1;
    86.     for(k=0;k<=7;k++)       //逐位发送
    87.     {
    88.        CLK=1;
    89.        delay(5);
    90.        CLK=0;
    91.        delay(5);
    92.        if(DAT==1)
    93.           duf=duf+j;
    94.        j=j*2;
    95.        CLK=1;
    96.        delay(5);
    97.      }
    98.     RES[t++]=duf;
    99.                 //if(t==6)t=0;
    100. }

    101.   void psinout()//手柄发送子程序
    102. {
    103.     uchar buf,duf=0;
    104.     uchar i,j=1;
    105.     buf=HAND;
    106.     for(i=0;i<=7;i++)     //逐位接收     
    107.     {
    108.      CLK=1;
    109.      delay(5);
    110.      if(buf&0x01)
    111.         CMND=1;
    112.      else
    113.         CMND=0;
    114.      buf=buf>>1;
    115.      CLK=0;
    116.      delay(5);
    117.      if(DAT==1)
    118.         duf=duf+j;
    119.      j=j*2;
    120.      CLK=1;
    121.      delay(5);
    122.     }
    123.     RES[t++]=duf;
    124. }


    125.     void delay(uchar k)         
    126. {
    127.    uchar i;
    128.    for(i=0;i<k;i++);
    129. }




    130. void delay_1ms(uchar k)
    131. {
    132.    do
    133.    {
    134.     TMOD=0x01;
    135.     TH0=-(300/256);
    136.     TL0=-(300%256);
    137.     TR0=1;
    138.     while(!TF0);
    139.     TF0=0;
    140.    }while (k--);
    141.          TR0=0;
    142.          TMOD=0x00;
    143. }


    复制代码
    回复

    使用道具 举报

    122

    主题

    19

    好友

    4736

    积分

    状元

    Rank: 6Rank: 6

  • TA的每日心情
    无聊
    2015-12-14 11:43
  • 签到天数: 556 天

    [LV.9]以坛为家II

    爱板会员勋章 发帖机器勋章 论坛骨干勋章 活跃会员勋章

    发表于 2014-4-15 23:48:43 |显示全部楼层
    javascript:;

    图片                        
    捕获.JPG222.JPG
    回复

    使用道具 举报

    122

    主题

    19

    好友

    4736

    积分

    状元

    Rank: 6Rank: 6

  • TA的每日心情
    无聊
    2015-12-14 11:43
  • 签到天数: 556 天

    [LV.9]以坛为家II

    爱板会员勋章 发帖机器勋章 论坛骨干勋章 活跃会员勋章

    发表于 2014-4-16 16:50:01 |显示全部楼层
    有人么??99啊
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    关闭

    站长推荐上一条 /6 下一条


    手机版|爱板网 |网站地图  

    GMT+8, 2016-12-4 08:06 , Processed in 0.123379 second(s), 12 queries , Memcache On.

    苏公网安备 32059002001056号

    Powered by Discuz!

    回顶部