LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;USE IEEE.STD_LOGIC_SIGNED.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;ENTITY Clock ISPORT( CLK5:IN STD_LOGIC;CLK3:IN STD_LOGIC; --时钟控制SET1:IN STD_LOGIC;SET2:IN STD_LOGIC; --模式控制SEG_SEL:OUT STD_LOGIC_VECTOR(2 DOWNTO 0);SEG_DA :OUT STD_LOGIC_VECTOR(7 DOWNTO 0));END Clock;ARCHITECTURE ADO OF Clock ISSIGNAL SEG_BUF1,SEG_BUF2,SEG_BUF3,SEG_BUF4:STD_LOGIC_VECTOR(3 DOWNTO 0); SIGNAL SEG_BUF5,SEG_BUF6,SEG_BUF7,SEG_BUF8:STD_LOGIC_VECTOR(3 DOWNTO 0); SIGNAL SEG_CNT :STD_LOGIC_VECTOR(2 DOWNTO 0);SIGNAL SEG_TEMP:STD_LOGIC_VECTOR(3 DOWNTO 0);BEGINPROCESS (CLK3) --扫描累加BEGINIF CLK3'EVENT AND CLK3='1' THENSEG_CNT<=SEG_CNT+1;END IF;END PROCESS;SEG_SEL<=SEG_CNT;SEG_BUF3<="1111";SEG_BUF6<="1111";PROCESS(SEG_CNT,SEG_BUF1,SEG_BUF2,SEG_BUF3,SEG_BUF4,SEG_BUF5,SEG_BUF6,SEG_BUF7 ,SEG_BUF8)BEGINCASE SEG_CNT ISWHEN "000" => SEG_TEMP<=SEG_BUF1;WHEN "001" => SEG_TEMP<=SEG_BUF2;WHEN "010" => SEG_TEMP<=SEG_BUF3;WHEN "011" => SEG_TEMP<=SEG_BUF4;WHEN "100" => SEG_TEMP<=SEG_BUF5;WHEN "101" => SEG_TEMP<=SEG_BUF6;WHEN "110" => SEG_TEMP<=SEG_BUF7;WHEN "111" => SEG_TEMP<=SEG_BUF8;WHEN OTHERS => NULL;END CASE;END PROCESS;PROCESS (SEG_TEMP) --显示转换BEGINCASE SEG_TEMP ISWHEN "0000" => SEG_DA<=x"3F";WHEN "0001" => SEG_DA<=x"06";WHEN "0010" => SEG_DA<=x"5B";WHEN "0011" => SEG_DA<=x"4F";WHEN "0100" => SEG_DA<=x"66";WHEN "0101" => SEG_DA<=x"6D";WHEN "0110" => SEG_DA<=x"7D";WHEN "0111" => SEG_DA<=x"07";WHEN "1000" => SEG_DA<=x"7F";WHEN "1001" => SEG_DA<=x"6F";WHEN "1010" => SEG_DA<=x"77";WHEN "1011" => SEG_DA<=x"7B";WHEN "1100" => SEG_DA<=x"39";WHEN "1101" => SEG_DA<=x"3E";WHEN "1110" => SEG_DA<=x"79";WHEN "1111" => SEG_DA<=x"00";END CASE;END PROCESS;PROCESS(Clk5,SET1,SET2)BEGINif(SET1='1' AND SET2='1') then --系统复位SEG_BUF1<="0000";SEG_BUF2<="0000";SEG_BUF4<="0000";SEG_BUF5<="0000";SEG_BUF7<="0000";SEG_BUF8<="0000";elsif(Clk5'event and Clk5='1') thenif(SET1='1' and SET2='0') then --调节小时if(SEG_BUF7=9) thenSEG_BUF7<="0000";SEG_BUF8<=SEG_BUF8+1;elsif(SEG_BUF8>=2 and SEG_BUF7>=3) thenSEG_BUF7<="0000";SEG_BUF8<="0000";elseSEG_BUF7<=SEG_BUF7+1;end if;elsif(SET1='0' and SET2='1') then --调节分钟if(SEG_BUF4=9) thenSEG_BUF4<="0000";if(SEG_BUF5=5) thenSEG_BUF5<="0000";elseSEG_BUF5<=SEG_BUF5+1;end if;elseSEG_BUF4<=SEG_BUF4+1;end if;elsif(SET1='0' and SET2='0') then --正常计数SEG_BUF1<=SEG_BUF1;SEG_BUF2<=SEG_BUF2;SEG_BUF4<=SEG_BUF4;SEG_BUF5<=SEG_BUF5;SEG_BUF7<=SEG_BUF7;SEG_BUF8<=SEG_BUF8;if(SEG_BUF1=9) thenSEG_BUF1<="0000";if(SEG_BUF2=5) thenSEG_BUF2<="0000";if(SEG_BUF4=9) thenSEG_BUF4<="0000";if(SEG_BUF5=5) thenSEG_BUF5<="0000";if(SEG_BUF7=9) thenSEG_BUF7<="0000";SEG_BUF8<=SEG_BUF8+1;elsif(SEG_BUF8>=2 and SEG_BUF7>=3) thenSEG_BUF7<="0000";SEG_BUF8<="0000";elseSEG_BUF7<=SEG_BUF7+1;end if;elseSEG_BUF5<=SEG_BUF5+1;end if;elseSEG_BUF4<=SEG_BUF4+1;end if;elseSEG_BUF2<=SEG_BUF2+1;end if;elseSEG_BUF1<=SEG_BUF1+1;end if;end if;end if;end process;end ADO;引脚绑定:ClK3 PIN_25CLK5 PIN_89SET1 PIN_32SET2 PIN_33SEG_DA[7] PIN_128SEG_DA[6] PIN_142SEG_DA[5] PIN_141SEG_DA[4] PIN_138SEG_DA[3] PIN_137SEG_DA[2] PIN_136SEG_DA[1] PIN_135SEG_DA[0] PIN_133SEG_SEL[2] PIN_127SEG_SEL[1] PIN_126SEG_SEL[0] PIN_125仿真图:。