📄 keyboard.c
字号:
{0x0001, 13, 0x20, usbUsageF6},
{0x0001, 13, 0x10, usbUsageRightBracket},
{0x0001, 13, 0x08, usbUsageI},
{0x0001, 13, 0x04, usbUsage8},
{0x0001, 13, 0x02, usbUsageEqual},
{0x0001, 13, 0x01, usbUsageK},
{0x0006, 13, 0x80, usbUsage6}, // for S[3:0]=2 and S[3:0]=4, 6=2+4
{0x0006, 13, 0x40, usbUsageF},
{0x0006, 13, 0x20, usbUsageO},
{0x0006, 13, 0x10, usbUsageX},
{0x0008, 13, 0x80, usbUsage3}, // for David's keypad
{0x0008, 13, 0x40, usbUsage2}, // for David's keypad
{0x0008, 13, 0x20, usbUsage1}, // for David's keypad
{0x0008, 13, 0x10, usbUsageEnd}, // for David's keypad
{0x0008, 13, 0x08, usbUsageEnter}, // for David's keypad
{0x0008, 13, 0x04, usbUsageUpArrow}, // for David's keypad
{0x0008, 13, 0x02, usbUsageBackslash}, // for David's keypad
{0x0008, 13, 0x01, usbUsageSlash}, // for David's keypad
{0x0001, 12, 0x80, usbUsageN},
{0x0001, 12, 0x40, usbUsageM},
{0x0001, 12, 0x20, usbUsageH},
{0x0001, 12, 0x10, usbUsageY},
{0x0001, 12, 0x08, usbUsageU},
{0x0001, 12, 0x04, usbUsage7},
{0x0001, 12, 0x02, usbUsage6},
{0x0001, 12, 0x01, usbUsageJ},
{0x0006, 12, 0x80, usbUsage7}, // for S[3:0]=2 and S[3:0]=4, 6=2+4
{0x0006, 12, 0x40, usbUsageG},
{0x0006, 12, 0x20, usbUsageP},
{0x0006, 12, 0x10, usbUsageY},
{0x0008, 12, 0x80, usbUsageDeleteForward}, // for David's keypad
{0x0008, 12, 0x40, usbUsage0}, // for David's keypad
{0x0008, 12, 0x20, usbUsageInsert}, // for David's keypad
{0x0008, 12, 0x10, usbUsageRightArrow}, // for David's keypad
{0x0008, 12, 0x08, usbUsageSpacebar}, // for David's keypad
{0x0008, 12, 0x04, usbUsageDownArrow}, // for David's keypad
{0x0008, 12, 0x02, usbUsageLeftArrow}, // for David's keypad
{0x0008, 12, 0x01, usbUsagePeriod}, // for David's keypad
{0x0001, 11, 0x80, usbUsageB},
{0x0001, 11, 0x40, usbUsageV},
{0x0001, 11, 0x20, usbUsageG},
{0x0001, 11, 0x10, usbUsageT},
{0x0001, 11, 0x08, usbUsageR},
{0x0001, 11, 0x04, usbUsage4},
{0x0001, 11, 0x02, usbUsage5},
{0x0001, 11, 0x01, usbUsageF},
{0x0006, 11, 0x80, usbUsage8}, // for S[3:0]=2 and S[3:0]=4, 6=2+4
{0x0006, 11, 0x40, usbUsageH},
{0x0006, 11, 0x20, usbUsageQ},
{0x0006, 11, 0x10, usbUsageZ},
{0x0001, 10, 0x40, usbUsageC},
{0x0001, 10, 0x20, usbUsageF4},
{0x0001, 10, 0x10, usbUsageF3},
{0x0001, 10, 0x08, usbUsageE},
{0x0001, 10, 0x04, usbUsage3},
{0x0001, 10, 0x02, usbUsageF2},
{0x0001, 10, 0x01, usbUsageD},
{0x0006, 10, 0x80, usbUsage9}, // for S[3:0]=2 and S[3:0]=4, 6=2+4
{0x0006, 10, 0x40, usbUsageI},
{0x0006, 10, 0x20, usbUsageR},
{0x0006, 10, 0x10, usbUsageCapsLock},
{0x0001, 9, 0x40, usbUsageX},
{0x0001, 9, 0x10, usbUsageCapsLock},
{0x0001, 9, 0x08, usbUsageW},
{0x0001, 9, 0x04, usbUsage2},
{0x0001, 9, 0x02, usbUsageF1},
{0x0001, 9, 0x01, usbUsageS},
// {0x0008, 9, 0x40, 0x66}, // for NewMotion one suspend-key keyboard
{0x0008, 9, 0x80, usbUsageF1}, // for David's keypad
{0x0008, 9, 0x40, usbUsageF2}, // for David's keypad
{0x0008, 9, 0x20, usbUsageF3}, // for David's keypad
{0x0008, 9, 0x10, usbUsageF4}, // for David's keypad
{0x0008, 9, 0x08, usbUsageF5}, // for David's keypad
{0x0008, 9, 0x04, usbUsageF6}, // for David's keypad
{0x0008, 9, 0x02, usbUsageF7}, // for David's keypad
{0x0001, 8, 0x40, usbUsageZ},
{0x0001, 8, 0x20, usbUsageEscape},
{0x0001, 8, 0x10, usbUsageTab},
{0x0001, 8, 0x08, usbUsageQ},
{0x0001, 8, 0x04, usbUsage1},
{0x0001, 8, 0x02, usbUsageTilde},
{0x0001, 8, 0x01, usbUsageA},
{0x0008, 8, 0x04, usbUsageF8}, // for David's keypad
{0x0008, 8, 0x02, usbUsageF9}, // for David's keypad
{0x0008, 8, 0x01, usbUsageF10}, // for David's keypad
{0x0001, 7, 0x80, usbUsageDownArrow},
{0x0001, 7, 0x40, usbUsageKeypadNumlock},
{0x0001, 7, 0x10, usbUsageKeypad4},
{0x0001, 7, 0x08, usbUsageKeypad7},
{0x0001, 7, 0x04, usbUsageF11},
{0x0001, 7, 0x02, usbUsageDeleteForward},
{0x0001, 7, 0x01, usbUsageKeypad1},
{0x0001, 6, 0x80, usbUsageRightArrow},
{0x0001, 6, 0x40, usbUsageKeypadSlash},
{0x0001, 6, 0x20, usbUsageKeypad0},
{0x0001, 6, 0x10, usbUsageKeypad5},
{0x0001, 6, 0x08, usbUsageKeypad8},
{0x0001, 6, 0x04, usbUsageF12},
{0x0001, 6, 0x02, usbUsageInsert},
{0x0001, 6, 0x01, usbUsageKeypad2},
{0x0001, 5, 0x40, usbUsageRightShift, 0x20},
{0x0001, 5, 0x10, usbUsageLeftShift, 0x02},
{0x0001, 4, 0x08, usbUsageWindowsKey},
{0x0001, 4, 0x01, usbUsageRightGUI, 0x80},
{0x0001, 3, 0x80, usbUsageKeypadMinus},
{0x0001, 3, 0x40, usbUsageKeypadAsterisk},
{0x0001, 3, 0x20, usbUsageKeypadPeriod},
{0x0001, 3, 0x10, usbUsageKeypad6},
{0x0001, 3, 0x08, usbUsageKeypad9},
{0x0001, 3, 0x04, usbUsagePageDown},
{0x0001, 3, 0x02, usbUsagePageUp},
{0x0001, 3, 0x01, usbUsageKeypad3},
{0x0001, 2, 0x80, usbUsageLeftArrow},
{0x0001, 2, 0x40, usbUsagePause},
{0x0001, 2, 0x20, usbUsageUpArrow},
{0x0001, 2, 0x08, usbUsageKeypadPlus},
{0x0001, 2, 0x04, usbUsageEnd},
{0x0001, 2, 0x02, usbUsageHome},
{0x0001, 2, 0x01, usbUsageKeypadEnter},
{0x0001, 1, 0x40, usbUsageRightControl, 0x10},
{0x0001, 1, 0x02, usbUsageLeftControl, 0x01},
{0xFFFF, 0, 0x00, 0x00} // End of table flag
};
void delay(int i)
{
while(i--);
}
void main(void)
{
int vidPidMask;
int iTemp;
#ifdef SERIALDEBUG
// Enable serial port for debug at 9600 baud, using 48.000MHZ.
SCON = 0x52;
TH1 = -13;
TMOD = 0x20;
TR1 = 1;
#endif
bPUR0 = 0x00; // enable internal pull-ups
bPUR1 = 0x00;
bPUR2 = 0x00;
bPUR3 = 0x00;
P3 = 0xff; // speed-up pull-ups
P2 = 0xff;
P1 = 0xff;
P0 = 0xff;
GetVidPidSetting(); // Obtain the S0-S3 setting to determine VID/PID
InitializeUsbHub(); // Initialize the USB hub connecting it to upstream port
InitializeUsbFunction(); // Initialize the USB embedded function
ClearKeyBoardBuffer(); // Clear the keyboard buffer
vidPidMask = 1 << s0123; // Prepares our VID/PID mask to decide whether a given key is valid
while(!deviceReady); // Wait for the setup packets to be exchanged, etc.
for(iTemp = 0; iTemp < 256; iTemp++)
keypressDebounce[iTemp] = 0x00;
while(1) { // Indefinite loop to handle keyboard scanning
// for debug only
// P3.2 = bVIDSTA&1;
// P3.3 = (bVIDSTA>>1)&1;
// P3.4 = (bVIDSTA>>2)&1;
// P3.5 = (bVIDSTA>>3)&1;
if(bSuspended) {
// disable P0, P1 and part of P3 internal pull-ups
bPUR0 = 0xFF;
bPUR1 = 0xFF;
bPUR3 = 0xc3; // disable P3.6, P3.7, P3.0, & P3.1 pull-ups
P0 = 0x00;
P1 = 0x00;
P3 = 0xff; // turn LED off
P3.6 = 0;
P3.7 = 0;
// TUSB3210 Base EVM needs follow codes, otherwise it will comsume more 100uA power
P3.0 = 0; // since dip switch may tie P3.0 & P3.1 to ground
P3.1 = 0;
EX1 = ENABLE; // enable P2 interrupt
// Set IDLE bit in PCON to bring MCU to suspend
PCON |= 0x01;
// uC wakeups from suspend
EX1 = DISABLE;
bPUR0 = 0x00;
bPUR1 = 0x00;
bPUR3 = 0x00;
// Execution will stop until we wake back up, at which point
// we then conitnue by indicating we're no longer in Suspend
// mode.
bSuspended = FALSE;
} // end of if(bSuspended)
if(!deviceReady)
continue;
// We only scan the keyboard if the keypressBuffer is currently empty.
if(keypressBuffer[0] == 0x00) {
BYTE scanLine, keypress, keyDefOffset = 0;
modifierByte = 0x00; // We initialize the modifier byte to zero initially
// We now select each of the 18 scanlines (0-17) in sequence so that
// we can detect any keys that have been pressed on the line.
for(scanLine = 18; scanLine > 0; scanLine--) {
// We start the loop by turning on all the bits of the 18 scanline select
// lines.
P0 = 0xFF;
P1 = 0xFF;
P3 |= 0xC0;
// Now we turn off a single GPIO line to select the current scanline.
switch(scanLine) {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -