//检测按键 void KeyDown(void) { unsigned int a=0; GPIO_KEY=0x0f; if(GPIO_KEY!=0x0f) { Delay50us(); a++; a=0; if(GPIO_KEY!=0x0f) { ET0=0;//关定时器中断 KeyState=1;//有按键按下 //测试列 GPIO_KEY=0X0F; // Delay50us(); switch(GPIO_KEY) { case(0X07): KeyValue=0;break; case(0X0b): KeyValue=1;break; case(0X0d): KeyValue=2;break; case(0X0e): KeyValue=3;break; // default: KeyValue=17; //检测出错回复17意思是把数码管全灭掉。 } //测试行 GPIO_KEY=0XF0; Delay50us(); switch(GPIO_KEY) { case(0X70): KeyValue=KeyValue;break; case(0Xb0): KeyValue=KeyValue+4;break; case(0Xd0): KeyValue=KeyValue+8;break; case(0Xe0): KeyValue=KeyValue+12;break; // default: KeyValue=17; } ET0=1;//开定时器中断 while((a<5000)&&(GPIO_KEY!=0xf0)) //检测按键松手检测 { Delay50us(); a++; } a=0; } } }
unsigned char TPGetByte(void) { unsigned char i, b1Bit; unsigned char value = 0; unsigned char p = 0; TOUCH_PAD_DATA_TRIS = 1; TPSetClk(1); TPWaitClock(0); TPWaitClock(1); for (i = 0; i < 8; i++) { TPWaitClock(0); b1Bit = TOUCH_PAD_DATA_PORT; value = value + (b1Bit << i); p = p + b1Bit; TPWaitClock(1); } TPWaitClock(0); p = p + TOUCH_PAD_DATA_PORT; if ((p & 0x01) == 0) { #ifdef TP_DEBUG_LEVEL_0 Debug("P"); #endif STP.TPModule.ErrorState.b1RcvPErr = 1; } TPWaitClock(1); TPWaitClock(0); if (TOUCH_PAD_DATA_PORT == 0) { #ifdef TP_DEBUG_LEVEL_0 Debug("S"); #endif STP.TPModule.ErrorState.b1RcvSErr = 1; } TPWaitClock(0); #ifdef TP_DEBUG_LEVEL_1 DebugStrHex1R("TP:>", value); #endif Delay50us(); // tak jest w dokumencie i chyba ma to znaczenie return value; }