UsbKeyboard.rar

  • PUDN用户
    了解作者
  • Perl
    开发工具
  • 105KB
    文件大小
  • rar
    文件格式
  • 0
    收藏次数
  • 1 积分
    下载积分
  • 1
    下载次数
  • 2013-11-06 20:59
    上传日期
USB开发—模拟 键盘 请按K1-K8分别进行测试 K1:光标左移 K2:光标右移 K3:光标上移 K4:光标下移 K5:滚轮下滚 K6:滚轮上滚 K7:鼠标左键 K8:鼠标右键
UsbKeyboard.rar
  • UsbKeyboard
  • STARTUP.OBJ
    749B
  • UsbKeyboard.lnp
    145B
  • Key.OBJ
    6.3KB
  • Main.c
    5.6KB
  • Key.c
    3.2KB
  • UsbKeyboard.hex
    16.1KB
  • LED.h
    1.5KB
  • Key.LST
    5.8KB
  • UsbKeyboard_Opt.Bak
    2.6KB
  • UART.h
    881B
  • UsbCore.c
    31.6KB
  • PDIUSBD12.OBJ
    16.1KB
  • Key.h
    1.2KB
  • STARTUP.A51
    5KB
  • UsbCore.LST
    49.4KB
  • Main.LST
    9.2KB
  • UsbKeyboard.Uv2
    2.3KB
  • UsbCore.h
    1.8KB
  • MyType.h
    973B
  • UsbKeyboard.Opt
    2.6KB
  • PDIUSBD12.h
    2.7KB
  • STARTUP.LST
    11.4KB
  • UsbKeyboard_Uv2.Bak
    2.3KB
  • UART.c
    4.8KB
  • UsbKeyboard.plg
    161B
  • config.h
    825B
  • UsbCore.OBJ
    26.9KB
  • UsbKeyboard.M51
    47.5KB
  • UART.LST
    8.4KB
  • PDIUSBD12.c
    9.4KB
  • Main.OBJ
    16.7KB
  • UART.OBJ
    8.7KB
  • PDIUSBD12.LST
    14.4KB
  • UsbKeyboard
    65.6KB
内容介绍
/****************************************************************** 本程序只供学习使用,未经作者许可,不得用于其它任何用途 欢迎访问我的USB专区:http://group.ednchina.com/93/ 欢迎访问我的blog: http://www.ednchina.com/blog/computer00 http://computer00.21ic.org 感谢PCB赞助商——电子园: http://bbs.cepark.com/ UsbCore.c file 作者:电脑圈圈 建立日期: 2008.06.29 修改日期: 2008.07.14 版本:V1.1 版权所有,盗版必究。 Copyright(C) 电脑圈圈 2008-2018 All rights reserved *******************************************************************/ #include "config.h" #include "pdiusbd12.h" #include "uart.h" #include "usbcore.h" #include "led.h" idata uint8 Buffer[16]; //读端点0用的缓冲区 //USB设备请求的各字段 uint8 bmRequestType; uint8 bRequest; uint16 wValue; uint16 wIndex; uint16 wLength; //当前发送数据的位置 uint8 * pSendData; //需要发送数据的长度 uint16 SendLength; //是否需要发送0数据包的标志。在USB控制传输的数据过程中, //当返回的数据包字节数少于最大包长时,会认为数据过程结束。 //当请求的字节数比实际需要返回的字节数长,而实际返回的字节 //数又刚好是端点0大小的整数倍时,就需要返回一个0长度的数据包 //来结束数据过程。因此这里增加一个标志,供程序决定是否需要返回 //一个0长度的数据包。 uint8 NeedZeroPacket; //当前的配置值。只有在设置非0配置后 uint8 ConfigValue; //端点1缓冲是否忙的标志。当缓冲区中有数据时,该标志为真。 //当缓冲区中空闲时,该标志为假。 uint8 Ep1InIsBusy; //USB设备描述符的定义 code uint8 DeviceDescriptor[0x12]= //设备描述符为18字节 { //bLength字段。设备描述符的长度为18(0x12)字节 0x12, //bDescriptorType字段。设备描述符的编号为0x01 0x01, //bcdUSB字段。这里设置版本为USB1.1,即0x0110。 //由于是小端结构,所以低字节在先,即0x10,0x01。 0x10, 0x01, //bDeviceClass字段。我们不在设备描述符中定义设备类, //而在接口描述符中定义设备类,所以该字段的值为0。 0x00, //bDeviceSubClass字段。bDeviceClass字段为0时,该字段也为0。 0x00, //bDeviceProtocol字段。bDeviceClass字段为0时,该字段也为0。 0x00, //bMaxPacketSize0字段。PDIUSBD12的端点0大小的16字节。 0x10, //idVender字段。厂商ID号,我们这里取0x8888,仅供实验用。 //实际产品不能随便使用厂商ID号,必须跟USB协会申请厂商ID号。 //注意小端模式,低字节在先。 0x88, 0x88, //idProduct字段。产品ID号,由于是第二个实验,我们这里取0x0002。 //注意小端模式,低字节应该在前。 0x02, 0x00, //bcdDevice字段。我们这个USB键盘刚开始做,就叫它1.0版吧,即0x0100。 //小端模式,低字节在先。 0x00, 0x01, //iManufacturer字段。厂商字符串的索引值,为了方便记忆和管理, //字符串索引就从1开始吧。 0x01, //iProduct字段。产品字符串的索引值。刚刚用了1,这里就取2吧。 //注意字符串索引值不要使用相同的值。 0x02, //iSerialNumber字段。设备的序列号字符串索引值。 //这里取3就可以了。 0x03, //bNumConfigurations字段。该设备所具有的配置数。 //我们只需要一种配置就行了,因此该值设置为1。 0x01 }; //////////////////////////设备描述符完毕////////////////////////////// //USB报告描述符的定义 code uint8 ReportDescriptor[]= { //每行开始的第一字节为该条目的前缀,前缀的格式为: //D7~D4:bTag。D3~D2:bType;D1~D0:bSize。以下分别对每个条目注释。 //这是一个全局(bType为1)条目,将用途页选择为普通桌面Generic Desktop Page(0x01) //后面跟一字节数据(bSize为1),后面的字节数就不注释了, //自己根据bSize来判断。 0x05, 0x01, // USAGE_PAGE (Generic Desktop) //这是一个局部(bType为2)条目,说明接下来的集合用途用于键盘 0x09, 0x06, // USAGE (Keyboard) //这是一个主条目(bType为0)条目,开集合,后面跟的数据0x01表示 //该集合是一个应用集合。它的性质在前面由用途页和用途定义为 //普通桌面用的键盘。 0xa1, 0x01, // COLLECTION (Application) //这是一个全局条目,选择用途页为键盘(Keyboard/Keypad(0x07)) 0x05, 0x07, // USAGE_PAGE (Keyboard/Keypad) //这是一个局部条目,说明用途的最小值为0xe0。实际上是键盘左Ctrl键。 //具体的用途值可在HID用途表中查看。 0x19, 0xe0, // USAGE_MINIMUM (Keyboard LeftControl) //这是一个局部条目,说明用途的最大值为0xe7。实际上是键盘右GUI键。 0x29, 0xe7, // USAGE_MAXIMUM (Keyboard Right GUI) //这是一个全局条目,说明返回的数据的逻辑值(就是我们返回的数据域的值) //最小为0。因为我们这里用Bit来表示一个数据域,因此最小为0,最大为1。 0x15, 0x00, // LOGICAL_MINIMUM (0) //这是一个全局条目,说明逻辑值最大为1。 0x25, 0x01, // LOGICAL_MAXIMUM (1) //这是一个全局条目,说明数据域的数量为八个。 0x95, 0x08, // REPORT_COUNT (8) //这是一个全局条目,说明每个数据域的长度为1个bit。 0x75, 0x01, // REPORT_SIZE (1) //这是一个主条目,说明有8个长度为1bit的数据域(数量和长度 //由前面的两个全局条目所定义)用来做为输入, //属性为:Data,Var,Abs。Data表示这些数据可以变动,Var表示 //这些数据域是独立的,每个域表示一个意思。Abs表示绝对值。 //这样定义的结果就是,当某个域的值为1时,就表示对应的键按下。 //bit0就对应着用途最小值0xe0,bit7对应着用途最大值0xe7。 0x81, 0x02, // INPUT (Data,Var,Abs) //这是一个全局条目,说明数据域数量为1个 0x95, 0x01, // REPORT_COUNT (1) //这是一个全局条目,说明每个数据域的长度为8bit。 0x75, 0x08, // REPORT_SIZE (8) //这是一个主条目,输入用,由前面两个全局条目可知,长度为8bit, //数量为1个。它的属性为常量(即返回的数据一直是0)。 //该字节是保留字节(保留给OEM使用)。 0x81, 0x03, // INPUT (Cnst,Var,Abs) //这是一个全局条目。定义位域数量为6个。 0x95, 0x06, // REPORT_COUNT (6) //这是一个全局条目。定义每个位域长度为8bit。 //其实这里这个条目不要也是可以的,因为在前面已经有一个定义 //长度为8bit的全局条目了。 0x75, 0x08, // REPORT_SIZE (8) //这是一个全局条目,定义逻辑最小值为0。 //同上,这里这个全局条目也是可以不要的,因为前面已经有一个 //定义逻辑最小值为0的全局条目了。 0x15, 0x00, // LOGICAL_MINIMUM (0) //这是一个全局条目,定义逻辑最大值为255。 0x25, 0xFF, // LOGICAL_MAXIMUM (255) //这是一个全局条目,选择用途页为键盘。 //前面已经选择过用途页为键盘了,所以该条目不要也可以。 0x05, 0x07, // USAGE_PAGE (Keyboard/Keypad) //这是一个局部条目,定义用途最小值为0(0表示没有键按下) 0x19, 0x00, // USAGE_MINIMUM (Reserved (no event indicated)) //这是一个局部条目,定义用途最大值为0x65 0x29, 0x65, // USAGE_MAXIMUM (Keyboard Application) //这是一个主条目。它说明这六个8bit的数据域是输入用的, //属性为:Data,Ary,Abs。Data说明数据是可以变的,Ary说明 //这些数据域是一个数组,即每个8bit都可以表示某个键值, //如果按下的键太多(例如超过这里定义的长度或者键盘本身无法 //扫描出按键情况时),则这些数据返回全1(二进制),表示按键无效。 //Abs表示这些值是绝对值。 0x81, 0x00, // INPUT (Data,Ary,Abs) //以下为输出报告的描述 //逻辑最小值前面已经有定义为0了,这里可以省略。 //这是一个全局条目,说明逻辑值最大为1。 0x25, 0x01, // LOGICAL_MAXIMUM (1) //这是一个全局条目,说明数据域数量为5个。 0x95, 0x05, // REPORT_COUNT (5) //这是一个全局条目,说明数据域的长度为1bit。 0x75, 0x01, // REPORT_SIZE (1) //这是一个全局条目,说明使用的用途页为指示灯(LED) 0x05, 0x08, // USAGE_PAGE (LEDs) //这是一个局部条目,说明用途最小值为数字键盘灯。 0x19, 0x01, // USAGE_MINIMUM (Num Lock) //这是一个局部条目,说明用途最大值为Kana灯。 0x29, 0x05, // USAGE_MAXIMUM (Kana) //这是一个主条目。定义输出数据,即前面定义的5个LED。 0x91, 0x02, // OUTPUT (Data,Var,Abs) //这是一个全局条目。定义位域数量为1个。 0x95, 0x01, // REPORT_COUNT (1) //这是一个全局条目。定义位域长度为3bit。 0x75, 0x03, // REPORT_SIZE (3) //这是一个主条目,定义输出常量,前面用了5bit,所以这里需要 //3个bit来凑成一字节。 0x91, 0x03, // OUTPUT (Cnst,Var,Abs) //下面这个主条目用来关闭前面的集合。bSize为0,所以后面没数据。 0xc0 // END_COLLECTION }; //通过上面的报告描述符的定义,我们知道返回的输入报告具有8字节。 //第一字节的8个bit用来表示特殊键是否按下(例如Shift、Alt等键)。 //第二字节为保留值,值为常量0。第三到第八字节是一个普通键键值的 //数组,当没有键按下时,全部6个字节值都为0。当只有一个普通键按下
评论
    相关推荐
    • UsbKeyboard.zip
      描述USB键盘功能传送数据,大家可以参考。这是一份很好的资料,不要错过哦。
    • UsbKeyboard.zip
      用VC 写的 关于 usb 键盘 通讯的 简单例子。
    • USB-KeyBoard.rar
      描述USB键盘功能传送数据,大家可以参考。这是一份很好的资料,不要错过哦。
    • UsbKeyboard.rar
      USB键盘的驱动程序,基于80S52单片机的
    • UsbKeyboard.rar
      辛苦找到的usb键盘程序,贡献出来,分享给大家。希望对大家有所帮助
    • usbkeyboard.rar
      stm32 usbkeyboard驱动编程
    • usbkeyboard
      usbkeyboard usb开发技术,usb驱动技术
    • USBkeyboard.zip
      软件介绍: stm32f103usb可用于USB键盘、游戏手柄项目,本资源为网友分享,网上很多资源都不能用,这个移植后测试可用。
    • usb 键盘 单片机
      Key.c 2225 22-03-07|16:25 Key.h 706 22-03-07|15:58 Key.LST 4569 23-03-07|23:58 Key.OBJ 5258 23-03-07|23:58 keyboard.h 2102 22-03-07|16:02 My_type.h 688 22-03-07|15:54 ...USB键盘 0 07-08-08|00:37
    • USB-COM(HL340).rar
      usb转串口,找了很久才找到,现在别的地方很难下到,要不用不了,我这个可以用 HL340D 的