我有一个整数信号(范围 0 到 9999)。我正在尝试在一组 7 段显示器上显示它。我已经实现了多路复用器(一次显示一个数字)。现在我需要将我的整数分成个位数。
理论上它很简单:只需使用 mod(例如 NUM / 100 mod 10 给出第二个数字)。问题是,当我使用 mod 编译解决方案(使用 4 次)时,我的代码仅用于 mod 的 9000 多个单元格。这太多了(但有效)。
然后我尝试转换为更小的整数,但它不起作用。整数范围 0 到 9 使用 4 位,所以它实际上是范围 0 到 15。
我确信明显的解决方案有更简单的方法,但我找不到它。请注意,我是初学者:)。
编辑:代码:
这部分设置正确的输出以显示给定的数字
process (clk)
begin
if rising_edge(clk) then
case number1 is
-- od prawej: a b c d e f g
when 0 => segment <="1000000"; -- '0'
when 1 => segment <="1111001"; -- '1'
when 2 => segment <="0100100"; -- '2'
when 3 => segment <="0110000"; -- '3'
when 4 => segment <="0011001"; -- '4'
when 5 => segment <="0010010"; -- '5'
when 6 => segment <="0000010"; -- '6'
when 7 => segment <="1111000"; -- '7'
when 8 => segment <="0000000"; -- '8'
when 9 => segment <="0010000"; -- '9'
when others=> segment <="1111111";
end case;
end if;
end process;
这部分选择显示(1 of 4)并设置数字值
process (clk)
variable count: integer range 0 to 1000;
begin
if rising_edge(clk) then
if count = 1000 - 1 then
count := 0;
case digit is
when "1000" => digit <="0001"; number1 <= year/1000 mod 10;
when "0001" => digit <="0010"; number1 <= year/100 mod 10;
when "0010" => digit <="0100"; number1 <= year/10 mod 10;
when "0100" => digit <="1000"; number1 <= year mod 10;
when others => digit <="0001";
end case;
else
count := count + 1;
end if;
end if;
end process;