给arm初学者一个比较实用的多功能按键,实现单击,双击,长按。声明一下:这是我修改的例程。如果写到TIM3时间中断里不太消耗CPU资源。
key.h
#define key_5 GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_5)
key.c
//在函数之外定义全局变量,这个几个标志位可以被外部程序引用。
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函数设置为上拉输入即可)
{
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;}
}