标题: 求分析两个触发开关的单片机程序 [打印本页]

作者: yong761228    时间: 2019-7-12 13:26
标题: 求分析两个触发开关的单片机程序
各位师傅,您们好:两个触发开关程序写不好,请大家指点一下:

开关K1和K2
1.      如果先触发一下K1,K1=0
    D1=1; D0=0;
    这个过程中触发一下K2,K2=0
D1=0; D2=0;
2.      如果先触发K2,K2=0
D1=0; D0=1;
这个过程中触发一下K1,K1=0
D1=0; D2=0;
两个开关没有顺序,先触发谁,就执行下面的结果,例如如果1执行完后再次触发K1,就继续1的功能,如果是再次触发K2,就执行K2的功能,同理2执行也是一样的。师傅帮我看看下面的程序错在什么地方,谢谢。
If((K1==0)&&(flag1==0))
{
  delay(10); flag2=1;
   If(K1==0)
   {
     D1=1; D0=0;
     if(K2==0)
      {
       delay(10);
        D1=0; D0=0;flag2=0;K1=1;K2=1;
           }
    }
}
If((K2==0)&&(flag2==0))
{
  delay(10); flag1=1;
   If(K2==0)
   {
     D1=0; D0=1;
     if(K1==0)
      {
       delay(10);
        D1=0;D0=0;flag1=0;K1=1;K2=1;
           }
    }
}

作者: yong761228    时间: 2019-7-12 14:43
可能我描述有点问题,就是一个电机正反转,触发K1,电机正转,电机到了K2的位置,触发一下K2,电机就停止了,这个时候触发K1还是正转,如果触发K2就是反转,到达对面触发开关就停止。
作者: yong761228    时间: 2019-7-13 06:56
谢谢大家,我通过两天时间的研究,自己已经完成,谢谢。
作者: xianfajushi    时间: 2019-7-13 07:21
写个大概的逻辑,要外出办事,得空做个栗子
if(!kg&&!k1&&k2)kg=fx=true;
if(!kg&&k1&&!k2)kg=!fx=false;
if(kg)if((!k1||!k2))kg=false;
if(kg)if(fx)正转esle反转
作者: xianfajushi    时间: 2019-7-13 14:15



作者: yong761228    时间: 2019-7-13 19:54
xianfajushi 发表于 2019-7-13 14:15

非常感谢,我试试看。
作者: yong761228    时间: 2019-7-13 20:35
xianfajushi 发表于 2019-7-13 14:15

师傅您好,我测试您的程序,可以启动,但是到达对面触发开关后,不能停止,就是触发K1,电机是正转,触发K2不停止,断电开电,触发K2后一直反转,但是触发K1后不停止。您再看看,您的程序专业性比较强,我要慢慢消化,非常感谢。
作者: cjm82    时间: 2019-7-14 01:22
可以考虑这个电路,把两开关各经过1个电容,二极管接到同一个外中断上,当任意一个开关闭合,外中断上必然产生下降沿,进入中断,然后在中断函数里看一下到底是哪个IO口被拉低就行了

QQ截图20190714011555.png (23.24 KB, 下载次数: 60)

QQ截图20190714011555.png

作者: yong761228    时间: 2019-7-14 06:18
cjm82 发表于 2019-7-14 01:22
可以考虑这个电路,把两开关各经过1个电容,二极管接到同一个外中断上,当任意一个开关闭合,外中断上必然产生 ...

非常感谢,但是您的方法我更加难写出来,我现在的方法是根据流程图,一步一步写的,程序虽然比较长,可以用的。
作者: xianfajushi    时间: 2019-7-14 08:12
这个论坛迟滞,不像其他论坛即时可看到回帖,待我看到我的回帖内容,同时也看到楼主内容,不是说已经自己解决了?后面做栗子只是为了验证我的思路,同时仿真也是通过的,可惜这个论坛无法上传MP4文件,否则可以看仿真效果了,明天弄个录像上传,要说明的是用仿真验证我的逻辑按钮就不写消抖了,因为仿真不用消抖,到实际机器上就要按标准的进行按钮消抖,同时要释放按钮,不知道你的是否一直按住按钮?如果一直按住按钮的话,就要去掉检测按钮释放的代码。
作者: admin520    时间: 2019-7-14 09:15
一些有用的代码

51黑论坛_c源文件.rar

2.33 KB, 下载次数: 5


作者: yong761228    时间: 2019-7-14 15:26
xianfajushi 发表于 2019-7-14 08:12
这个论坛迟滞,不像其他论坛即时可看到回帖,待我看到我的回帖内容,同时也看到楼主内容,不是说已经自己解 ...

您好,这个开关是触发一下,需要按钮消抖的,我写好程序了,我只是看看您们的方法,非常感谢。
作者: yong761228    时间: 2019-7-14 15:30
admin520 发表于 2019-7-14 09:15
一些有用的代码

非常感谢。
作者: 2667358111    时间: 2019-7-14 23:31
if(!kg&&!k1&&k2)kg=fx=true;
if(!kg&&k1&&!k2)kg=!fx=false;
if(kg)if((!k1||!k2))kg=false;
if(kg)if(fx)正转esle反转
作者: xianfajushi    时间: 2019-7-15 09:21
我只保证我的逻辑思路代码通过验证是正确执行的并符合提问,做了仿真同时用2个LED指示作为验证电的通断,而不保证仿真中的电机定子转动惯性及你实际电机定子转动的原因是虾米.


作者: yong761228    时间: 2019-7-15 12:44
xianfajushi 发表于 2019-7-15 09:21
我只保证我的逻辑思路代码通过验证是正确执行的并符合提问,做了仿真同时用2个LED指示作为验证电的通断,而不 ...

非常感谢。




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