標(biāo)題:
單片機(jī)按鍵程序單擊雙擊長(zhǎng)按有不同功能(c語(yǔ)言源程序)
[打印本頁(yè)]
作者:
無(wú)奧運(yùn)
時(shí)間:
2017-8-14 14:34
標(biāo)題:
單片機(jī)按鍵程序單擊雙擊長(zhǎng)按有不同功能(c語(yǔ)言源程序)
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) //雙擊
{
/*雙擊按鍵實(shí)現(xiàn)呼吸燈功能*/
state_1 = 0;
b_key_led = 1;
b_key_smg = 0;
seg = 0x00;
seg_l = 0x00;
}
if(state_1 == D_key) //單按
{
/*單擊實(shí)現(xiàn)數(shù)碼管走時(shí)*/
state_1 = 0;
b_key_smg = 1;
b_key_led = 0;
PW1D = 0x0000;
}
if(state_1 == L_key) //長(zhǎng)按
{
/*長(zhǎng)按,實(shí)現(xiàn)你要實(shí)現(xiàn)的功能*/
}
}
作者:
渴望壯大
時(shí)間:
2017-8-15 10:24
這不是我寫的嗎?尷尬
作者:
whengfu
時(shí)間:
2017-8-15 18:58
渴望壯大 發(fā)表于 2017-8-15 10:24
這不是我寫的嗎?尷尬
能加點(diǎn)注釋不,大白看不懂程序
作者:
zhongyude
時(shí)間:
2017-8-16 08:59
能加點(diǎn)注釋不,謝謝!
作者:
怪怪愛玩
時(shí)間:
2017-8-16 10:58
我也同意加點(diǎn)注釋就理能看明白 了
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1