2回答

0收藏

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

51单片机 51单片机 5140 人阅读 | 2 人回复 | 2014-04-15

本帖最后由 xinxincaijq 于 2014-4-16 08:57 编辑



PS22.rar (28.08 KB, 下载次数: 6)

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. }


复制代码
分享到:
回复

使用道具 举报

回答|共 2 个

倒序浏览

沙发

┗SKY┛

发表于 2014-4-15 23:48:43 | 只看该作者

javascript:;

图片                        

捕获.JPG222.JPG (19.85 KB, 下载次数: 114)

捕获.JPG222.JPG
板凳

┗SKY┛

发表于 2014-4-16 16:50:01 | 只看该作者

有人么??99啊
您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

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