uchar S_key = 2,D_key = 1,L_key = 3,N_key = 0;
bit b_key_led;
bit b_key_smg;
uchar key_drive(void)
{
static uchar key_state;
static uint key_time = 0;
uchar key_return;
key_return = N_key;
switch(key_state)
{
case 0:
{
if(!S1)
{
key_state = 1;
}
};break;
case 1:
{
if(!S1)
{
key_time = 0;
key_state = 2;
}
else
{
key_state = 0;
}
};break;
case 2:
{
if(S1)
{
key_return = D_key;
key_state = 0;
}
else if(++key_time >= 1500)
{
key_return = L_key;
key_state = 3;
}
};break;
case 3:
{
if(S1)
{
key_state = 0;
}
};break;
}
return key_return;
}
uchar key_read(void)
{
static uchar key_state_1,key_time_1 = 0;
uchar key_return,key_temp;
key_temp = key_drive();
switch(key_state_1)
{
case 0:
{
if(key_temp == D_key)
{
key_time_1 = 0;
key_state_1 = 1;
}
else
{
key_return = key_temp;
}
};break;
case 1:
{
if(key_temp == D_key)
{
key_return = S_key;
key_state_1 = 0;
}
else if(++key_time_1 >= 250)
{
key_return = D_key;
key_state_1 = 0;
}
};break;
}
return key_return;
}
void key_on(void)
{
uchar state_1;
state_1 = key_read();
if(state_1 == S_key) //雙擊
{
/*雙擊按鍵實現呼吸燈功能*/
state_1 = 0;
b_key_led = 1;
b_key_smg = 0;
seg = 0x00;
seg_l = 0x00;
}
if(state_1 == D_key) //單按
{
/*單擊實現數碼管走時*/
state_1 = 0;
b_key_smg = 1;
b_key_led = 0;
PW1D = 0x0000;
}
if(state_1 == L_key) //長按
{
/*長按,實現你要實現的功能*/
}
}
|