【问题标题】:Door Lock Code - 4 digit 7-segment display with changing password system using decoder in VHDL门锁密码 - 4 位 7 段显示,使用 VHDL 中的解码器更改密码系统
【发布时间】:2022-12-04 19:26:03
【问题描述】:
我试图制作这个项目,允许我输入连接到 7 段显示器的 4 位密码,但我不知道该怎么做,尤其是程序如何记住第一个数字输入的数字,然后移动到第二个。我想我应该使用 4 个 D 触发器,但我不知道如何安排它。
例如,假设密码是 1234
从左到右有 4 个开关代表 MSB 和 LSB,然后在任何确认数字之后我会按下一个按钮来确认第一位数字然后转到第二位数字(也称为第二状态)。
因此,对于该密码,我必须输入:
S0 S1 S2 S3
状态1:0 0 0 1,按下一个按钮,然后
状态2:0 0 1 0,按下一个按钮,然后
状态 3:0 0 1 1,按下一个按钮,然后
状态 4:0 1 0 0,按下一个按钮,然后
状态五:门未锁,七段显示PASS
谢谢你。
注意:7 段是外部的,不是 FPGA 内置的
我已经编写了代码,但它仍然非常混乱且根本不直观。我还是fi
弄清楚解码器如何进入触发器然后记住它
【问题讨论】:
标签:
vhdl
xilinx
flip-flop
seven-segment-display
【解决方案1】:
要使用触发器实现密码系统,您可以使用四个 D 型触发器,一个用于密码的每一位。当按下开关时,相应的触发器将存储开关的值。然后,当按下“确认”按钮时,触发器的输出可以用来驱动7段显示器。
要从一个数字移动到下一个数字,您可以使用每次按下“确认”按钮时计数的计数器。计数器的输出可用于选择应在 7 段显示器上显示哪个触发器的输出。
当确认最后一位数字且计数器的值达到 4 时,您可以将触发器的输出与已知密码进行比较,以确定密码是否正确。如果密码正确,可使用 7 段显示器显示“PASS”信息,并激活“门解锁”输出。否则,可以通过重置计数器和触发器来重置密码。
下面是一个使用 VHDL 的示例实现:
-- D-type flip-flops for storing password digits
signal flipflop1, flipflop2, flipflop3, flipflop4 : std_logic;
-- Output of flip-flops
signal password : std_logic_vector(3 downto 0);
-- Counter for selecting which digit to confirm
signal counter : std_logic_vector(2 downto 0);
-- Control signals for flip-flops
signal flipflop_clock, flipflop_reset, flipflop_enable : std_logic;
-- Outputs for 7-segment display and "door unlocked" signal
signal seven_segment, door_unlocked : std_logic;
begin
-- D-type flip-flops for storing password digits
flipflop1 : DFF port map(
d => switch1,
clock => flipflop_clock,
reset => flipflop_reset,
enable => flipflop_enable,
q => flipflop1
);
flipflop2 : DFF port map(