<STC32G12K128入门第十步>USB HID键盘

时间:2025-03-26 07:00:13
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; } }