You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

采用逻辑门实现双开关双灯特定控制需求求助

双开关双灯优先级控制的逻辑门实现方案

你需要的是基于开关触发顺序的优先级控制逻辑——当两个开关同时ON时,最后被打开的开关对应灯亮;当该开关关闭后,回到仅剩的那个ON开关对应的灯。纯组合逻辑(AND/NOR等)无法实现,因为需要记忆触发历史,必须结合时序元件(触发器)+边沿检测来完成。

1. 核心规则拆解

先明确所有场景对应的逻辑规则:

  • 单开关ON:对应灯亮,另一灯灭
  • 双开关ON:最后触发(从OFF→ON)的开关对应灯亮,另一灯灭
  • 双开关ON后关闭最后触发的开关:回到单开关ON的状态,对应灯亮

2. 关键组件:边沿检测电路

需要捕捉开关的上升沿(OFF→ON),只有当开关被主动打开时才触发状态切换,而非持续的ON状态。
以开关sw1为例,用一个D触发器做延迟,结合逻辑门实现边沿检测:

  • 用D触发器FF_delay1,输入D=sw1,输出为延迟后的sw1_delay
  • 上升沿脉冲:sw1_up = sw1 AND NOT sw1_delay(仅在sw1从OFF→ON时输出1个周期的高电平)
    同理,为sw2制作sw2_up上升沿脉冲。

3. 状态寄存器:记录最后触发的开关

用一个D触发器FF_last(或SR触发器)保存最后触发的开关状态:

  • 当sw1_up=1(sw1被打开),触发器置1(Q_last=1,表示最后触发的是sw1)
  • 当sw2_up=1(sw2被打开),触发器置0(Q_last=0,表示最后触发的是sw2)
  • 无触发时,触发器保持当前状态

用逻辑门实现触发器的输入逻辑:
D_last = sw1_up OR (Q_last AND NOT sw2_up)
(解释:sw1触发则置1;sw2触发则置0;否则保持原状态)

如果用SR触发器更简单:

  • SR触发器的S端接sw1_up,R端接sw2_up,直接实现置1/置0/保持的逻辑。

4. 灯的输出逻辑

根据开关状态和Q_last生成灯的控制信号:

  • L1 = sw1 AND (NOT sw2 OR Q_last)
    解释:要么只有sw1ON,要么双开关ON且最后触发的是sw1,L1亮
  • L2 = sw2 AND (NOT sw1 OR NOT Q_last)
    解释:要么只有sw2ON,要么双开关ON且最后触发的是sw2,L2亮

5. 场景验证

对应你给出的4种场景:

  1. sw1=ON,sw2=OFF → L1=1,L2=0 ✔️
  2. sw1=OFF,sw2=ON → L1=0,L2=1 ✔️
  3. sw1=ON,sw2从OFF→ON → sw2_up=1,Q_last=0,双开关ON → L1=0,L2=1;sw2切回OFF → 单开关sw1ON → L1=1,L2=0 ✔️
  4. sw2=ON,sw1从OFF→ON → sw1_up=1,Q_last=1,双开关ON → L1=1,L2=0;sw1切回OFF → 单开关sw2ON → L1=0,L2=1 ✔️

内容的提问来源于stack exchange,提问作者Thanasis Valto Kourpetis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 15:40:40