名称:流水彩灯控制器VHDL代码Quartus仿真(文末获取)
软件:Quartus
语言:VHDL
代码功能:
流水彩灯控制器
1、具有8位彩灯
2、按键切换花样变化的速度
3、可以切换彩灯样式
4、可以控制让彩灯循环变化
1. 工程文件
2. 程序文件
3. 程序编译
4. 程序仿真
部分代码展示:
LIBRARY ieee; USE ieee.std_logic_1164.all; USE ieee.std_logic_unsigned.all; ENTITY water_lamp_led IS PORT ( clk : IN STD_LOGIC;--64Hz speed_en_out : OUT STD_LOGIC; led_clk : IN STD_LOGIC; key_speed : IN STD_LOGIC;--切换速度,按下高电平 key_style : IN STD_LOGIC;--切换样式 key_cycle : IN STD_LOGIC;--切换循环显示 led : OUT STD_LOGIC_VECTOR(7 DOWNTO 0)--led 低亮 ); END water_lamp_led; ARCHITECTURE ARCH OF water_lamp_led IS SIGNAL led_inverse : STD_LOGIC_VECTOR(7 DOWNTO 0) := "00000000"; SIGNAL key_speed_stable : STD_LOGIC := '0'; SIGNAL key_style_stable : STD_LOGIC := '0'; SIGNAL key_cycle_stable : STD_LOGIC := '0'; SIGNAL key_speed_stable_0 : STD_LOGIC := '0'; SIGNAL key_style_stable_0 : STD_LOGIC := '0'; SIGNAL key_cycle_stable_0 : STD_LOGIC := '0'; SIGNAL key_speed_stable_1 : STD_LOGIC := '0'; SIGNAL key_style_stable_1 : STD_LOGIC := '0'; SIGNAL key_cycle_stable_1 : STD_LOGIC := '0'; SIGNAL key_speed_pressed : STD_LOGIC; SIGNAL key_style_pressed : STD_LOGIC; SIGNAL key_cycle_pressed : STD_LOGIC; SIGNAL cycle_en : STD_LOGIC := '0'; SIGNAL speed_en : STD_LOGIC := '0'; SIGNAL style_num : STD_LOGIC_VECTOR(1 DOWNTO 0) := "00"; --SIGNAL led_clk : STD_LOGIC; SIGNAL style_cnt_1 : STD_LOGIC_VECTOR(3 DOWNTO 0) := "0000"; SIGNAL style_cnt_2 : STD_LOGIC_VECTOR(2 DOWNTO 0) := "000"; SIGNAL style_cnt_3 : STD_LOGIC_VECTOR(2 DOWNTO 0) := "000"; SIGNAL led_1 : STD_LOGIC_VECTOR(7 DOWNTO 0) := "00000000"; SIGNAL led_2 : STD_LOGIC_VECTOR(7 DOWNTO 0) := "00000000"; SIGNAL led_3 : STD_LOGIC_VECTOR(7 DOWNTO 0) := "00000000"; SIGNAL cycle_count : STD_LOGIC_VECTOR(4 DOWNTO 0) := "00000"; BEGIN led <= NOT(led_inverse);--led 低亮 speed_en_out<=speed_en; PROCESS (clk) BEGIN IF (clk'EVENT AND clk = '1') THEN key_speed_stable <= key_speed; key_style_stable <= key_style; key_cycle_stable <= key_cycle; END IF; END PROCESS; PROCESS (clk) BEGIN IF (clk'EVENT AND clk = '1') THEN key_speed_stable_0 <= key_speed_stable; key_style_stable_0 <= key_style_stable; key_cycle_stable_0 <= key_cycle_stable; END IF; END PROCESS; PROCESS (clk) BEGIN IF (clk'EVENT AND clk = '1') THEN key_speed_stable_1 <= key_speed_stable_0; key_style_stable_1 <= key_style_stable_0; key_cycle_stable_1 <= key_cycle_stable_0; END IF; END PROCESS; key_speed_pressed <= key_speed_stable_0 AND NOT(key_speed_stable_1);--获取按键上升沿 key_style_pressed <= key_style_stable_0 AND NOT(key_style_stable_1);--获取按键上升沿 key_cycle_pressed <= key_cycle_stable_0 AND NOT(key_cycle_stable_1);--获取按键上升沿 PROCESS (clk) BEGIN IF (clk'EVENT AND clk = '1') THEN IF (key_cycle_pressed = '1') THEN cycle_en <= NOT(cycle_en);--切换循环显示 END IF; END IF; END PROCESS; PROCESS (clk) BEGIN IF (clk'EVENT AND clk = '1') THEN IF (key_speed_pressed = '1') THEN speed_en <= NOT(speed_en);--切换速度 END IF; END IF; END PROCESS; PROCESS (clk) BEGIN IF (clk'EVENT AND clk = '1') THEN IF (key_style_pressed = '1') THEN IF (style_num >= "10") THEN style_num <= "00"; ELSE style_num <= style_num + "01";--切换花型 END IF; END IF; END IF; END PROCESS; PROCESS (clk) BEGIN IF (clk'EVENT AND clk = '1') THEN IF (key_style_pressed = '1') THEN style_cnt_1 <= "0000"; style_cnt_2 <= "000"; style_cnt_3 <= "000"; ELSIF (led_clk = '1') THEN--计数,用于流水灯的变化 style_cnt_1 <= style_cnt_1 + "0001"; style_cnt_2 <= style_cnt_2 + "001"; style_cnt_3 <= style_cnt_3 + "001"; END IF; END IF; END PROCESS; PROCESS (clk) BEGIN IF (clk'EVENT AND clk = '1') THEN CASE style_cnt_1 IS--花型1控制 WHEN "0000" => led_1 <= "10000000"; WHEN "0001" => led_1 <= "11000000"; WHEN "0010" => led_1 <= "11100000"; WHEN "0011" => led_1 <= "11110000"; WHEN "0100" => led_1 <= "11111000"; WHEN "0101" => led_1 <= "11111100"; WHEN "0110" => led_1 <= "11111110"; WHEN "0111" => led_1 <= "11111111"; WHEN "1000" => led_1 <= "11111110"; WHEN "1001" => led_1 <= "11111100"; WHEN "1010" => led_1 <= "11111000"; WHEN "1011" => led_1 <= "11110000"; WHEN "1100" => led_1 <= "11100000"; WHEN "1101" => led_1 <= "11000000"; WHEN "1110" => led_1 <= "10000000"; WHEN "1111" => led_1 <= "00000000"; WHEN OTHERS => END CASE; END IF; END PROCESS;
源代码
扫描文章末尾的公众号二维码