⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 03.htm

📁 硬盘MP3开发的所有源代码!整理自21ICBBS。 原作者xwj!
💻 HTM
📖 第 1 页 / 共 5 页
字号:
            ***********<BR>void delay(unsigned int 
            x)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>{<BR>unsigned 
            int i;<BR>unsigned int 
            j;<BR>for(i=0;i&lt;x;i++)<BR>for(j=0;j&lt;230;j++);<BR>}<BR>//********************************************<BR><BR>unsigned 
            char remove_enable;<BR><BR>void 
            read_usb_status(void)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//读USB状态寄存器<BR>{<BR>status_Register=0;<BR>if(EORINT){status_bus_reset=1;USBINT=USBINT 
            &amp; 
            (~0x10);return;}<BR>if(SPINT){status_suspend_change=1;USBINT=USBINT 
            &amp; 
            (~0x01);return;}<BR>UEPNUM=0;<BR>if(RXSETUP){status_setup_packet=1;status_control_out_port=1;return;}<BR>status_control_out_port 
            = RXOUTB0;<BR>status_control_in_port&nbsp;&nbsp;= 
            NAKIN;<BR>cls_NAKIN();<BR>UEPNUM=1;<BR>status_main_in_port=NAKIN;<BR>cls_NAKIN();<BR>UEPNUM=2;<BR>status_main_out_port=(RXOUTB0 
            || RXOUTB1);<BR>USBINT=0x00;<BR>}<BR><BR>void 
            set_endpoint_enable(void)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//端点使能<BR>{<BR>UEPNUM=0;<BR>UEPCONX=0x80;<BR>UEPNUM=1;<BR>UEPCONX=0x86;<BR>UEPNUM=2;<BR>UEPCONX=0x82;<BR>}<BR><BR><BR>unsigned 
            char error_count;<BR>void error(unsigned char 
            number)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//出错处理<BR>{<BR>number=0;<BR>error_count++;<BR>LCD_go_home();<BR>prints("&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;");<BR>LCD_line_feed();<BR>prints("&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;");<BR>LCD_go_home();<BR>prints("Error:");<BR>printf(error_count);<BR>}<BR><BR>unsigned 
            char read_endpoint_buff(unsigned char endp,unsigned char 
            len,unsigned char * buff)&nbsp;&nbsp;&nbsp;//读终端点缓冲<BR>{<BR>unsigned 
            char 
            i,j;<BR>UEPNUM=endp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//选择端点<BR>j=UBYCTX;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//读字节数<BR>if(j&gt;len)j=len;<BR>for(i=0;i&lt;j;i++)<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;buff[i]=UEPDATX;<BR>&nbsp;&nbsp;}<BR>if(RXOUTB0){UEPSTAX=UEPSTAX 
            &amp; (~0x42); return j;}&nbsp;&nbsp;&nbsp;//清除RXOUTB0 
            位<BR>if(RXOUTB1){UEPSTAX=UEPSTAX &amp; (~0x42); return 
            j;}&nbsp;&nbsp;&nbsp;//清除RXOUTB1 位<BR>}<BR><BR>unsigned char 
            write_endpoint_buff(unsigned char endp,unsigned char len,unsigned 
            char * buff)&nbsp;&nbsp;&nbsp;&nbsp;//写终端点缓冲<BR>{<BR>unsigned char 
            i;<BR>remove_enable=0;<BR>UEPNUM=endp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//选择端点<BR>for(i=0;i&lt;len;i++)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//填数据寄存器<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;UEPDATX=buff[i];<BR>&nbsp;&nbsp;}<BR>UEPSTAX=UEPSTAX 
            | 0x10;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//设置TXRDY位<BR>while(!( UEPSTAX 
            &amp; 0x01 
            ));&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//等待TXCMP<BR>UEPSTAX=UEPSTAX 
            &amp; 
            (~0x01);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//清除TXCMP<BR>return 
            len;<BR>}<BR><BR>void 
            disconnect_usb(void)<BR>{<BR>USB_CONNECT=1;<BR>delay(100);<BR>}<BR><BR>void 
            connect_usb(void)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//连接USB<BR>{<BR>USB_CONNECT=0;<BR>}<BR><BR>void 
            init_usb(void)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//初始化USB<BR>{<BR>usb_flags_Register=0;<BR>SCSI_Command=1;<BR>SCSI_Data=0;<BR>csw.dCSWSignature=0x55534253;<BR><BR>USBIEN=0x00;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//不允许USB中断<BR>USBCLK=0x03;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>USBCON=0x80;<BR>set_endpoint_enable();<BR>UEPRST=0x07;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//端点FIFO复位<BR>UEPRST=0x00;<BR>}<BR><BR>void 
            usb_bus_reset(void)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//USB总线复位处理<BR>{<BR>usb_flags_Register=0;<BR>SCSI_Command=1;<BR>SCSI_Data=0;<BR>csw.dCSWSignature=0x55534253;<BR>USBADDR=0x80;<BR>LCD_go_home();<BR>prints("&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;");<BR>LCD_line_feed();<BR>prints("&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;");<BR>LCD_go_home();<BR>prints("移动硬盘模式");<BR>LCD_line_feed();<BR>prints("运行中......");<BR>remove_enable=0;<BR>}<BR><BR>void 
            usb_bus_suspend(void)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//USB总线挂起处理<BR>{<BR>LCD_go_home();<BR>prints("现在可以安全的 
            ");<BR>LCD_line_feed();<BR>prints("拔下USB 连线了 
            ");<BR>remove_enable=1;<BR>}<BR><BR>void 
            set_usb_address(void)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//设置地址<BR>{<BR>USB_set_addr=1;<BR>write_endpoint_buff(0,0,0);<BR>USBADDR=0x80 
            | (Control_Data.DeviceRequest.wValue);<BR>USBCON=USBCON | 
            0x01;<BR>USB_usb_endp0_in=0;<BR>USB_setup_packet_out=0;<BR>}<BR><BR>void 
            get_status(unsigned char 
            receiver)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//获取状态响应<BR>{<BR>unsigned 
            char status[2];<BR>switch 
            (receiver)<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;case 
            0:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//获取设备状态<BR>&nbsp;&nbsp;&nbsp;&nbsp;status[0]=0x00;<BR>&nbsp;&nbsp;&nbsp;&nbsp;status[1]=0x00;<BR>&nbsp;&nbsp;&nbsp;&nbsp;break;<BR>&nbsp;&nbsp;&nbsp;case 
            1:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//获取接口状态<BR>&nbsp;&nbsp;&nbsp;&nbsp;status[0]=0x00;<BR>&nbsp;&nbsp;&nbsp;&nbsp;status[0]=0x00;<BR>&nbsp;&nbsp;&nbsp;&nbsp;break;<BR>&nbsp;&nbsp;&nbsp;case 
            2:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//获取端点状态<BR>&nbsp;&nbsp;&nbsp;&nbsp;status[0]=0x00;<BR>&nbsp;&nbsp;&nbsp;&nbsp;status[1]=0x00;<BR>&nbsp;&nbsp;&nbsp;&nbsp;break;<BR>&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;UEPNUM=0;<BR>&nbsp;&nbsp;UEPSTAX=(UEPSTAX 
            | 
            0x80);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//数据阶段的输入<BR>&nbsp;&nbsp;write_endpoint_buff(0,2,status);<BR>&nbsp;&nbsp;UEPSTAX=(UEPSTAX 
            &amp; (~0x80));<BR>&nbsp;&nbsp;USB_usb_endp0_in=0;<BR>}<BR><BR>void 
            clear_feature(unsigned char 
            receiver)&nbsp;&nbsp;&nbsp;&nbsp;<BR>{<BR>receiver=0;<BR>write_endpoint_buff(0,0,0);<BR>USB_usb_endp0_in=0;<BR>USB_setup_packet_out=0;<BR>}<BR><BR>void 
            set_feature(unsigned char 
            receiver)<BR>{<BR>receiver=0;<BR>write_endpoint_buff(0,0,0);<BR>USB_usb_endp0_in=0;<BR>USB_setup_packet_out=0;<BR>}<BR><BR>void 
            set_descriptor(void)<BR>{<BR>write_endpoint_buff(0,0,0);<BR>USB_usb_endp0_in=0;<BR>USB_setup_packet_out=0;<BR>}<BR><BR>void 
            set_configuration(void)<BR>{<BR>write_endpoint_buff(0,0,0);<BR>USBCON=USBCON 
            | 
            0x02;<BR>USB_usb_endp0_in=0;<BR>USB_setup_packet_out=0;<BR>UEPNUM=1;<BR>UEPCONX 
            = 0x86 ;<BR>UEPNUM=2;<BR>UEPCONX = 
            0x82;<BR>LCD_go_home();<BR>prints("&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;");<BR>LCD_line_feed();<BR>prints("&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;");<BR>LCD_go_home();<BR>prints("移动硬盘模式");<BR>LCD_line_feed();<BR>prints("运行中......");<BR>}<BR><BR>void 
            get_configuration(void)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//获取配置状态<BR>{<BR>unsigned 
            char value=0x01;<BR>UEPNUM=0;<BR>UEPSTAX=(UEPSTAX | 
            0x80);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//数据阶段的输入<BR>write_endpoint_buff(0,1,&amp;value);<BR>UEPSTAX=(UEPSTAX 
            &amp; (~0x80));<BR>USB_usb_endp0_in=0;<BR>}<BR><BR>void 
            set_interface(void)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//设置接口<BR>{<BR>write_endpoint_buff(0,0,0);<BR>USB_usb_endp0_in=0;<BR>USB_setup_packet_out=0;<BR>}<BR><BR>void 
            get_interface(void)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//获取接口状态<BR>{<BR>unsigned 
            char value=0x01;<BR>UEPNUM=0;<BR>UEPSTAX=(UEPSTAX | 
            0x80);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//数据阶段的输入<BR>write_endpoint_buff(0,1,&amp;value);<BR>UEPSTAX=(UEPSTAX 
            &amp; (~0x80));<BR>USB_usb_endp0_in=0;<BR>}<BR><BR>void 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -