⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 clock.vhd

📁 基于VHDL的电子钟 实现一个简单的电子钟
💻 VHD
字号:
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;
use work.clock_pkg.all;

entity clock is
port(  	x:IN BIT;
        clk,clk2 : in std_logic ;
		show: out std_logic_vector (6 downto 0);
		decode: buffer std_logic_vector (2 downto 0)	
	);
end clock;
architecture clock_display of clock is
signal hourh,hourl,minh,minl,sech,secl,dh,dl,mh,ml,yh,yl: std_logic_vector( 3 downto 0);
signal c0:std_logic;
signal tempt: std_logic_vector (3 downto 0);
signal   t: std_logic_vector (3 downto 0);
signal c1,c2,c3,c4,c6: std_logic ;
signal c5:std_logic_vector (1 downto 0);
signal c7:std_logic_vector (1 downto 0);
begin
        c5<=c7;
  		sec: cnt60 port map (sech,secl,clk,c1);
		min: cnt60 port map (minh,minl,c1,c2);
		hor: hour port map (hourh,hourl,c2,c3);
		da: day port map (dh,dl,c3,c5,c4);
		mo: month port map (mh,ml,c4,c6,c7);
		yr: year port map (yh,yl,c6);

  process(clk)
  begin
	if clk'event and clk='1' then 
		c0 <= not c0;
	end if;
  end process;

  process(clk2)
  begin 
  	if clk2'event and clk2 = '1' then
		case decode is
		when "110" => tempt <=secl;t <=dl;
		when "111" => tempt <=sech;t <=dh; 
		when "000" => tempt <= "1111";t <="1111";
		when "001" => tempt <=minl;t <=ml; 
		when "010" => tempt <=minh;t <=mh; 
		when "011" => tempt <= "1111";t <="1111";
		when "100" => tempt <= hourl;t <=yl;
		when "101" => tempt <=hourh;t <=yh;
		end case ;
		
		decode <= decode+1;	
	end if;
  end process;
  
  process(clk2)
  begin 
  	if clk2'event and clk2 = '1' then
    if x='1' then
		case t is
		when "0000" => show <= "1111110";	--led 0  --Ox7E
		when "0001" => show <= "0110000";	--led 1  --Ox30
		when "0010" => show <= "1101101";	--led 2  --Ox6D
		when "0011" => show <= "1111001";	--led 3  --Ox79
		when "0100" => show <= "0110011";	--led 4  --Ox33
		when "0101" => show <= "1011011";	--led 5  --Ox5B
		when "0110" => show <= "1011111";	--led 6  --Ox5F
		when "0111" => show <= "1110000";	--led 7  --Ox70
		when "1000" => show <= "1111111";	--led 8  --Ox7F
		when "1001" => show <= "1111011";	--led 9  --Ox7B
		when "1111" => show <= "0000001";	--led -  --Ox01
		when others => show <= "1111110";	--led     --Ox7e
		end case ;
	else 
	    case tempt is
		when "0000" => show <= "1111110";	--led 0  --Ox7E
		when "0001" => show <= "0110000";	--led 1  --Ox30
		when "0010" => show <= "1101101";	--led 2  --Ox6D
		when "0011" => show <= "1111001";	--led 3  --Ox79
		when "0100" => show <= "0110011";	--led 4  --Ox33
		when "0101" => show <= "1011011";	--led 5  --Ox5B
		when "0110" => show <= "1011111";	--led 6  --Ox5F
		when "0111" => show <= "1110000";	--led 7  --Ox70
		when "1000" => show <= "1111111";	--led 8  --Ox7F
		when "1001" => show <= "1111011";	--led 9  --Ox7B
		when "1111" => show <= "0000001";	--led -  --Ox01
		when others => show <= "1111110";	--led     --Ox7e
		end case ;
		end if;
	end if;
  end process;
 end architecture clock_display;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -