彩灯控制器设计

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

彩灯控制器设计

摘要

一、系统设计要求

设计一个控制电路来实现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 IS

PORT(CLK:IN STD_LOGIC;

OUTPUT:BUFFER STD_LOGIC);

END clk_div2 ;

ARCHITECTURE one OF clk_div2 IS

BEGIN

PROCESS(CLK)

BEGIN

IF CLK'EVENT AND CLK='1' THEN

OUTPUT<=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 IS

PORT(CLK,ENA:IN STD_LOGIC;

OUTPUT:BUFFER STD_LOGIC_VECTOR(1 DOWNTO 0));

ARCHITECTURE one OF count1 IS

SIGNAL CQ:STD_LOGIC_VECTOR(5 DOWNTO 0);

BEGIN

PROCESS(CLK,ENA)

BEGIN

IF CLK'EVENT AND CLK='1' THEN

IF ENA='1' THEN

IF 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 IS

PORT(CLK,ENA:IN STD_LOGIC;

OUTPUT:OUT STD_LOGIC_VECTOR(5 DOWNTO 0));

ARCHITECTURE one OF count2 IS

SIGNAL CQ:STD_LOGIC_VECTOR(5 DOWNTO 0);

BEGIN

PROCESS(CLK,ENA)

BEGIN

IF CLK'EVENT AND CLK='1' THEN

IF ENA='1' THEN

IF 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 IS

PORT(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 IS

BEGIN

相关文档
最新文档