Exemple #1
0
//检测按键
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;
		}
	}
}
Exemple #2
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;
}