USB鼠标、键盘数据格式

鼠标发送给PC的数据每次4个字节 
BYTE1 BYTE2 BYTE3 BYTE4 
定义分别是: 
BYTE1 -- 
       |--bit7:   1   表示   Y   坐标的变化量超出-256   ~   255的范围,0表示没有溢出  
       |--bit6:   1   表示   X   坐标的变化量超出-256   ~   255的范围,0表示没有溢出  
       |--bit5:   Y   坐标变化的符号位,1表示负数,即鼠标向下移动  
       |--bit4:   X   坐标变化的符号位,1表示负数,即鼠标向左移动  
       |--bit3:     恒为1  
       |--bit2:     1表示中键按下  
       |--bit1:     1表示右键按下  
       |--bit0:     1表示左键按下  
BYTE2 -- X坐标变化量,与byte的bit4组成9位符号数,负数表示向左移,正数表右移。用补码表示变化量  
BYTE3 -- Y坐标变化量,与byte的bit5组成9位符号数,负数表示向下移,正数表上移。用补码表示变化量 
BYTE4 -- 滚轮变化。 
由于手上没有USB鼠标,对BYTE1的4-7位没有测试,对于BYTE2 BYTE3做个测试,BYTE1的4-7全为0的时候,BYTE2 BYTE3的正负表示鼠标移动方向 

键盘发送给PC的数据每次8个字节 
BYTE1 BYTE2 BYTE3 BYTE4 BYTE5 BYTE6 BYTE7 BYTE8 
定义分别是: 
BYTE1 -- 
       |--bit0:   Left Control是否按下,按下为1  
       |--bit1:   Left Shift  是否按下,按下为1  
       |--bit2:   Left Alt    是否按下,按下为1  
       |--bit3:   Left GUI    是否按下,按下为1  
       |--bit4:   Right Control是否按下,按下为1   
       |--bit5:   Right Shift 是否按下,按下为1  
       |--bit6:   Right Alt   是否按下,按下为1  
       |--bit7:   Right GUI   是否按下,按下为1  
BYTE2 -- 暂不清楚,有的地方说是保留位 
BYTE3--BYTE8 -- 这六个为普通按键 
键盘经过测试。 
例如:键盘发送一帧数据   02 00 0x04 0x05 00 00 00 00 
表示同时按下了Left Shift + ‘a’+‘b’三个键 
对于键码和PS2的键盘有所不同,具体请看附件。 
USB HID to PS2 Scan Code 对照表.pdfourdev_651088NZ5EKW.pdf(文件大小:133K) (原文件名:USB HID to PS2 Scan Code Translation Table .pdf)  


2011.6.23补充说明 
补充对于键盘BYTE2的说明: 
参照百合网(http://www.baiheee.com/OpenSource/Easy%20USB%2051%20Programer/Easy%20USB%2051%20Programer12.htm)键盘的报告描述符,如下 
/*******************************************************************************************/ 
//这里只列出了第二个字节的说明 
    //这样的数据段个数为1     
    0x95, 0x01,                    //   REPORT_COUNT (1)     
    //每个段长度为8bits     
    0x75, 0x08,                    //   REPORT_SIZE (8)     
    //输入用,常量,值,绝对值     
    0x81, 0x03,                    //   INPUT (Cnst,Var,Abs)     
         
    //上面这8个bit是常量,设备必须返回0   
/*******************************************************************************************/ 
这里只是指明了这是一个以字节为单位的输入数据,并没有指明它的取值范围。 

在HID1.11协议的Appendix B-->B.1 Protocol 1 (Keyboard) 的报告描述符中也有这样的说明(HID1.11协议的59页) 
/*******************************************************************************************/ 
   Report Count (1),   
   Report Size (8),  
   Input (Constant),              ;Reserved byte  
   Report Count (5),   
   Report Size (1),  
/*******************************************************************************************/ 
在注释中说明,这个字节是保留字节。

### 回答1: 单片机可以获取USB鼠标键盘数据。在使用USB鼠标键盘时,数据传输通常遵循USB协议。USB(Universal Serial Bus)是一种用于在计算机系统和外围设备之间传输数据的标准。单片机通过连接到USB主控器或通过专用的USB接口芯片,可以实现和USB设备的通信。 首先,单片机需要支持USB功能,并且具备USB接口或USB主控制器。这样,它便能够连接到USB设备,如鼠标键盘。 其次,单片机需要使用USB协议解析器来解析USB鼠标键盘发送的数据。USB鼠标键盘数据通常以包的形式发送。单片机通过解析器可以识别和提取有用的数据,例如鼠标移动坐标或按键事件。 一旦单片机成功解析USB鼠标键盘的数据,它可以进一步处理这些数据。例如,它可以将鼠标的移动坐标信息用于控制机器人的移动,或者通过键盘事件来控制一些电路开关。 需要注意的是,单片机处理USB鼠标键盘数据需要具备一定的计算和存储能力。由于USB数据传输速度较快,单片机必须能够快速解析和处理数据,以实时响应鼠标键盘的输入。 总之,单片机可以通过连接USB设备并使用USB协议解析器来获取USB鼠标键盘的数据,并进一步处理这些数据,以实现各种应用,如机器人控制或电路开关控制。 ### 回答2: 单片机可以通过连接USB接口与USB鼠标键盘进行交互来获取数据。通过USB接口,单片机可以充当USB主机或USB设备的角色。 首先,单片机需要支持USB功能,这意味着它需要有USB接口和相关的硬件电路来处理USB通信。现如今的单片机多数都支持USB功能,例如一些常见的ARM Cortex-M系列的单片机。 接下来,单片机需要运行相关的USB协议栈来处理USB通信协议。USB通信协议是一种复杂的协议,涉及到设备的枚举、控制传输和数据传输等。单片机上的USB协议栈可以通过软件实现或者使用专用的硬件模块来加速处理。 一旦单片机与USB鼠标键盘成功连接,并经过USB的枚举过程,它可以开始与鼠标键盘进行数据交换。USB通信以数据传输的方式进行,鼠标键盘会将数据通过USB接口发送给单片机,单片机接收到数据后可以进行进一步的处理。 对于鼠标来说,它会发送包含鼠标移动、点击和滚动等信息的数据包。单片机可以解析这些数据包,并根据鼠标的操作进行相应的处理。 对于键盘来说,它会发送键盘按下和释放的扫描码数据。单片机可以解析这些扫描码,并根据键盘的输入进行相应的处理,比如检测按下的键是哪个按键。 总的来说,单片机可以通过USB接口与USB鼠标键盘进行数据交互,从而获取鼠标键盘的数据。这样做可以使得单片机能够与外部设备进行更加复杂的交互和控制。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值