本帖最后由 aiyeba 于 2017-7-13 10:19 编辑
有时候,当单片机的IO 口不够用的时候,想按键这种倒是可以节省一些。 于是一体按键孕育而生。
一体按键,集单按,双击、长按为一体。一个按键三个功能,确实很有实际的使用价值。
我最近用原子哥按键尝试,发现一个很恶心的问题,v3的按键感觉弹起来很慢的感觉。
下面是我写的算法,大家可以改进一下,里面的串口打印只是调试用的。
u8 key0_1ms_EN=0; //使能开始计数
u8 key0_1ms_cnt=0; //定时器每1ms加1
void Key_Scan(void)
{
static u8 key_status=0;
static u8 key_cnt=0; //确定单击 还是双击
static u8 key_flag=0;
switch(key_status)
{
case 0:
{
if(KEY0==0)
{
key0_1ms_EN=1;
key0_1ms_cnt=0;
key_ststus=1;
break;
}
if(key_flag==1&&key_cnt==1)
{
if(key0_1ms_cnt>800)
{
key_cnt=0;
key_flag=0;
LED0=0;
LED1=1;
}
}
}
case 1:
{
if(KEY0==1)
{
key_status=0;
break;
}
if(key0_1ms_cnt>=30&&KEY0==0)
{
key_cnt++;
if(key_cnt>=2)
{
key_flag=0;
key_cnt=0;
key_status=3;
LED0=1;
LED1=1;
break;
}
key_status=2;
}
break;
}
case 2:
{
if(KEY0==1)
{
key_flag=1;
key_status=0;
break;
}
if(key0_1ms_cnt>=2000&&KEY0==0)
{
LED0=0;
LED1=0;
key_status=3;
}
break;
}
case 3:
{
if(KEY0==1)
{
key_flag=0;
key_cnt=0;
key_status=0;
}
break;
}
}
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>