|
給arm初學(xué)者一個(gè)比較實(shí)用的多功能按鍵,實(shí)現(xiàn)單擊,雙擊,長(zhǎng)按。聲明一下:這是我修改的例程。如果寫(xiě)到TIM3時(shí)間中斷里不太消耗CPU資源。
key.h
#define key_5 GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_5)
key.c
//在函數(shù)之外定義全局變量,這個(gè)幾個(gè)標(biāo)志位可以被外部程序引用。
u8 key_short;
u8 key_long;
u8 key_double;
void key_set(void)
{
static u16 time=0; //申請(qǐng)一個(gè)按鍵計(jì)時(shí)器
u8 i=0;
if(key_5==0) //短按,雙擊,長(zhǎng)按(GPIO函數(shù)設(shè)置為上拉輸入即可)
{
while(key_5==0&&time<100) //開(kāi)始計(jì)時(shí)
{
time++;delay_ms(10);
}
if(time>=100) //1s
{
key_long=1; //長(zhǎng)按
while(!key_5); //阻塞
}
else //單擊判斷
{
for(i=0;i<10;i++) //計(jì)時(shí)200ms
{
delay_ms(20);
if(key_5==0)
{
key_double=1; //雙擊
while(!key_5); //阻塞
}
}
if(key_double==0)
key_short=1; //單擊
}
}
else{key_short=0;key_long=0;key_double=0;time=0;}
}
|
|