• Donotforget
    了解作者
  • C/C++
    开发工具
  • 322KB
    文件大小
  • rar
    文件格式
  • 1
    收藏次数
  • 1 积分
    下载积分
  • 6
    下载次数
  • 2018-12-02 12:38
    上传日期
51单片机USB模拟键盘,采用普通的IO口扫描方式,模拟键盘功能
51单片机USB模拟键盘.rar
  • SourceCode
  • UART.c
    3.8KB
  • UART.LST
    6.8KB
  • My_type.h
    688B
  • keyboard.h
    2.1KB
  • UsbKeyBoard.Opt
    2.5KB
  • UsbKeyBoard.Uv2
    2.2KB
  • USB.H
    7.3KB
  • UsbKeyBoard_Opt.Bak
    2.5KB
  • UsbKeyBoard_Uv2.Bak
    2.1KB
  • PDIUSBD12.h
    3KB
  • Key.OBJ
    5.1KB
  • UsbKeyBoard.c
    37.1KB
  • UsbKeyBoard.plg
    411B
  • Key.c
    2.2KB
  • UART.h
    740B
  • UsbKeyBoard.LST
    60.4KB
  • UsbKeyBoard.hex
    16.4KB
  • Key.h
    706B
  • UsbKeyBoard.M51
    61.5KB
  • UsbKeyBoard.lnp
    79B
  • UsbKeyBoard.OBJ
    65KB
  • UART.OBJ
    7.8KB
  • UsbKeyBoard
    66.8KB
  • Key.LST
    4.5KB
  • www.pudn.com.txt
    218B
  • 2007322173635160.jpg
    320.7KB
内容介绍
/****************************************************************** 本程序只供学习使用,未经作者许可,不得用于其它任何用途 我的邮箱:computer-lov@tom.com 欢迎访问我的blog: http://computer00.21ic.org USBKeyBoard.C file 作者:Computer-lov 建立日期: 2007.03.20 修改日期: 2007.03.23 版本:V1.1 版权所有,盗版必究。 Copyright(C) Computer-lov 2007-2017 All rights reserved *******************************************************************/ #include <aT89x52.H rel='nofollow' onclick='return false;'> #include "USB.H" #include "PDIUSBD12.H" #include "My_type.h" #include "UART.H" #include "key.h" #include "keyboard.h" #define USB_COMMAND_ADD 1 #define USB_DATA_ADD 0 //USB芯片连接引脚 #define USB_DATA P0 #define USB_A0 P3_5 #define USB_WR P3_6 #define USB_RD P3_7 #define USB_INT P3_2 #define ENDPOINT_NUMBER 2 #define MAX_CONTROL_DATA_SIZE 16 //控制传输时保存数据 CONTROL_DATA_BUFF Control_Data; //缓冲 uint8 idata buffer[64]; //交换数据时用的指针 uint8 *pData; uint8 idle; //空闲状态 uint8 protocol; //当前协议 //高低字节交换 #define SWAP16(x) ((((uint16)(x))<<8)|(((uint16)(x))>>8)) //取一个整数的低字节 #define LSB(x) ((uint8)(x)) //取一个整数的高字节 #define MSB(x) ((uint8)(((uint16)(x))>>8)) //字符串描述符所用的语言种类 code uint8 LANGUAGE_ID[4]={0x04,0x03,0x09,0x04}; //设备序列号 code uint8 device_serial_number[]= {22,STRING_DESCRIPTOR,'2',0,'0',0,'0',0,'7',0,'-',0,'0',0,'3',0,'-',0,'2',0,'3',0}; //厂商字符串 code uint8 ManufacturerString[80]= {80,STRING_DESCRIPTOR,0x35,0x75,0x11,0x81,0x08,0x57,0x08,0x57,0x84,0x76,0xB6,0x5B, 0x53,0x5F,'-',0x00,'-',0x00,'-',0x00,'-',0x00,'@',0,0x20,0x00,'H',0,'t',0,'t',0, 'p',0,':',0,'/',0,'/',0,'C',0,'o',0,'m',0,'p',0,'u',0,'t',0,'e',0,'r',0,'0',0, '0',0,'.',0,'2',0,'1',0,'i',0,'c',0,'.',0,'o',0,'r',0,'g',0}; //产品字符串 code uint8 ProducterString[80]= {80,STRING_DESCRIPTOR,0x35,0x75,0x11,0x81,0x08,0x57,0x08,0x57,0x5A,0x50,0x84,0x76, 'U',0,'S',0,'B',0,0x2E,0x95,0xD8,0x76,'@',0,0x20,0x00,'H',0,'t',0,'t',0, 'p',0,':',0,'/',0,'/',0,'C',0,'o',0,'m',0,'p',0,'u',0,'t',0,'e',0,'r',0,'0',0, '0',0,'.',0,'2',0,'1',0,'i',0,'c',0,'.',0,'o',0,'r',0,'g',0}; code DEVICE_DESCRIPTOR_STRUCT device_descriptor= //设备描述符 { sizeof(DEVICE_DESCRIPTOR_STRUCT), //设备描述符的字节数大小 DEVICE_DESCRIPTOR, //设备描述符类型编号 0x1001, //USB版本号 0x00, //USB分配的设备类代码 0x00, //USB分配的子类代码 0x00, //USB分配的设备协议代码 0x10, //端点0的最大包大小 0x3412, //厂商编号VID,这里只是作为测试用,请使用自己的VID 0x7856, //产品编号PID,这里只是作为测试用,请使用自己的PID 0x0100, //设备出厂编号 0x01, //设备厂商字符串的索引 0x02, //描述产品字符串的索引 0x03, //描述设备序列号字符串的索引 0x01 //可能的配置数量 }; //定义配置,接口,端点等描述符结构体,因为它们是随配置描述符一起返回的 typedef struct _CON_INT_ENDP_DESCRIPTOR_STRUCT { CONFIGURATION_DESCRIPTOR_STRUCT configuration_descriptor; INTERFACE_DESCRIPTOR_STRUCT interface_descriptor; HID_DESCRIPTOR_STRUCT hid_descriptor; ENDPOINT_DESCRIPTOR_STRUCT endpoint_descriptor[ENDPOINT_NUMBER]; }CON_INT_ENDP_DESCRIPTOR_STRUCT; code CON_INT_ENDP_DESCRIPTOR_STRUCT con_int_endp_descriptor= { //configuration_descriptor //配置描述符 { sizeof(CONFIGURATION_DESCRIPTOR_STRUCT), //配置描述符的字节数大小 CONFIGURATION_DESCRIPTOR, //配置描述符类型编号 SWAP16(sizeof(CON_INT_ENDP_DESCRIPTOR_STRUCT)), 0x01, //只包含一个接口 0x01, //该配置的编号 0x00, //iConfiguration字段 0xA0, //采用总线供电,支持远程唤醒 0xC8 //从总线获取最大电流400mA }, //interface_descritor //接口描述符 { sizeof(INTERFACE_DESCRIPTOR_STRUCT), //接口描述符的字节数大小 INTERFACE_DESCRIPTOR, //接口描述符类型编号 0x00, //接口编号为0 0x00, //该接口描述符的编号 ENDPOINT_NUMBER, //非0端点数量为2,只使用端点主端点输入和输出 0x03, //人机接口设备(HID)类 0x01, //使用的子类:支持BIOS根启动Boot的子类 0x01, //使用的协议:键盘 0x00 //接口描述符字符串索引 }, //hid_descriptor { sizeof(HID_DESCRIPTOR_STRUCT), //HID描述符的字节数大小 HID_DESCRIPTOR, //HID描述符类型编号 0x1001, //HID类协议版本号,为1.1 0x21, //固件的国家地区代号,0x21为美国 NUM_SUB_DESCRIPTORS, //下级描述符的数量 { { REPORT_DESCRIPTOR, //下级描述符为报告描述符 SWAP16(sizeof(KeyBoardReportDescriptor)) //下级描述符的长度 } }, }, //endpoint_descriptor[] { { //主端点输入描述 sizeof(ENDPOINT_DESCRIPTOR_STRUCT), //端点描述符的字节数大小 ENDPOINT_DESCRIPTOR, //端点描述符类型编号 MAIN_POINT_IN, //端点号,主输入端点 ENDPOINT_TYPE_INTERRUPT, //使用的传输类型:中断传输 0x4000, //该端点支持的最大包尺寸,64字节 0x0A //中断扫描时间:设置为10ms }, { //主端点输出描述 sizeof(ENDPOINT_DESCRIPTOR_STRUCT), //端点描述符的字节数大小 ENDPOINT_DESCRIPTOR, //端点描述符类型编号 MAIN_POINT_OUT, //端点号,主输出端点 ENDPOINT_TYPE_INTERRUPT, //使用的传输类型:中断传输 0x4000, //该端点支持的最大包尺寸,64字节 0x0A //中断扫描时间:设置为10ms } } }; union //程序标志位 { uint16 Register; struct { uint8 bus_reset :1; uint8 suspend :1; uint8 remote_wakeup :1; uint8 int_isr :1; uint8 not_end :1; uint8 usb_idle :1; uint8 u
评论
  • lichangle 2019-01-23 02:45:03
    不是用io口模拟的usb
相关推荐
  • stm32模拟USB键盘.zip
    STM32扫描矩阵键盘,模拟USB键盘功能
  • USB键盘鼠标--单独鼠标.rar
    USB HID设备模拟鼠标动作 STM32F107平台,按键模式鼠标动作
  • UsbKeyboard.rar
    USB开发—模拟 键盘 请按K1-K8分别进行测试 K1:光标左移 K2:光标右移 K3:光标上移 K4:光标下移 K5:滚轮下滚 K6:滚轮上滚 K7:鼠标左键 K8:鼠标右键
  • 模拟键盘输入方式的USB读卡器安卓项目源码
    使用设备是一种模拟键盘输入的读卡器设备,该设备可以直接在Windows下使用,在安卓系统下由于输入法的干扰,大多数无法直接使用。本安卓项目用于拦截该设备扫描内容,可以读出原始字节并转义为卡号,提供更好的兼容...
  • 89C52模拟usb
    采用 89C52mcu 的I/O口 模拟usb 做成一个usb键盘,可以在pc的usb上使用
  • 单片机模拟c64key USB键盘
    单片机模拟c64key USB键盘,使用AVR单片机资源,现在比较流行使用软件USB,
  • 51单片机模拟一个USB键盘的代码,
    51单片机模拟一个USB键盘的代码, 里面有代码和原理图
  • FPGA+USB68013 HID键盘模拟
    FPGA+USB68013 HID键盘模拟 通过FPGA来模拟键盘 在硬件平台上已实现,altera环境,verilog语言
  • USB MCU固件模拟键盘需要的HID编码软件源码
    去年做USB模拟键盘时花钱请人开发的USB HID KEYBOARD 码值自动生成器源码。生成后的码值复制到MCU固件中,即可实现USB键盘码值的自动发送,可以自动在PC电脑上输入。 好东西啊
  • Proteus7.12.rar
    Proteus7.12完美破解版.rar电路仿真软件很好用可以仿真单片数字模拟电路