📄 u_mouse.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 + -