请教一下关于键鼠例程鼠标移动的问题

//鼠标数据上传示例

        case 'L':                                                        

            HIDMouse[1] = 100;//先右移100

            Enp2IntIn();

            mDelaymS(250);

            HIDMouse[1] = 156;//再左移100

            Enp2IntIn();

            HIDMouse[1] = 0;

            break;


理论上先右移100再左移100鼠标指针会回到原来的位置,但实测发现第一次右移时会少一些距离,左移正常,第二次和之后的左右移动都正常,每次用电脑本身的鼠标移动过后,再用单片机模拟鼠标移动第一次右移都会少一些距离,不知什么原因,有没有办法避免这个情况。


                                     

//鼠标数据上传示例

        case 'L':                                                        

            HIDMouse[1] = 100;//先右移100

            Enp2IntIn();

            mDelaymS(250);

            HIDMouse[1] = 156;//再左移100

            Enp2IntIn();

            HIDMouse[1] = 0;

            break;


理论上先右移100再左移100鼠标指针会回到原来的位置,但实测发现第一次右移时会少一些距离,左移正常,第二次和之后的左右移动都正常,每次用电脑本身的鼠标移动过后,再用单片机模拟鼠标移动第一次右移都会少一些距离,不知什么原因,有没有办法避免这个情况。


           

你做的是绝对鼠标还是相对鼠标,相对鼠标上传的是坐标差如果坐标未发生变化则x,y为0,绝对鼠标上传的是鼠标绝对坐标。

代码如下,

相对鼠标:

x_temp = Pos_ABS( TP.X_Pos, TP.X_Pos_Last );

y_temp = Pos_ABS( TP.Y_Pos, TP.Y_Pos_Last );

/* 判断左移还是右移 */

if( TP.X_Pos < TP.X_Pos_Last )

{

x_temp = 0x00 - x_temp;

}

/* 判断上移还是下移 */

if( TP.Y_Pos < TP.Y_Pos_Last )

{

y_temp = 0x00 - y_temp;

}


绝对鼠标:

MOUSE_Relative_Up_Pack( TP.Key, x_temp, y_temp, 0x00 );


x_temp = TP.X_Pos;

y_temp = TP.Y_Pos;

MOUSE_Absolute_Up_Pack( TP.Key, x_temp, y_temp, 0x00 );



                           


引用:

                 
                   

//鼠标数据上传示例

        case 'L':                                                        

            HIDMouse[1] = 100;//先右移100

            Enp2IntIn();

            mDelaymS(250);

            HIDMouse[1] = 156;//再左移100

            Enp2IntIn();

            HIDMouse[1] = 0;

            break;


理论上先右移100再左移100鼠标指针会回到原来的位置,但实测发现第一次右移时会少一些距离,左移正常,第二次和之后的左右移动都正常,每次用电脑本身的鼠标移动过后,再用单片机模拟鼠标移动第一次右移都会少一些距离,不知什么原因,有没有办法避免这个情况。



           


你做的是绝对鼠标还是相对鼠标,相对鼠标上传的是坐标差如果坐标未发生变化则x,y为0,绝对鼠标上传的是鼠标绝对坐标。

代码如下,

相对鼠标:

x_temp = Pos_ABS( TP.X_Pos, TP.X_Pos_Last );

y_temp = Pos_ABS( TP.Y_Pos, TP.Y_Pos_Last );

/* 判断左移还是右移 */

if( TP.X_Pos < TP.X_Pos_Last )

{

x_temp = 0x00 - x_temp;

}

/* 判断上移还是下移 */

if( TP.Y_Pos < TP.Y_Pos_Last )

{

y_temp = 0x00 - y_temp;

}


绝对鼠标:

MOUSE_Relative_Up_Pack( TP.Key, x_temp, y_temp, 0x00 );


x_temp = TP.X_Pos;

y_temp = TP.Y_Pos;

MOUSE_Absolute_Up_Pack( TP.Key, x_temp, y_temp, 0x00 );


                       

是下载官方CH554EVT中的键鼠例程,只是将原本串口收到L摸拟鼠标左键按下,改成了模拟鼠标左100再右移100回到原位,功能可以实现,只是在电脑真正的鼠标移动过后,再用单片机模拟移动,第一次串口收到L右移会少一些距离,之后再收到L才左右移动距离都相等。


                           


引用:

                           


引用:

                 
                   

//鼠标数据上传示例

        case 'L':                                                        

            HIDMouse[1] = 100;//先右移100

            Enp2IntIn();

            mDelaymS(250);

            HIDMouse[1] = 156;//再左移100

            Enp2IntIn();

            HIDMouse[1] = 0;

            break;


理论上先右移100再左移100鼠标指针会回到原来的位置,但实测发现第一次右移时会少一些距离,左移正常,第二次和之后的左右移动都正常,每次用电脑本身的鼠标移动过后,再用单片机模拟鼠标移动第一次右移都会少一些距离,不知什么原因,有没有办法避免这个情况。



           



你做的是绝对鼠标还是相对鼠标,相对鼠标上传的是坐标差如果坐标未发生变化则x,y为0,绝对鼠标上传的是鼠标绝对坐标。

代码如下,

相对鼠标:

x_temp = Pos_ABS( TP.X_Pos, TP.X_Pos_Last );

y_temp = Pos_ABS( TP.Y_Pos, TP.Y_Pos_Last );

/* 判断左移还是右移 */

if( TP.X_Pos < TP.X_Pos_Last )

{

x_temp = 0x00 - x_temp;

}

/* 判断上移还是下移 */

if( TP.Y_Pos < TP.Y_Pos_Last )

{

y_temp = 0x00 - y_temp;

}


绝对鼠标:

MOUSE_Relative_Up_Pack( TP.Key, x_temp, y_temp, 0x00 );


x_temp = TP.X_Pos;

y_temp = TP.Y_Pos;

MOUSE_Absolute_Up_Pack( TP.Key, x_temp, y_temp, 0x00 );



                       


是下载官方CH554EVT中的键鼠例程,只是将原本串口收到L摸拟鼠标左键按下,改成了模拟鼠标左100再右移100回到原位,功能可以实现,只是在电脑真正的鼠标移动过后,再用单片机模拟移动,第一次串口收到L右移会少一些距离,之后再收到L才左右移动距离都相等。

                       


我测试一下,模拟的鼠标确实有这问题,但是例程上模拟的鼠标也是按照真实鼠标来做的。可能是系统的问题,硬件上不太好解决,可以改成绝对鼠标试试。但绝对鼠标也存在系统兼容性的问题,在Android上可能会用不起来,可告知您的具体应用至我司:rz@wch.cn


只有登录才能回复,可以选择微信账号登录