<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
一、利用串口终端控制鼠标
1、功能说明
while (1)
{
CtrlCode = Uart_GetChar( ); //从串口消息队列获取控制字符。
if ( CtrlCode == 0x1B ) {
PowerOff(); //如果用户按下ESC,则断开该设备。
break;
}
switch ( CtrlCode ){
case 'a':
MouseAct = LEFT; //按下a,则鼠标左移。
break;
case 'd':
MouseAct = RIGHT;
break;
case 'w':
MouseAct = UP;
break;
case 'x':
MouseAct = DOWN;
break;
case 'u':
MouseAct = ROLLUP; //按下u,滚轮上滚
break;
case 'j':
MouseAct = ROLLDOWN;
break;
case 's':
MouseAct = LeftKeyPressed; //按下s,相当于左键按下
break;
case ' ':
MouseAct = RightKeyPressed;
break;
default :
MouseAct = 0;
break;
}
if ( (bDeviceState == CONFIGURED) && ( MouseAct != 0) ){
Joystick_Send(MouseAct);
MouseAct = 0;
}
}
2、实现效果
Adwx控制鼠标的上下左右移动是可以的,但是鼠标的“左右键”单击有些问题,跟我预想的不同。但这与串口终端的使用环境有关,下面我就用“智林开发板”上的按键来控制鼠标。
二、利用开发板上的按键控制鼠标
1、功能说明
智林开发板上有一个五向摇杆和两个用户按键,可以当成七个键,分配如下:
摇杆的上下左右对应鼠标的上下左右,OK键对应左键。PB2对应右键,PB3断开USB鼠标设备,并退出。
2、功能实现过程
(1)开启按键扫描任务,这个任务将扫描到得按键消息解释以后发到按键消息队列,“1”表示“UP”,“2”表示“RIGHT”,“3”表示“LEFT”,“4”表示“DOWN”,“5”表示“OK”,“6”表示“PB2”,“7”表示“PB3”。
(2)编写获取按键的函数
该函数以总是等待的方式从按键消息队列获取按键值,返回给用户。
将程序下载到开发板后,鼠标移动是正常的,但是左键和右键仍然不正常。表现为OK键按下去,对象被选中,但是不会产生单击、双击的效果。
分析了一下,发现是鼠标释放的消息没有发送出去。改变了一个按键扫描任务的输出效果,让它在按键释放时产生释放消息。在鼠标的报告中体现这一点。
再次下载程序,鼠标左键单击、双击,右键单击的效果都正常了。虽然由于按键少的原因,不能同时实现上下滚轮的效果。但我通过先不用左右键,也达到了滚轮的效果。
从明天开始,把这个例程的源代码做一个简单分析,更深入的了解ST的USB库实现的特点、HID设备工作的过程。有概念不清楚的地方,通过断点调试来测试。
tengjingshu_112148725 2010-4-21 16:32