entity LED1 is<br />port(Clk :in std_logic;<br /> Rst :in std_logic;<br /> Key1 :in std_logic;<br /> buzz :out std_logic;<br /> Ledout :out std_logic_vector(7 downto 0) );<br />end LED1;<br /><br /><br />architecture Behavioral of led1 is<br /> signal Cnt : std_logic_vector(3 downto 0);<br /> signal Clk_cnt : std_logic_vector(21 downto 0);<br /> signal key_cnt : std_logic_vector(20 downto 0);<br /> signal Clk2 : std_logic;<br /> signal cnt2 : std_logic_vector(1 downto 0);<br /> signal Led_t1 : std_logic_vector(7 downto 0);<br /> signal Key : std_logic;<br /> signal key_push : std_logic;<br />begin<br /><br />process(Rst,Clk) ----时钟分频,将40Mhz时钟分频 得到clk2<br />begin<br /> if Rst='0' then<br /> Clk_cnt<=(others=>'0');<br /> Clk2<='0';<br /> elsif Clk'event and Clk='1' then<br /> if Clk_cnt="1111111111111111111111" then<br /> Clk2<=not Clk2;<br /> Clk_cnt<=(others=>'0');<br /> else<br /> Clk_cnt<=Clk_cnt+1;<br /> end if;<br /> end if;<br />end process;<br /><br /><br /><br />process(Clk) ----按键消除抖动进程<br />begin<br /> if(clk'event and clk='1')then<br /> key<=Key1;<br /> if(key='1')then<br /> key_cnt<=(others=>'0');<br /> elsif(key_cnt(20)='0')then<br /> key_cnt<=key_cnt+1;<br /> end if;<br /> end if;<br />end process; <br /> <br />key_push<=key_cnt(20); --将按键信息赋予key_push<br /><br /><br /><br />process(key_push,clk2)--啊,啊这个进程太难把握了.....使得按键总有冲突<br />begin <br /> if (key_push='1' and clk2='1') then<br /> cnt2<=cnt2+1;<br /> else null;<br /> end if;<br /> end process;<br /> <br /><br /><br /> led_t1<="01000001" when cnt2="00" else--小灯随cnt2改变而改变<br /> "11000011" when cnt2="01" else<br /> "11000111" when cnt2="10" else<br /> "11001111";<br /><br />Ledout<=Led_t1; --把led信号传给小灯输出<br /> buzz<='1'; --嗡鸣器<br /><br /><br />end Behavioral;
|