2516|11

13

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

请大侠帮忙写个程序,2个按钮状态监测的,真的很难吗?就是没搞定! [复制链接]

 
某汽车玻璃升降器:
一个单刀双掷开关,KEY1,KEY2;
两个输出点OUT1,OUT2

不按:KEY1=1; KEY2=1;
轻按:KEY1=0; KEY2=1;
重按:KEY1=1; KEY2=0;

轻按到重按,或重按到轻按的切换过程中:KEY1=1; KEY2=1; 至少有几百毫秒时间。


程序OUT1、OUT2输出要求:

KEY1=0时,OUT1=1;
KEY2=0时,OUT1=1;OUT2=1;
由轻按到重按过程中,保持:OUT1=1;不能中断
重按到轻按的过程中,保持:OUT1=1;不能中断
不按下:OUT1=0;OUT2=0;

搞不清怎么写逻辑了~

请高手大侠们赐教!

此帖出自stm32/stm8论坛

最新回复

楼主应该将这个问题分割成两块,一块是获取按键状态,另一块是根据按键状态进行处理,这样逻辑可能会更清晰些。如果楼主的重按和轻按就是长按和短按的意思,那就可以先赋值key1=0,当检测到键按下时key1=1,延时一段时间再检测,若键仍然在按下的状态则key1=2,最后在主循环中根据key1的值进行相应的处理。我就是这样做的,可以让一个按键起到两个按键的作用。  详情 回复 发表于 2019-2-17 09:21
点赞 关注(1)
 

回复
举报

5310

帖子

453

TA的资源

五彩晶圆(高级)

沙发
 
是不是不够完全

如果轻按了一定会来重按吗?
小轻按不行吗

此帖出自stm32/stm8论坛
 
 

回复

714

帖子

2

TA的资源

一粒金砂(高级)

板凳
 
判定按键的持续状态时间来确定按键操作应该就可以了把?                                   
此帖出自stm32/stm8论坛
 
个人签名Hello astroturfers
 

回复

13

帖子

0

TA的资源

一粒金砂(初级)

4
 
蓝雨夜 发表于 2019-2-14 14:37
是不是不够完全

如果轻按了一定会来重按吗?
小轻按不行吗

一共三分档位,不按,轻按,重按,请帮忙!
此帖出自stm32/stm8论坛

点评

三分档位,不按,轻按,重按 假如只轻按,然后不再按了呢?  详情 回复 发表于 2019-2-14 20:27
 
 
 

回复

13

帖子

0

TA的资源

一粒金砂(初级)

5
 
y909334873 发表于 2019-2-14 14:41
判定按键的持续状态时间来确定按键操作应该就可以了把?

新手不太会哦!
此帖出自stm32/stm8论坛
 
 
 

回复

5310

帖子

453

TA的资源

五彩晶圆(高级)

6
 
yfpc2006 发表于 2019-2-14 20:05
一共三分档位,不按,轻按,重按,请帮忙!

三分档位,不按,轻按,重按

假如只轻按,然后不再按了呢?
此帖出自stm32/stm8论坛
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

7
 
我也是新手,不过你看看这样对不对,可以按这个逻辑看看检查下:
if(KEY1 = 1 && key2 = 1)    //初始状态无动作
{
    delay  1 s;
  if(KEY1 =1 && KEY2 =1)    //延时一秒按键无动作不按下
    {
       OUT1= 0;
       OUT2 = 0;
    }
  else
    break;
}
else if(KEY1 = 0  || KEY2 = 0)  //有按键按下
{
   if(KEY1 =0 && KEY2 = 1)   //若是轻按
   {
     { OUT1= 1;OUT2 = 0;}
     delay 1s;      //延时一秒
     if(KEY1 =1 && KEY2= 0)  //判断状态是否切换
     OUT2 =1;
     else
       break;
   }
   else if(KEY1 =1 && KEY2 = 0)   //若是重按
   {
     OUT1 =1;
     OUT2 =1;
     delay 1s;
     if(KEY1 =0 && KEY2 = 1) //判断状态切换
     {
        OUT1 = 1;
        OUT2 = 0;
     }
      else
   break;
    }
    else   //如果KEY1 =0 KEY2 =0,则无效
    break;

}

不知道对不对,你可以看看。大概就是这个意思得逻辑吧。

此帖出自stm32/stm8论坛
 
 
 

回复

1371

帖子

6

TA的资源

版主

8
 
把状态理清,写个简单的状态机
此帖出自stm32/stm8论坛
 
个人签名专注智能产品的研究与开发,专注于电子电路的生产与制造……QQ:2912615383,电子爱好者群: void
 
 

回复

29

帖子

0

TA的资源

一粒金砂(中级)

9
 
您说的轻按重按是短按和长按的意思吗?或者说你把你说的单刀双掷开关图片发上来参考一下
此帖出自stm32/stm8论坛
 
 
 

回复

216

帖子

0

TA的资源

一粒金砂(中级)

10
 
描述不够清楚,把开关资料或是开关型号帖出
此帖出自stm32/stm8论坛
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

11
 
操作                 键值                   状态                        输出状态
不按:       KEY1=1; KEY2=1;      0                       OUT1=0;OUT2=0;
轻按:       KEY1=0; KEY2=1;      1                       OUT1=1;OUT2=0;
轻重切换: KEY1=1; KEY2=1;     2                        OUT1=1;OUT2=0;
重按:       KEY1=1; KEY2=0;      3                       OUT1=1;OUT2=1;

按照楼主描述,状态是不是如此划分,如果这样理解是对的,可以先判断0-3的状态,然后根据状态操作输出即可;其中轻按到松开判断需要做“几百毫秒”的延时判断;
此帖出自stm32/stm8论坛
 
 
 

回复

932

帖子

3

TA的资源

纯净的硅(中级)

12
 
楼主应该将这个问题分割成两块,一块是获取按键状态,另一块是根据按键状态进行处理,这样逻辑可能会更清晰些。如果楼主的重按和轻按就是长按和短按的意思,那就可以先赋值key1=0,当检测到键按下时key1=1,延时一段时间再检测,若键仍然在按下的状态则key1=2,最后在主循环中根据key1的值进行相应的处理。我就是这样做的,可以让一个按键起到两个按键的作用。
此帖出自stm32/stm8论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表