基于译码器和锁存器的运行逻辑的简易算法
74HC138
def decoder_74hc138(E1, E2, E3, A0, A1, A2):output = [1] * 8 # 默认全高电平# 检查使能条件:E1和E2低电平,E3高电平if E1 == 0 and E2 == 0 and E3 == 1:# 计算地址索引(A2为高位,A0为低位)index = (A2 << 2) | (A1 << 1) | A0if 0 <= index < 8:output[index] = 0 # 对应引脚置低电平return output # 返回Y0-Y7状态列表(0低/1高)
算法逻辑:
- 使能检查:若
E1=0
、E2=0
、E3=1
,译码器激活;否则输出全高。 - 地址解析:将输入
A0
(LSB)、A1
、A2
(MSB)组合为3位二进制数,转换为十进制索引(0-7)。 - 输出设置:对应索引位输出低电平(0),其余为高(1)。
示例:decoder_74hc138(0,0,1, 1,0,1)
返回[1,1,1,0,1,1,1,1]
(Y3为低)。
74hc573
def latch_74hc573(OE, LE, D, prev_Q):if OE == 0: # 输出使能有效if LE == 1: # 锁存使能:输出随输入变化return D.copy()else: # 锁存保持return prev_Q.copy()else: # 输出高阻态(用None表示)return [None] * len(D)
算法逻辑:
- 使能判断:
- 若
OE=0
(输出有效):LE=1
时,输出直接传递输入D
;LE=0
时,输出保持上一次的prev_Q
。
- 若
OE=1
,输出为高阻态(用None
表示)。
- 若
- 数据锁存:通过
prev_Q
参数传递前次状态实现锁存功能。
D = [1,0,1,1,0,0,1,1]
prev_Q = [1]*8
# LE有效,更新输出
new_Q = latch_74hc573(0, 1, D, prev_Q) # 输出 [1,0,1,1,0,0,1,1]
# LE无效,保持前次输出
next_Q = latch_74hc573(0, 0, [0]*8, new_Q) # 输出仍为 [1,0,1,1,0,0,1,1]