标题: 单片机按键程序,弄了几天了,实在搞不出来才问的 [打印本页]

作者: jianuli    时间: 2020-9-30 22:47
标题: 单片机按键程序,弄了几天了,实在搞不出来才问的
各位大神,帮忙写个简单的按键程序,我弄了几天了,实在搞不出来才问的,新手,哈哈。谢谢啦。
要求是这样的:S1表示检测开关,S2表示按键开关。当S1检测到0时,S2可以按3次,按了3次之后如果S1还检测到0,那S2还是可以再按3下。如果S1不为0了,那么S2就不能按了,只有S1再次为0,S2才能再按3下...
大家帮帮忙,谢谢啦~
作者: jianuli    时间: 2020-9-30 22:51
版主,网络问题,把前面一样的帖子删啦,谢谢
作者: jianuli    时间: 2020-9-30 23:00
版主,网络问题,重发帖了几遍,把前边的帖子删啦,谢谢
作者: xianfajushi    时间: 2020-10-1 05:24
while(!s1)if(!s2)...试看
作者: jianuli    时间: 2020-10-1 12:36
xianfajushi 发表于 2020-10-1 05:24
while(!s1)if(!s2)...试看

您好,不能用while
作者: SaPmon    时间: 2020-10-1 13:14
令s2按得计数为i.while(s1==0),if(i<6),i++(响应)else(不响应)
作者: jianuli    时间: 2020-10-1 14:29
大家帮帮忙咯
作者: jianuli    时间: 2020-10-1 15:03
SaPmon 发表于 2020-10-1 13:14
令s2按得计数为i.while(s1==0),if(i

可以帮写出来一下吗,谢谢啦
作者: jianuli    时间: 2020-10-1 16:40
大家路过帮帮啦
作者: liuzx66    时间: 2020-10-1 16:57
  int S2_AN = 0;//按下S2次数
  while (1)
  {
    if (S1 == 0)
    {
      S2_AN = 0;
      while (S2_AN < 3) //按下3次退出
      {
        if (S2 == 0)  S2_AN++;
      }
    }
  }

作者: jianuli    时间: 2020-10-1 23:39
liuzx66 发表于 2020-10-1 16:57
int S2_AN = 0;//按下S2次数
  while (1)
  {

您好,试了下,不行哟,可以不用while吗?程序会卡住
作者: wulin    时间: 2020-10-2 07:10
本帖最后由 wulin 于 2020-10-2 07:37 编辑

        基本逻辑关系

        unsigned char num=0;
        bit sign=0;

        if(S1==0)
        {
                sign=1;
        }
        if(S2==0 && sign==1 && num<3)
        {
                num++;
                if(num==1)
                        //任务1
                if(num==2)
                        //任务2
                if(num>=3)
                {
                        //任务3
                        sign=0;       
                        num=0;
                }
                while(!S2);//S2松手
        }

作者: 王秋冬    时间: 2020-10-2 08:13
把S2_AN改为S2-AN试试,有师傅说可以。
作者: man1234567    时间: 2020-10-2 09:53
按表述的逻辑分析,S1=0时S2可按3下,再次测S1=0时S2还可以按3下,只有S1非0时S2不可按......
所以就是S1非0时S2不事按,其他都是脑筋急转弯
你甚至可以写成S1=0时S2可按5下,再次测S1=0时S2还可以按1下,再次测S1=0时S2还可以按9下,........
作者: liuzx66    时间: 2020-10-2 11:53
jianuli 发表于 2020-10-1 23:39
您好,试了下,不行哟,可以不用while吗?程序会卡住

你的按键处理程序没有处理好,这个只是给你参考,是不能直接拿来用的。要根据你的实际情况改一下




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1