/******************************************************************
本程序只供学习使用,未经作者许可,不得用于其它任何用途
我的邮箱:computer-lov@tom.com
欢迎访问我的blog: http://computer00.21ic.org
USBMouse.C file
作者:Computer-lov
建立日期: 2007.03.20
修改日期: 2007.03.23
版本:V1.1
版权所有,盗版必究。
Copyright(C) Computer-lov 2007-2017
All rights reserved
*******************************************************************/
#include <AT89x52.H>
#include "USB.H"
#include "PDIUSBD12.H"
#include "My_type.h"
#include "UART.H"
#include "key.h"
#include "Mouse.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,0x20,0x9F,0x07,0x68,'@',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
0x7956, //产品编号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的子类
0x02, //使用的协议:鼠标
0x00 //接口描述符字符串索引
},
//hid_descriptor
{
sizeof(HID_DESCRIPTOR_STRUCT), //HID描述符的字节数大小
HID_DESCRIPTOR, //HID描述符类型编号
0x1001, //HID类协议版本号,为1.1
0x21, //固件的国家地区代号,0x21为美国
NUM_SUB_DESCRIPTORS, //下级描述符的数量
{
{
REPORT_DESCRIPTOR, //下级描述符为报告描述符
SWAP16(sizeof(MouseReportDescriptor)) //下级描述符的长度
}
},
},
//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 usb_bus
没有合适的资源?快使用搜索试试~ 我知道了~
一个USB鼠标的代码示例
共18个文件
h:6个
c:3个
obj:2个
需积分: 15 7 下载量 121 浏览量
2015-06-07
10:08:01
上传
评论
收藏 32KB ZIP 举报
温馨提示
一个USB鼠标的代码示例,包括USB枚举,鼠标左中右按键。使用8051单片机。
资源推荐
资源详情
资源评论
收起资源包目录
89S52作主控的USB鼠标源代码.zip (18个子文件)
89S52作主控的USB鼠标源代码
SourceCode
UsbMouse.Opt 2KB
UART.c 4KB
Key.OBJ 5KB
Key.c 2KB
UsbMouse.Uv2 2KB
UsbMouse.plg 171B
UART.LST 7KB
UsbMouse.lnp 73B
mouse.h 2KB
UsbMouse.hex 16KB
UsbMouse.c 37KB
UART.OBJ 8KB
Key.LST 4KB
Key.h 706B
USB.H 7KB
My_type.h 688B
UART.h 740B
PDIUSBD12.h 3KB
共 18 条
- 1
资源评论
liuwenbys
- 粉丝: 0
- 资源: 1
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功