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