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

📄 main.c

📁 一个用C语言编写的usb程序,测试可以运行,内附有原理图
💻 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 + -