找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2244|回复: 15
打印 上一主题 下一主题
收起左侧

求分析两个触发开关的单片机程序

[复制链接]
跳转到指定楼层
楼主
各位师傅,您们好:两个触发开关程序写不好,请大家指点一下:

开关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;
           }
    }
}
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:405193 发表于 2019-7-12 14:43 | 只看该作者
可能我描述有点问题,就是一个电机正反转,触发K1,电机正转,电机到了K2的位置,触发一下K2,电机就停止了,这个时候触发K1还是正转,如果触发K2就是反转,到达对面触发开关就停止。
回复

使用道具 举报

板凳
ID:405193 发表于 2019-7-13 06:56 | 只看该作者
谢谢大家,我通过两天时间的研究,自己已经完成,谢谢。
回复

使用道具 举报

地板
ID:332444 发表于 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反转
回复

使用道具 举报

5#
ID:332444 发表于 2019-7-13 14:15 | 只看该作者


评分

参与人数 1黑币 +10 收起 理由
yong761228 + 10 赞一个!

查看全部评分

回复

使用道具 举报

6#
ID:405193 发表于 2019-7-13 19:54 | 只看该作者

非常感谢,我试试看。
回复

使用道具 举报

7#
ID:405193 发表于 2019-7-13 20:35 | 只看该作者

师傅您好,我测试您的程序,可以启动,但是到达对面触发开关后,不能停止,就是触发K1,电机是正转,触发K2不停止,断电开电,触发K2后一直反转,但是触发K1后不停止。您再看看,您的程序专业性比较强,我要慢慢消化,非常感谢。
回复

使用道具 举报

8#
ID:388197 发表于 2019-7-14 01:22 | 只看该作者
可以考虑这个电路,把两开关各经过1个电容,二极管接到同一个外中断上,当任意一个开关闭合,外中断上必然产生下降沿,进入中断,然后在中断函数里看一下到底是哪个IO口被拉低就行了

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

QQ截图20190714011555.png

评分

参与人数 1黑币 +10 收起 理由
yong761228 + 10 赞一个!

查看全部评分

回复

使用道具 举报

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

非常感谢,但是您的方法我更加难写出来,我现在的方法是根据流程图,一步一步写的,程序虽然比较长,可以用的。
回复

使用道具 举报

10#
ID:332444 发表于 2019-7-14 08:12 | 只看该作者
这个论坛迟滞,不像其他论坛即时可看到回帖,待我看到我的回帖内容,同时也看到楼主内容,不是说已经自己解决了?后面做栗子只是为了验证我的思路,同时仿真也是通过的,可惜这个论坛无法上传MP4文件,否则可以看仿真效果了,明天弄个录像上传,要说明的是用仿真验证我的逻辑按钮就不写消抖了,因为仿真不用消抖,到实际机器上就要按标准的进行按钮消抖,同时要释放按钮,不知道你的是否一直按住按钮?如果一直按住按钮的话,就要去掉检测按钮释放的代码。
回复

使用道具 举报

11#
ID:583390 发表于 2019-7-14 09:15 | 只看该作者
一些有用的代码

51黑论坛_c源文件.rar

2.33 KB, 下载次数: 5

回复

使用道具 举报

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

您好,这个开关是触发一下,需要按钮消抖的,我写好程序了,我只是看看您们的方法,非常感谢。
回复

使用道具 举报

13#
ID:405193 发表于 2019-7-14 15:30 | 只看该作者

非常感谢。
回复

使用道具 举报

14#
ID:584136 发表于 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反转
回复

使用道具 举报

15#
ID:332444 发表于 2019-7-15 09:21 | 只看该作者
我只保证我的逻辑思路代码通过验证是正确执行的并符合提问,做了仿真同时用2个LED指示作为验证电的通断,而不保证仿真中的电机定子转动惯性及你实际电机定子转动的原因是虾米.

回复

使用道具 举报

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

非常感谢。
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表