<STC32G12K128入门第十步>USB HID键盘
void usb_class_in()
{
BYTE key[8];
BYTE i;
if (DeviceState != DEVSTATE_CONFIGURED) //如果USB配置没有完成,就直接退出
return;
if (!UsbInBusy && fKeyOK) //判断USB是否空闲,以及是否有按键按下
{
fKeyOK = 0;
key[0] = 0; //清除发送缓冲区
key[1] = 0;
key[2] = 0;
key[3] = 0;
key[4] = 0;
key[5] = 0;
key[6] = 0;
key[7] = 0;
switch (bKeyCode)
{
case 0: key[2] = 0x27; break; //0x1e -> "0"
case 1: key[2] = 0x1e; break; //0x1e -> "1"
case 2: key[2] = 0x1f; break; //0x1f -> "2"
case 3: key[2] = 0x20; break; //0x20 -> "3"
case 4: key[2] = 0x21; break; //0x21 -> "4"
case 5: key[2] = 0x22; break; //0x1e -> "5"
case 6: key[2] = 0x23; break; //0x1f -> "6"
case 7: key[2] = 0x24; break; //0x20 -> "7"
case 8: key[2] = 0x25; break; //0x21 -> "8"
case 9: key[2] = 0x26; break; //0x21 -> "9"
case 254: key[2] = 0x58; break; //0x21 -> "Enter"
case 255: key[2] = 0x00; break; //0x21 -> "0x00"
case '0': key[2] = 0x27; break; //0x1e -> "0"
case '1': key[2] = 0x1e; break; //0x1e -> "1"
case '2': key[2] = 0x1f; break; //0x1f -> "2"
case '3': key[2] = 0x20; break; //0x20 -> "3"
case '4': key[2] = 0x21; break; //0x21 -> "4"
case '5': key[2] = 0x22; break; //0x1e -> "5"
case '6': key[2] = 0x23; break; //0x1f -> "6"
case '7': key[2] = 0x24; break; //0x20 -> "7"
case '8': key[2] = 0x25; break; //0x21 -> "8"
case '9': key[2] = 0x26; break; //0x21 -> "9"
case ',': key[2] = 0x2C; break; //0x21 -> -空格作用-
case '=': key[2] = 0x2E; break; //0x21 -> -空格作用-
case ':': key[2] = 0x33; break; //0x21 -> -空格作用-
case '-': key[2] = 0x2D; break; //0x21 -> -空格作用-
case '.': key[2] = 0x37; break; //0x21 -> -空格作用-
//----------------大写----------------------
case 'Q': key[2] = 0x14; break; //0x21 -> "Q"
case 'W': key[2] = 0x1A; break; //0x21 -> "W"
case 'E': key[2] = 0x08; break; //0x21 -> "E"
case 'R': key[2] = 0x15; break; //0x21 -> "R"
case 'T': key[2] = 0x17; break; //0x21 -> "T"
case 'Y': key[2] = 0x1C; break; //0x21 -> "Y"
case 'U': key[2] = 0x18; break; //0x21 -> "U"
case 'I': key[2] = 0x0C; break; //0x21 -> "I"
case 'O': key[2] = 0x12; break; //0x21 -> "O"
case 'P': key[2] = 0x13; break; //0x21 -> "P"
//------------------------------------------
case 'A': key[2] = 0x04; break; //0x21 -> "A"
case 'S': key[2] = 0x16; break; //0x21 -> "S"
case 'D': key[2] = 0x07; break; //0x21 -> "D"
case 'F': key[2] = 0x09; break; //0x21 -> "F"
case 'G': key[2] = 0x0A; break; //0x21 -> "G"
case 'H': key[2] = 0x0B; break; //0x21 -> "H"
case 'J': key[2] = 0x0D; break; //0x21 -> "J"
case 'K': key[2] = 0x0E; break; //0x21 -> "K"
case 'L': key[2] = 0x0F; break; //0x21 -> "L"
//------------------------------------------
case 'Z': key[2] = 0x1D; break; //0x21 -> "A"
case 'X': key[2] = 0x1B; break; //0x21 -> "S"
case 'C': key[2] = 0x06; break; //0x21 -> "D"
case 'V': key[2] = 0x19; break; //0x21 -> "F"
case 'B': key[2] = 0x05; break; //0x21 -> "G"
case 'N': key[2] = 0x11; break; //0x21 -> "H"
case 'M': key[2] = 0x10; break; //0x21 -> "J"
//------------------------------------------
//----------------小写----------------------
case 'q': key[2] = 0x14; break; //0x21 -> "Q"
case 'w': key[2] = 0x1A; break; //0x21 -> "W"
case 'e': key[2] = 0x08; break; //0x21 -> "E"
case 'r': key[2] = 0x15; break; //0x21 -> "R"
case 't': key[2] = 0x17; break; //0x21 -> "T"
case 'y': key[2] = 0x1C; break; //0x21 -> "Y"
case 'u': key[2] = 0x18; break; //0x21 -> "U"
case 'i': key[2] = 0x0C; break; //0x21 -> "I"
case 'o': key[2] = 0x12; break; //0x21 -> "O"
case 'p': key[2] = 0x13; break; //0x21 -> "P"
//------------------------------------------
case 'a': key[2] = 0x04; break; //0x21 -> "A"
case 's': key[2] = 0x16; break; //0x21 -> "S"
case 'd': key[2] = 0x07; break; //0x21 -> "D"
case 'f': key[2] = 0x09; break; //0x21 -> "F"
case 'g': key[2] = 0x0A; break; //0x21 -> "G"
case 'h': key[2] = 0x0B; break; //0x21 -> "H"
case 'j': key[2] = 0x0D; break; //0x21 -> "J"
case 'k': key[2] = 0x0E; break; //0x21 -> "K"
case 'l': key[2] = 0x0F; break; //0x21 -> "L"
//------------------------------------------
case 'z': key[2] = 0x1D; break; //0x21 -> "A"
case 'x': key[2] = 0x1B; break; //0x21 -> "S"
case 'c': key[2] = 0x06; break; //0x21 -> "D"
case 'v': key[2] = 0x19; break; //0x21 -> "F"
case 'b': key[2] = 0x05; break; //0x21 -> "G"
case 'n': key[2] = 0x11; break; //0x21 -> "H"
case 'm': key[2] = 0x10; break; //0x21 -> "J"
}
EUSB = 0;
UsbInBusy = 1;
usb_write_reg(INDEX, 1);
for (i=0; i<8; i++)
{
usb_write_reg(FIFO1, key[i]); //发送按键码
}
usb_write_reg(INCSR1, INIPRDY);
EUSB = 1;
}
}