【单片机】模拟PS/2鼠标的问题,求大神帮帮忙

2019-07-15 14:25发布

本人目前想用普通的单片机模拟一个PS/2 鼠标 、、然而出了 很多问题 。。求大神帮助。。
单片机使用的是51内核   , PS/2的 时钟和数据线 都接在I/O 口上 ,并且能输出5V左右,拉高拉低都不成问题。。时钟线接在中断0上、、、
然后根据PS/2协议,写了程序。。。。但是开机和主机的交互有问题。。。没法识别  
PS2RecChar是单片机接收到的主机发送的指令。。。然后这个switch 是根据指令返回给主机的,OnPS2SendChar();是单片机发送函数。
switch(PS2RecChar)
        {                         
                case 0xC8 :OnPS2SendChar(0xFA);break;                  
                case 0x64 :OnPS2SendChar(0xFA);break;
                case 0x50 :OnPS2SendChar(0xFA);break;
                case 0x0A :OnPS2SendChar(0xFA);break;
                case 0x03 :OnPS2SendChar(0xFA);break;
                case 0xE9 :OnPS2SendChar(0xFA);OnPS2SendChar(0x00);
                                   OnPS2SendChar(0x02);OnPS2SendChar(0x64);break;
                case 0xE8 :OnPS2SendChar(0xFA);Delay40us();
                                   OnPS2SendChar(0xFA);break;
                case 0xE7 :OnPS2SendChar(0xFA);break;
                case 0xE6 :OnPS2SendChar(0xFA);break;                  
                case 0xF6 :OnPS2SendChar(0xFA);break;                  
                case 0xF5 :ESB=0;OnPS2SendChar(0xFA);break;         
                case 0xF4 :ESB=1;LED1=~LED1;OnPS2SendChar(0xFA);break;          
                case 0xF3 :OnPS2SendChar(0xFA);break;                  
                case 0xF2 :OnPS2SendChar(0xFA);                                            
                                   OnPS2SendChar(0x03);break;       
                  case 0xF0 :OnPS2SendChar(0xFA);break;                       
                  case 0xFE :LED2=~LED2;OnPS2SendChar(0x08);OnPS2SendChar(0x00);
                                   OnPS2SendChar(0x00);OnPS2SendChar(0x00);break;            
                  case 0xEE :OnPS2SendChar(0xFA);break;
                case 0xEC :OnPS2SendChar(0xFA);break;
                case 0xEB :OnPS2SendChar(0xFA);break;
                case 0xEA :OnPS2SendChar(0xFA);break;                                     
                  case 0xFF :OnPS2SendChar(0xFA);                                                 
                                      OnPS2SendChar(0xAA);
                                   OnPS2SendChar(0x00);break;
                default:   OnPS2SendChar(0xFA);break;
        }

目前的情况是  我用PS/2鼠标 开机  然后拔下来使用单片机模拟的PS/2接口  , 这个时候 我模拟的按键1按下是模拟鼠标左键按下。。按下后电脑有反应,发现是鼠标左键按下了  ,。。因为主机上还有一个USB接口的鼠标。。。我动一下USB 鼠标。。PS/2 接口的鼠标直接被主机屏蔽了  ,,,我换上正常的PS/2鼠标以后发现 没法用了 只能重启、、、我现在是想能够完成开机识别PS/2鼠标就行了  有木有大神帮个忙、、
if(KEY1==0)                                                                  //如果自动打开按键按下
                {
                  Delay(15);                                                          //按键消抖
                  if(KEY1==0)
                  {
                    while(!KEY1);
                        OnPS2SendChar(0x09);
                        OnPS2SendChar(0x00);
                        OnPS2SendChar(0x00);
                        OnPS2SendChar(0x00);       
                    }       
                }


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。