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

📄 keyboard.c

📁 Texas Instruments的TUSB3210和TUSB2136芯片接键盘输入的固件程序源码和驱动程序源码。
💻 C
📖 第 1 页 / 共 3 页
字号:
    {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 + -