📄 03.htm
字号:
2004.9.27<BR> Last edited date:
2005.5.31<BR> Copyright (c) 2005
Computer-lov<BR> version 1.1<BR>*/<BR><BR>#include
"AT89C51SND1C.H"<BR>#include "USB.H"<BR>#include
"MASS_STORAGE.H"<BR>#include "IDE.h"<BR>#include "LCD.H"<BR>#include
"hardware.h"<BR>#include "keyboard.h"<BR>#include
"mp3.h"<BR><BR><BR>CONTROL_DATA_BUFF xdata Control_Data;<BR><BR>CBW
xdata cbw;<BR>CSW xdata csw;<BR><BR>unsigned char bdata
SCSI_Register;<BR>sbit
SCSI_Command = SCSI_Register^0;<BR>sbit
SCSI_Data = SCSI_Register^1;<BR><BR><BR>unsigned
char *pData;<BR><BR>unsigned char code
DISK_INF[36]<BR>= //磁盘信息<BR>{<BR>0x00,<BR>0x00,<BR>0x02,<BR>0x02,<BR>0x1F,<BR>0x00,0x00,0x00,<BR>0x49,0x44,0x45,0xA1,0xFA,0x55,0x53,0x42,
<BR>0xC1,0xF5,0xC8,0xD9,0xD7,0xD4,0xBC,0xBA,0xD7,0xF6,0xB5,0xC4,0x4D,0x50,0x33,0x20,<BR>0x31,0x2E,0x30,0x31<BR>};<BR><BR><BR>code
unsigned char
SENSE[0x12]= //模式探测返回数据<BR>{<BR>0x70,
0x00, 0x05, 0x00, 0x00, 0x00,<BR>0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x24, 0x00, 0x00, 0x00, 0x00, 0x00<BR>};<BR><BR>unsigned int
SWAP(unsigned int
temp) //高低字节交换<BR>{<BR>unsigned
char i;<BR>i=((unsigned char *)&temp)[0];<BR>((unsigned char
*)&temp)[0]=((unsigned char *)&temp)[1];<BR>((unsigned char
*)&temp)[1]=i;<BR>return temp;<BR>}<BR><BR>unsigned char
LSB(unsigned int
temp) //取一个整数的低字节<BR>{<BR>return
(unsigned char)temp;<BR>}<BR><BR>unsigned char MSB(unsigned int
temp) //取一个整数的高字节<BR>{<BR>return
(unsigned char)(temp>>8);<BR>}<BR><BR>code unsigned char
LANGUAGE_ID[4]={0x04,0x03,0x09,0x04}; //字符串描述符所用的语言种类 <BR><BR>code
unsigned char
device_serial_number[18]= //设备序列号<BR>{0x12,0x03,0x32,0x00,0x30,0x00,0x37,0x00,0x31,0x00,0x30,0x00,0x39,0x00,0x38,0x00,0x32,0x00};<BR><BR>code
DEVICE_DESCRIPTOR_STRUCT
device_descriptor= //设备描述符<BR>{<BR>sizeof(DEVICE_DESCRIPTOR_STRUCT), //设备描述符的字节数大小<BR>DEVICE_DESCRIPTOR, //设备描述符类型编号<BR>0x1001, //USB版本号<BR>0x00, //USB分配的设备类代码<BR>0x00, //USB分配的子类代码<BR>0x00, //USB分配的设备协议代码<BR>MAX_CONTROL_DATA_SIZE, //端点0的最大包大小<BR>0x7111, //厂商编号<BR>0xf0ff, //产品编号<BR>0x0100, //设备出厂编号<BR>0x00, //设备厂商字符串的索引<BR>0x00, //描述产品字符串的索引<BR>0x02, //描述设备序列号字符串的索引<BR>0x01 //可能的配置数量<BR>};<BR><BR>typedef
struct
_CON_INT_ENDP_DESCRIPTOR_STRUCT<BR>{<BR>CONFIGURATION_DESCRIPTOR_STRUCT
configuration_descriptor;<BR>INTERFACE_DESCRIPTOR_STRUCT interface_descritor;<BR>ENDPOINT_DESCRIPTOR_STRUCT endpoint_descriptor[ENDPOINT_NUMBER];<BR>}CON_INT_ENDP_DESCRIPTOR_STRUCT;<BR><BR>code
CON_INT_ENDP_DESCRIPTOR_STRUCT
con_int_endp_descriptor=<BR>{<BR>//configuration_descriptor //配置描述符<BR>{<BR>sizeof(CONFIGURATION_DESCRIPTOR_STRUCT), //配置描述符的字节数大小<BR>CONFIGURATION_DESCRIPTOR, //配置描述符类型编号<BR>(sizeof(CONFIGURATION_DESCRIPTOR_STRUCT)+sizeof(INTERFACE_DESCRIPTOR_STRUCT)+sizeof(ENDPOINT_DESCRIPTOR_STRUCT)*ENDPOINT_NUMBER)*256+<BR>(sizeof(CONFIGURATION_DESCRIPTOR_STRUCT)+sizeof(INTERFACE_DESCRIPTOR_STRUCT)+sizeof(ENDPOINT_DESCRIPTOR_STRUCT)*ENDPOINT_NUMBER)/256,<BR>0x01, //只包含一个接口<BR>0x01, //该配置的编号<BR>0x00, //iConfiguration字段<BR>0x80, //采用总线供电,不支持远程唤醒<BR>0xC8 //从总线获取最大电流400mA<BR>},<BR>//interface_descritor //接口描述符<BR>{<BR>sizeof(INTERFACE_DESCRIPTOR_STRUCT), //接口描述符的字节数大小<BR>INTERFACE_DESCRIPTOR, //接口描述符类型编号<BR>0x00, //接口编号为0<BR>0x00, //该接口描述符的编号<BR>ENDPOINT_NUMBER, //非0端点数量为2,只使用端点主端点输入和输出<BR>0x08, //USB大容量存储设备<BR>0x06, //使用的子类,为简化块命令<BR>0x50, //使用的协议,这里使用单批量传输协议<BR>0x00 //接口描述符字符串索引<BR>},<BR><BR>//endpoint_descriptor[]<BR>{<BR>{ //主端点输入描述<BR> sizeof(ENDPOINT_DESCRIPTOR_STRUCT), //端点描述符的字节数大小<BR> ENDPOINT_DESCRIPTOR, //端点描述符类型编号<BR> MAIN_POINT_IN, //端点号,主输入端点<BR> ENDPOINT_TYPE_BULK, //使用的传输类型,批量传输<BR> 0x4000, //该端点支持的最大包尺寸,64字节<BR> 0x00 //中断扫描时间,对批量传输无效<BR>},<BR> <BR>{ //主端点输出描述<BR> sizeof(ENDPOINT_DESCRIPTOR_STRUCT), //端点描述符的字节数大小<BR> ENDPOINT_DESCRIPTOR, //端点描述符类型编号<BR> MAIN_POINT_OUT, //端点号,主输出端点<BR> ENDPOINT_TYPE_BULK, //使用的传输类型,批量传输<BR> 0x4000, //该端点支持的最大包尺寸,64字节<BR> 0x00 //中断扫描时间,对批量传输无效<BR>}<BR>}<BR>};<BR><BR><BR>unsigned
int bdata usb_flags_Register; //程序标志位<BR><BR>sbit
USB__bus_reset =
usb_flags_Register^0;<BR>sbit
USB_suspend =
usb_flags_Register^1;<BR>sbit
USB_remote_wakeup =
usb_flags_Register^2;<BR>sbit
USB_int_isr =
usb_flags_Register^3;<BR>sbit
USB_not_end =
usb_flags_Register^4;<BR>sbit
USB_usb_idle =
usb_flags_Register^5;<BR>sbit
USB_usb_busy =
usb_flags_Register^6;<BR>sbit USB_setup_packet_in =
usb_flags_Register^7;<BR>sbit USB_setup_packet_out =
usb_flags_Register^8;<BR>sbit
USB_set_addr =
usb_flags_Register^9;<BR>sbit
USB_usb_endp0_in =
usb_flags_Register^10;<BR>sbit
USB_usb_endp1_in =
usb_flags_Register^11;<BR>sbit
USB_usb_endp2_out =
usb_flags_Register^12;<BR><BR><BR>unsigned char bdata
status_Register; ////状态寄存器<BR><BR>sbit
status_control_out_port = status_Register^0;<BR>sbit
status_control_in_port = status_Register^1;<BR>sbit
status_main_out_port = status_Register^2;<BR>sbit
status_main_in_port = status_Register^3;<BR>sbit
status_bus_reset = status_Register^4;<BR>sbit
status_suspend_change = status_Register^5;<BR>sbit
status_setup_packet = status_Register^6;<BR><BR>//***************** 延时x毫秒函数
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -