彩灯控制器设计摘要一、系统设计要求设计一个控制电路来实现8路彩灯按照一定的次序和时间间隔闪烁。
具体要求如下:1、当控制开关为0时,灯全灭;当控制开关为1时,从第一盏开始,依次点亮,时间间隔为1秒。
期间一直保持只有一盏灯亮、其他灯全灭的状态。
2、 8盏灯依次亮完后,从第8盏开始依次灭,期间一直保持只有一盏灯灭、其他灯全亮的状态。
3、当8盏灯依次灭完后,8盏灯同时亮同时灭,其时间间隔为0.5秒,并重复4次。
4、只要控制开关为1,上述亮灯次序不断重复。
5、用层次化设计方法设计该电路,编写各个功能模块的程序。
6、仿真各功能模块,通过观察有关波形确认电路设计是否正确。
7、完成电路设计后,用实验系统下载验证设计的正确性。
二、系统总体结构系统框图如下所示,ENA为控制开关,输入信号为2Hz,经过分频器分频之后产生一个1Hz的时钟信号,用两个12位内部信号的左、右移后的中间8位来控制8个灯的亮与灭。
计数器1和计数器2的作用:一方面用2Hz和1Hz的时钟信号控制灯亮、灭的时间间隔;另一方面控制八盏灯的依次亮、依次灭和全亮、全灭。
使能信号ENA为无效电平时(低电平),8只LED灯保持全灭的状态;当使能信号ENA为有效电平时(高电平),8只按照既定的花型进行变换,首先2Hz的时钟信号在分频器的左右下改变为1Hz的时钟信号,该1Hz的时钟信号送至计数器2、左移和右移模块,并由计数器2实现左、右移模块的选择。
分别实现8只LED灯的自左向右依次点亮,以及自右向左依次熄灭的花型变换;当完成自右向左的花型变换后,计数器2给出一个控制信号给计数器1,执行全亮全灭的花型变换,该模块的时钟信号是未经分频器分频的原始时钟信号2Hz。
只要使能信号有效,那么该系统就按照以上的花型变换顺序一直永序的变换下去。
三、各功能模块1、时钟信号二分频模块:功能描述:该模块的功能主要是将频率为2Hz的时钟信号分频频率为1Hz的时钟信号,并将频率为1Hz的时钟信号输出给左移、右移模块作为这两个模块时钟触发信号。
代码部分:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY clk_div2 ISPORT(CLK:IN STD_LOGIC;OUTPUT:BUFFER STD_LOGIC);END clk_div2 ;ARCHITECTURE one OF clk_div2 ISBEGINPROCESS(CLK)BEGINIF CLK'EVENT AND CLK='1' THENOUTPUT<=NOT OUTPUT;END IF;END PROCESS;END one;仿真波形:2、计数器模块:功能描述:该模块的主要功能是通过计数,实现对左移及右移模块的选通,并在右移和左移模块完成后,跳转到循环取反模块执行指令。
计数器1代码部分:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY count1 ISPORT(CLK,ENA:IN STD_LOGIC;OUTPUT:BUFFER STD_LOGIC_VECTOR(1 DOWNTO 0));ARCHITECTURE one OF count1 ISSIGNAL CQ:STD_LOGIC_VECTOR(5 DOWNTO 0);BEGINPROCESS(CLK,ENA)BEGINIF CLK'EVENT AND CLK='1' THENIF ENA='1' THENIF CQ<"100111" THEN CQ<=CQ+1;IF CQ="100000" THEN OUTPUT<="10";ELSIF CQ="100001" THEN OUTPUT<="01"; ELSIF CQ="100010" THEN OUTPUT<="10"; ELSIF CQ="100011" THEN OUTPUT<="01"; ELSIF CQ="100100" THEN OUTPUT<="10"; ELSIF CQ="100101" THEN OUTPUT<="01"; ELSIF CQ="100110" THEN OUTPUT<="10"; ELSIF CQ="100111" THEN OUTPUT<="01"; END IF;ELSE CQ<="000000";OUTPUT<="00";END IF;ELSE CQ<="111111";END IF;END IF;END PROCESS;END one;仿真波形:计数器2代码:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY count2 ISPORT(CLK,ENA:IN STD_LOGIC;OUTPUT:OUT STD_LOGIC_VECTOR(5 DOWNTO 0));ARCHITECTURE one OF count2 ISSIGNAL CQ:STD_LOGIC_VECTOR(5 DOWNTO 0);BEGINPROCESS(CLK,ENA)BEGINIF CLK'EVENT AND CLK='1' THENIF ENA='1' THENIF CQ<"010011" THEN CQ<=CQ+1;ELSE CQ<="000000";END IF;ELSE CQ<="111111";END IF;END IF;END PROCESS;OUTPUT<=CQ;END one;仿真波形:3、循环右移模块:功能描述:该功能实现8只LED灯的从左向右依次点亮的功能,点亮过程中,每时每刻都保证只有一个LED被点亮,其它LED全灭的状态。
时间间隔为1S。
代码部分:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY rightmove ISPORT(CLK,ENA:IN STD_LOGIC;COUNT:IN STD_LOGIC_VECTOR(5 DOWNTO 0);OUTPUT:OUT STD_LOGIC_VECTOR(11 DOWNTO 0));END rightmove ;ARCHITECTURE one OF rightmove ISBEGINPROCESS(CLK,ENA,COUNT)BEGINIF CLK'EVENT AND CLK='1' THENIF ENA='1' THENCASE COUNT ISWHEN "000000"=>OUTPUT<="001000000000";WHEN "000001"=>OUTPUT<="000100000000";WHEN "000010"=>OUTPUT<="000010000000";WHEN "000011"=>OUTPUT<="000001000000";WHEN "000100"=>OUTPUT<="000000100000";WHEN "000101"=>OUTPUT<="000000010000";WHEN "000110"=>OUTPUT<="000000001000";WHEN "000111"=>OUTPUT<="000000000100";WHEN OTHERS=>OUTPUT<="000000000000";END CASE;ELSE OUTPUT<="000000000000";END IF;END IF;END PROCESS;END one;仿真波形:4、循环左移模块:功能描述:该功能实现8只LED灯在从左向右依次点亮结束后,从右向左依次熄灭一只LED,熄灭过程中,每时每刻都保证只有一个LED被熄灭,其它LED全亮的状态。
时间间隔为1S。
代码部分:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY leftmove ISPORT(CLK,ENA:IN STD_LOGIC;COUNT:IN STD_LOGIC_VECTOR(5 DOWNTO 0);OUTPUT:OUT STD_LOGIC_VECTOR(11 DOWNTO 0));END leftmove ;ARCHITECTURE one OF leftmove ISBEGINPROCESS(CLK,ENA,COUNT)BEGINIF CLK'EVENT AND CLK='1' THENIF ENA='1' THENCASE COUNT ISWHEN "001000"=>OUTPUT<="111111111011";WHEN "001001"=>OUTPUT<="111111110111";WHEN "001010"=>OUTPUT<="111111101111";WHEN "001011"=>OUTPUT<="111111011111";WHEN "001100"=>OUTPUT<="111110111111";WHEN "001101"=>OUTPUT<="111101111111";WHEN "001110"=>OUTPUT<="111011111111";WHEN "001111"=>OUTPUT<="110111111111";WHEN OTHERS=>OUTPUT<="000000000000";END CASE;ELSE OUTPUT<="000000000000";END IF;END IF;END PROCESS;END one;仿真波形:5、循环取反模块:功能描述:该模块实现的是对完成逐个点亮和逐个熄灭的过程后,实现每秒2次的全亮、全灭的闪烁。