📄 main.c
字号:
//#pragma SRC
#include <at89x51.h>
#include <intrins.h>
#include "declare.h"
#include "descript.h"
#include "main.h"
void delay(unsigned int c) //delay for (14*c+11)*a/2 (us).
{
unsigned char a;
unsigned int b;
for (a=0;a<0x10;a++)
for (b=0;b<c;b++)
;
}
void Output(unsigned char d)
{
d = ~d;
P1 = d;
}
unsigned char Input(void)
{
return P2;
}
void main()
{
unsigned char led;
unsigned char i;
FLAGS = 0;
SaveLength = 0;
Counter = 0;
MSecCounter = 125;
if (S10 == 0) //mode select, decide descriptors of device that is to be configured
{
if (S11 == 0)
{
Output(0x03); //for debugging
delay(1000);
mode = D12TEST;
DeviceDescriptor = D12Test_DeviceDescriptor;
ConfigurationDescriptor = D12Test_ConfigurationDescriptor;
ConfigLength = D12Test_ConfigLength;
String = String0;
ReportDescriptor = D12Test_ReportDescriptor;
ReportLength = D12Test_ReportLength;
}
else
{
s = Input();
if (sb0 == 0)
{
Output(0x04); //for debugging
delay(1000);
mode = KEYBOARD;
DeviceDescriptor = Keyboard_DeviceDescriptor;
ConfigurationDescriptor = Keyboard_ConfigurationDescriptor;
ConfigLength = Keyboard_ConfigLength;
String = String0;
ReportDescriptor = Keyboard_ReportDescriptor;
ReportLength = Keyboard_ReportLength;
}
else
{
Output(0x08); //for debugging
delay(1000);
mode = MOUSE;
DeviceDescriptor = Mouse_DeviceDescriptor;
ConfigurationDescriptor = Mouse_ConfigurationDescriptor;
ConfigLength = Mouse_ConfigLength;
String = String0;
ReportDescriptor = Mouse_ReportDescriptor;
ReportLength = Mouse_ReportLength;
delay(1000);
msInit();
}
}
}
else
{
if (S11 == 0)
{
Output(0x30); //for debugging
delay(1000);
mode = PRINTER;
}
else
{
Output(0xc0); //for debugging
delay(1000);
mode = STORAGE;
}
}
delay(1000);
d12comm(0xf3);
d12write(0x16);
d12write(0x41);
IT0 = 0;
EX0 = 1;
EA = 1;
delay(1000);
led = 0x80;
switch (mode) {
case D12TEST:
while (1) {
if (IsListening == 0)
{
Output(led);
led = _cror_(led, 1);
}
delay(1300); //about 1/8ms for all.
}
case KEYBOARD:
while (1) {
if (Configured == 0)
{
delay(1000);
}
else
{
kbScan();
}
}
case MOUSE:
while (1) {
if (Configured == 0)
{
delay(1000);
}
else
{
msScan();
delay(100);
}
}
case PRINTER:
case STORAGE:
default:
while (1);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -