本人目前想用普通的
单片机模拟一个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);
}
}
一周热门 更多>