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

📄 main.c

📁 STC51+PDIUSBD12 USB鼠标源代码
💻 C
字号:
#include "CHAP_9.H"
#include "d12.h"
#include "uart.h"
#include "ini.h"
#include "mytype.h"
#include "ISR.H"
#define USB_INT                   P3_2
extern EPPFLAGS bEPPflags;
CONTROL_XFER ControlData;

code void (*StandardDeviceRequest[])(void) =
{
	get_status,
	clear_feature,
	reserved,
	set_feature,
	reserved,
	set_address,
	get_descriptor,
	reserved,
	get_configuration,
	set_configuration,
	get_interface,
	set_interface,
	reserved,
	reserved,
	reserved,
	reserved
};
//用户厂商请求
code void (*VendorDeviceRequest[])(void) =
{
	reserved,
	reserved,
	reserved,
	reserved,
	reserved,
	reserved,
	reserved,
	reserved,
	reserved,
	reserved,
	reserved,
	reserved,
	reserved,
	reserved,
	reserved,
	reserved
};
/*void help_devreq(unsigned char typ, unsigned char req)
{
	typ >>= 5;

	if(typ == USB_STANDARD_REQUEST) {
	}
	else {
		if(bEPPflags.bits.verbose)
			printf("Request Type = %s, bRequest = 0x%bx.\n", _NAME_USB_REQUEST_TYPE[typ],
				req);
	}
}*/				   
//请求处理子程序
void control_handler()
{
	unsigned char type, req;

	type = ControlData.DeviceRequest.bmRequestType & USB_REQUEST_TYPE_MASK;
	req = ControlData.DeviceRequest.bRequest & USB_REQUEST_MASK;
	Prints("\r\nbmRequestType=");
	PrintShortIntHex(ControlData.DeviceRequest.bmRequestType);
	Prints("\r\nbRequest=");
	PrintShortIntHex(ControlData.DeviceRequest.bRequest);

	//help_devreq(type, req); //显示设备请求

	if (type == USB_STANDARD_REQUEST)
		(*StandardDeviceRequest[req])();//调用标准请求
	else if (type == USB_VENDOR_REQUEST)
		(*VendorDeviceRequest[req])();//调用厂商请求
	else
		stall_ep0();
}

void main(void)
{
  
  InitUART();  //串口初始化
  Printc(0x0c);  //清屏
  Printc(0x0c);
  Prints("系统启动.\r\n");
  disconnect_usb(); 	   //断开USB连接
  delay(1000);	       //延迟 
  init_usb();		   //初始化USB芯片
  bEPPflags.value = 0;
  connect_usb();		   //连接USB
  while(1)
  {
    if(!USB_INT)
	 {
	   Prints("interrupt");
	   fn_usb_isr();
	 }
	if(bEPPflags.bits.setup_packet)
	 {
	   bEPPflags.bits.setup_packet=0;
	   control_handler();

	 }
	if(bEPPflags.bits.bus_reset)
	 {
	   EA=0;
	   bEPPflags.bits.bus_reset=0;
	   EA=1;
	 }
	if(bEPPflags.bits.suspend)
	 {
	   EA=0;
	   bEPPflags.bits.suspend=0;
	   EA=1;

	 }
  }	 
 }

⌨️ 快捷键说明

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