思路:
六位二进制数->2位BCD->七段译码器转为数码管显示
附一个 8位BCD码转换程序供你参考(y0~y7是8位BCD码输出(每个4位),din是二进制输入),位数宽度自己改吧,七段译码器也附上了,这个不用改了,连线上就能用了.
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
use ieee.std_logic_arith.all;
entity B_BCD is
port(clk:in std_logic;
din:in std_logic_vector(26 downto 0);
y0,y1,y2,y3,y4,y5,y6,y7:out std_logic_vector(3 downto 0));
end B_BCD;
architecture behav of B_BCD is
type state is (s0,s1,s2);
signal present_state:state;
signal mid_in:std_logic_vector(26 downto 0);
signal d0,d1,d2,d3,d4,d5,d6,d7:std_logic_vector(3 downto 0);
begin
process(clk)is
begin
if clk'event and clk='1' then
mid_in<=din;
present_state<=s0;
case (present_state) is
when s0=>
d0<="0000";d1<="0000";d2<="0000";d3<="0000";d4<="0000";d5<="0000";d6<="0000";d7<="0000";
present_state<=s1;
when s1=>
if mid_in>="100110001001011010000000" then mid_in<=mid_in-"100110001001011010000000";
d7<=d7+1;
present_state<=s1;
elsif mid_in>="000011110100001001000000" then mid_in<=mid_in-"000011110100001001000000";
d6<=d6+1;
present_state<=s1;
elsif mid_in>="000000011000011010100000" then mid_in<=mid_in-"000000011000011010100000";
d5<=d5+1;
present_state<=s1;
elsif mid_in>="000000000010011100010000" then mid_in<=mid_in-"000000000010011100010000";
d4<=d4+1;
present_state<=s1;
elsif mid_in>="000000000000001111101000" then mid_in<=mid_in-"000000000000001111101000";
d3<=d3+1;
present_state<=s1;
elsif mid_in>="000000000000000001100100" then mid_in<=mid_in-"000000000000000001100100";
d2<=d2+1;
present_state<=s1;
elsif mid_in>="000000000000000000001010" then mid_in<=mid_in-"000000000000000000001010";
d1<=d1+1;
present_state<=s1;
elsif mid_in>="000000000000000000000001" then
mid_in<=mid_in-"000000000000000000000001";
d0<=d0+1;
present_state<=s1;
else
present_state<=s2;
end if;
when s2=>
y0<=d0;y1<=d1;y2<=d2;y3<=d3;y4<=d4;y5<=d5;y6<=d6;y7<=d7;
present_state<=s0;
when others=>
present_state<=s0;
end case;
end if;
end process;
end behav;
--七段译码器
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY decoder_7_part IS
PORT(i3,i2,i1,i0:IN STD_LOGIC;
a,b,c,d,e,f,g:OUT STD_LOGIC);
END decoder_7_part;
ARCHITECTURE rtl OF decoder_7_part IS
SIGNAL indata:STD_LOGIC_VECTOR(3 DOWNTO 0);
signal outdata:STD_LOGIC_VECTOR(6 DOWNTO 0);
BEGIN
process(indata)
begin
indata<=i3&i2&i1&i0;
CASE indata IS
WHEN "0000"=>outdata<="1111110";
WHEN "0001"=>outdata<="0110000";
WHEN "0010"=>outdata<="1101101";
WHEN "0011"=>outdata<="1111001";
WHEN "0100"=>outdata<="0110011";
WHEN "0101"=>outdata<="1011011";
WHEN "0110"=>outdata<="0011111";
WHEN "0111"=>outdata<="1110000";
WHEN "1000"=>outdata<="1111111";
WHEN "1001"=>outdata<="1111011";
when others=>outdata<="0000000";
END CASE;
a<=outdata(0);
b<=outdata(1);
c<=outdata(2);
d<=outdata(3);
e<=outdata(4);
f<=outdata(5);
g<=outdata(6);
END process;
end;
温馨提示:答案为网友推荐,仅供参考