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

📄 u_mouse.c

📁 USB鼠标,单片机的,可以
💻 C
字号:

//#include<conio.h>
#include "..\..\DRIVER\inc\includes.h"
#include "mainloop.h"
#include "usb100.h"
#include "chap_9.h"
#include "protodma.h"
#include "mainloop.h"

sfr CKCON = 0X8F;

	sbit MCU_SWM0     = P3^4;
	sbit MCU_SWM1     = P3^5;
	sbit MCU_LED0	  = P3^6;
	sbit MCU_LED1	  = P3^7;

	sbit MCU_A0		  = P2^0;

//	sbit MCU_D12CS	  = P1^6;
	sbit MCU_D12RST   = P2^1;


	sbit D12SUSPD	  = P3^3;
	

/*
//*************************************************************************
// USB protocol function pointer arrays
//*************************************************************************
*/
void fn_usb_isr();

//USB标准请求
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,
	read_write_register,
	reserved,
	reserved,
	reserved
};

//类设备请求。
code void (* ClassFunctionTable[])(void)= 
{
  reserved, 
  GetReport, 
  GetIdle,
  GetProtocol,
  reserved,
  reserved, 
  reserved,
  reserved,
  reserved, 
  SetReport,
  SetIdle,
  SetProtocol
};

/*
//*************************************************************************
//  Public static data
//*************************************************************************
*/

extern EPPFLAGS bEPPflags;
extern unsigned long ClockTicks;
extern unsigned char  GenEpBuf[];
extern IO_REQUEST idata ioRequest;

extern unsigned char ioSize, ioCount;
extern unsigned char idata EpBuf[];

CONTROL_XFER ControlData;
BOOL bNoRAM;

//定时器0初始化程序
//定时器用来定时检测按键状态
void init_timer0(void)
{
	TMOD &= 0XF0;                    /* clear Timer 0   */
	TMOD  |= 0X1;
	TL0 = 0X0;                   /* value set by user    */
	TH0 = 0X0;                  /* value set by user  */
//	ET0 = 1;        /* IE.1*/
//	TR0 = 1;                /* TCON.4 start timer  */
	PT0 = 0;

	EA = 1;
}

//中断设置
void init_special_interrupts(void)
{
	IT0 = 0;
	EX0 = 1;
//	ES  = 1;
	PX0 = 1;

	EA =1;
}

//I/O口初始化程序
void init_port()
{
	P0 = 0xFF;
	P1 = 0xFF;
	P2 = 0xFF;
	P3 = 0xFF;
	D12SUSPD = 0;
}


void FlashLed(uchar uci)
{
	if(uci == 0)
	{
		LedOn(LED1);
	}
	else if(uci == 1)
	{
		LedOff(LED1);
		LedOn(LED2);
	}
	else if(uci == 2)
	{
		LedOn(LED1);
		LedOn(LED2);
	}
	else if(uci == 3)
	{
		LedOff(LED1);
		LedOff(LED2);
	}
	else
	{

	}
}




void TestUsbMain(void)
{
	uint uiChipCode;
	uchar ucMouseDataBuff[5];
	ulong ulDelayCount;
	uchar ucStatusMac=0;
	uchar ucLedFlashCount;
	uchar ucEPStatus;
	
	init_port();//初始化I/O口

	init_timer0();//初始化定时器0
	init_special_interrupts();//设置中断

	Open_Serial(COM_1,SER_BAUD_9600,SER_PARITY_NONE | SER_BITS_8 | SER_STOP_1);

	ComShowString(1, "开始进行测试") ;
	for(ulDelayCount=0; ulDelayCount<0x1ff; ulDelayCount++)
	{
		;
	}
	ComShowString(1, "开始进行测试") ;

	#ifdef ConnectPS2Device 
		InitMouse();
	#endif

//	MCU_D12CS = 0x1;	
//	MCU_D12CS = 0x0;

	uiChipCode = D12_ReadChipID();
	ComShowString(1,"读取的芯片字为");//   读取到的字为1012
	ComSendText(1,&uiChipCode,2);

	if(MCU_SWM0 == 0 && MCU_SWM1 == 0) 
	{
		MCU_D12RST = 0;//DMA设置
		MCU_D12RST = 1;
		D12_SetDMA(0x0);
	}

	bEPPflags.value = 0;
	reconnect_USB();//重新连接USB

	ucLedFlashCount = 0;
	while( TRUE )
	{

		memset(ucMouseDataBuff,0,5);
		ucLedFlashCount++;
		FlashLed(ucLedFlashCount/64);

		if (bEPPflags.bits.timer)
		{
			DISABLE;//定时器溢出,检测按键状态
			bEPPflags.bits.timer = 0;
			ENABLE;

			if(bEPPflags.bits.configuration)//设备未配置返回
				check_key_LED();
		}
		if (bEPPflags.bits.bUSB_Busy)
		{
			fn_usb_isr();

		}

		if (bEPPflags.bits.bus_reset) {//设备复位处理
			DISABLE;
			bEPPflags.bits.bus_reset = 0;
			ENABLE;
			// Release D12's SUSPEND pin after bus reset
			// Enable 74HCT123 pulse generation before disconnect
			D12SUSPD = 1;
		} // if bus reset

		if (bEPPflags.bits.suspend) {//挂起改变处理
			DISABLE;
			bEPPflags.bits.suspend= 0;
			ENABLE;

			if(D12SUSPD == 1) 
			{//挂起处理
				D12SUSPD = 0;
				D12SUSPD = 1;
			}
		} // if suspend change

		if (bEPPflags.bits.setup_packet){//Setup包处理
			DISABLE;
			bEPPflags.bits.setup_packet = 0;
			ENABLE;
			control_handler();//调用请求处理子程序
			D12SUSPD = 1;
		} // if setup_packet

	
		if(bEPPflags.bits.configuration)//设备未配置返回
		{
			#ifdef ConnectPS2Device 

			if(GetMouseData(ucMouseDataBuff))
			{
			//	ComShowString(COM_1,"收到鼠标数据为:");
			//	ComSendText(COM_1,ucMouseDataBuff,4);
				TransferPS2DataToUSB(ucMouseDataBuff);
			//	ComShowString(COM_1,"转换后的数据为:

⌨️ 快捷键说明

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