秒表(8 段数码管动态扫描显示控制 )

实验题目 :8 段数码管动态扫描显示控制
要求:实现具有启动,停止,清零功能的秒表,启动,停止,清零由一个按钮开关控制。



library ieee;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.all;

entity miaobiao is
port (key,clk,clk_1:in std_logic;
dp:out std_logic;
wei:out std_logic_vector(5 downto 0);
duan:out std_logic_vector(6 downto 0));
end;

architecture jishi of miaobiao is
signal b:integer range 0 to 3;
signal clk_100h:std_logic;
signal cnt6:integer range 0 to 5;
signal data:std_logic_vector(3 downto 0);
signal data1:std_logic_vector(3 downto 0);
signal scan:std_logic_vector(5 downto 0);
signal s:std_logic_vector(6 downto 0);
signal led1,led2,led3,led4,led5,led6:std_logic_vector(3 downto 0);
begin

process(key)
begin
if(key 'event and key='0') then
if(b<3) then b<=b+1;
else b<=1;
end if;
end if;
end process;


process (clk)
variable cou1 : integer :=0 ;
begin
if (clk='1' and clk'event) then

if( cou1=100000) then
cou1:= 0;
clk_100h <= not clk_100h;
else
cou1 := cou1+1;
end if;

end if;
end process;

process(clk_1)
begin
if clk_1'event and clk_1='1' then
if cnt6=5 then
cnt6<=0;
else cnt6<=cnt6+1;
end if;
end if;
end process;
process(cnt6)
begin
case cnt6 is
when 0=>scan<="000001";
when 1=>scan<="000010";
when 2=>scan<="000100";
when 3=>scan<="001000";
when 4=>scan<="010000";
when 5=>scan<="100000";
end case;
end process;
process(scan)
begin
case scan is
when "000001"=>data<=led1;dp<='0';
when "000010"=>data<=led2;dp<='0';
when "000100"=>data<=led3;dp<='1';
when "001000"=>data<=led4;dp<='0';
when "010000"=>data<=led5;dp<='1';
when "100000"=>data<=led6;dp<='0';
when others=>null;dp<='0';
end case;
end process;

process(key)
begin
IF b=1 then
if clk_100h'event and clk_100h='1' then
case led1 is
when"1001"=>led1<="0000";
case led2 is
when"1001"=>led2<="0000";
case led3 is
when"1001"=>led3<="0000";
case led4 is
when"0101"=>led4<="0000";
case led5 is
when"1001"=>led5<="0000";
case led6 is
when"0101"=>led6<="0000";
led5<="0000";
led4<="0000";
led3<="0000";
led2<="0000";

led1<="0000";
when others=>led6<=led6+1;
end case;
when others=>led5<=led5+1;
end case;
when others=>led4<=led4+1;
end case;
when others=>led3<=led3+1;
end case;
when others=>led2<=led2+1;
end case;
when others=>led1<=led1+1;
end case;
end if;
elsif b=2 THEN led6<=led6;led5<=led5;led4<=led4;led3<=led3;led2<=led2;
led1<=led1;
elsif b=3 THEN led6<="0000";led5<="0000";led4<="0000";led3<="0000";led2<="0000";
led1<="0000";
end if;
end process;

process(data)-------译码
begin
case data is
when"0000"=>s<="0111111";
when"0001"=>s<="0000110";
when"0010"=>s<="1011011";
when"0011"=>s<="1001111";
when"0100"=>s<="1100110";
when"0101"=>s<="1101101";
when"0110"=>s<="1111101";
when"0111"=>s<="0000111";
when"1000"=>s<="1111111";
when"1001"=>s<="1101111";
when others=>null;
end case;
end process;
wei<=scan;
duan<=s;
end;

相关文档
最新文档