单片机三种按键模式 单击 双击 长按

最近在做平衡车 ,关于平衡车的内容还未整理好,先来个不错的小技术贴!

认为好的可以关注我哦      知识在于交流




/**************************************************************************
函数功能:按键扫描
入口参数:双击等待时间
返回 值:按键状态 0:无动作 1:单击 2:双击
key=0是按下的意思
**************************************************************************/
u8 click_N_Double (u8 time)
{
static u8 flag_key,count_key,double_key;
static u16 count_single,Forever_count;
if(KEY2==0) Forever_count++; //长按标志位未置1
else Forever_count=0;
if(0==KEY2&&0==flag_key) flag_key=1;
if(0==count_key)
{
if(flag_key==1) //单击一次进去一次
{
double_key++;
count_key=1;
}
if(double_key==2) //判断双击
{
double_key=0;
count_single=0;
return 2;//双击执行的指令
}
}
if(1==KEY2) flag_key=0,count_key=0;
if(1==double_key)
{
count_single++;
if(count_single>time&&Forever_count<time)
{
//中间间隔时间太长 判断为的单击
double_key=0;
count_single=0;
return 1;//单击执行的指令
}
if(Forever_count>time)
{
//长按不放
double_key=0;
count_single=0;
}
}
return 0;
}


/**************************************************************************
函数功能:按键扫描(这里的操作主要是为了单击)
入口参数:无
返回 值:按键状态 0:无动作 1:单击
**************************************************************************/
u8 click(void)
{
static u8 flag_key=1;//按键按松开标志
if(flag_key&&KEY==0)
{
flag_key=0;
return 1; // 按键按下
}
else if(1==KEY) flag_key=1;
return 0;//无按键按下
}



/**************************************************************************
函数功能:长按检测
入口参数:无
返回 值:按键状态 0:无动作 1:长按2s
**************************************************************************/
u8 Long_Press(void)
{
static u16 Long_Press_count,Long_Press;
if(Long_Press==0&&KEY==0) Long_Press_count++; //长按标志位未置1
else Long_Press_count=0;
if(Long_Press_count>200)
{
Long_Press=1; //这里是为了控制长按时间
Long_Press_count=0;
return 1;
}
if(Long_Press==1) //长按标志位置1
{
Long_Press=0;
}
return 0;
}


  • 10
    点赞
  • 92
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值