亮度可调智能节能led灯VHDL代码Quartus仿真

名称:亮度可调智能节能led灯VHDL代码Quartus仿真

软件:Quartus

语言:VHDL

代码功能:

LED灯具有发光效率高、可控性好、响应速

度快、寿命长等特点,由于LED灯照明所应

用的场合、位置和时间段的不同,对LED灯

的实际光照度也有有着不同的需求。这时就

需要实现对LED灯的光照度进行方便的调

节,使其不仅可提高光照的舒适度,还可以进一步节省能源的消耗,并且符合目前智能

化控制的发展趋势。设计一款室内LED灯节

能优化控制系统,要求

1、节能。当房间亮度足够亮的时候,LED灯

熄灭;睡眠模式时,灯亮度会随着倒计时逐渐变暗。

2,控制。LED灯可能由用户通过按键Key1和按键Key2控制LED灯以两种模式照明手动模式和睡眠模式用户按下“Key1"键时即选择了手动模式,按键按一下是一档,按两下是二档,依此类推,四个档位分别对应20%、50%、75%和100%亮度,当按键按第

五下档位归零,LED灯关闭;用户按下

Key2"键时即选择了睡眠模式,共四个档按键操作与手动模式相同,四个档位分别对应5分钟、10分钟、15分钟和20分钟倒计时,倒计时结束或者用户按Key2键五下档位归零,LED灯关闭。按键"Key1”和按键

Key2是两种模式的选择,且在其中一种模式激活的状态下,用户无法切换到另一个模式,只有在两种模式都关闭的状态下,用户才能切换模式。

采用50MHZ时钟源的FPGA芯片,使用VHDL

语言编程。完成该系统的软件和硬件的设计,并制作出实物装置,调试好后并能实际运用,最后提交一篇毕业设计说明书,包括设计指标、设计原理、计算结果、使用说明书、参考文献、设计总结等。


FPGA代码Verilog/VHDL代码资源下载:www.hdlcode.com


演示视频:

设计文档:

设计文档.doc

1. 工程文件

2. 程序文件

3. 程序编译

4. RTL图

5. 仿真图

整体仿真

分频模块

将输入的50MHz分频输出1Hz信号,用于秒计时(控制模块的分钟倒计时使用)

按键检测模块

LED控制模块


部分代码展示:

LIBRARY ieee;
   USE ieee.std_logic_1164.all;
   USE ieee.std_logic_unsigned.all;
--LED控制模块
ENTITY LED_ctrl IS
   PORT (
      clk_in      : IN STD_LOGIC;--时钟
      rst_n       : IN STD_LOGIC;--复位
      clk_1hz     : IN STD_LOGIC;--时钟1Hz
      light_high  : IN STD_LOGIC;--白天亮度
      key1_p      : IN STD_LOGIC;--按键1
      key2_p      : IN STD_LOGIC;--按键2
      LED         : OUT STD_LOGIC--led输出
   );
END LED_ctrl;
ARCHITECTURE trans OF LED_ctrl IS
   SIGNAL LED_light : STD_LOGIC := '0';
   --状态定义
   type state_type is (      
      s_idle      ,
      s_hand_1    ,
      s_hand_2    ,
      s_hand_3    ,
      s_hand_4    ,
      s_sleep_1   ,
      s_sleep_2   ,
      s_sleep_3   ,
      s_sleep_4   );
SIGNAL state:state_type;
   SIGNAL min_5     : STD_LOGIC_VECTOR(11 DOWNTO 0);
   SIGNAL min_10    : STD_LOGIC_VECTOR(11 DOWNTO 0);
   SIGNAL min_15    : STD_LOGIC_VECTOR(11 DOWNTO 0);
   SIGNAL min_20    : STD_LOGIC_VECTOR(11 DOWNTO 0);
   
   SIGNAL count     : STD_LOGIC_VECTOR(7 DOWNTO 0) := "00000000";
   
   SIGNAL pwm_20    : STD_LOGIC;
   SIGNAL pwm_50    : STD_LOGIC;
   SIGNAL pwm_75    : STD_LOGIC;
   SIGNAL pwm_100   : STD_LOGIC;
BEGIN
--状态机控制
   PROCESS (clk_in, rst_n)
   BEGIN
      IF ((NOT(rst_n)) = '1') THEN
         state <= s_idle;
      ELSIF (clk_in'EVENT AND clk_in = '1') THEN
         CASE state IS
            WHEN s_idle =>--空闲状态
               IF (key1_p = '1') THEN
                  state <= s_hand_1;
               ELSIF (key2_p = '1') THEN
                  state <= s_sleep_1;
               END IF;
            WHEN s_hand_1 =>--手动1状态
               IF (key1_p = '1') THEN
                  state <= s_hand_2;
               END IF;
            WHEN s_hand_2 =>--手动2状态
               IF (key1_p = '1') THEN
                  state <= s_hand_3;
               END IF;
            WHEN s_hand_3 =>--手动3状态
               IF (key1_p = '1') THEN
                  state <= s_hand_4;
               END IF;
            WHEN s_hand_4 =>--手动4状态
               IF (key1_p = '1') THEN
                  state <= s_idle;
               END IF;
            WHEN s_sleep_1 =>--睡眠1状态
               IF (key2_p = '1') THEN
                  state <= s_sleep_2;
               ELSIF (min_5 = "000000000000") THEN
                  state <= s_idle;
               END IF;
            WHEN s_sleep_2 =>--睡眠2状态
               IF (key2_p = '1') THEN
                  state <= s_sleep_3;
               ELSIF (min_10 = "000000000000") THEN
                  state <= s_idle;
               END IF;
            WHEN s_sleep_3 =>--睡眠3状态
               IF (key2_p = '1') THEN
                  state <= s_sleep_4;
               ELSIF (min_15 = "000000000000") THEN
                  state <= s_idle;
               END IF;
            WHEN s_sleep_4 =>--睡眠4状态
               IF (key2_p = '1') THEN
                  state <= s_idle;
               ELSIF (min_20 = "000000000000") THEN
                  state <= s_idle;
               END IF;
            WHEN OTHERS =>
               state <= s_idle;
         END CASE;
      END IF;
   END PROCESS;
   
   --控制pwm波,不同占空比对应不同亮度
   PROCESS (clk_in, rst_n)
   BEGIN
      IF ((NOT(rst_n)) = '1') THEN
         count <= "00000000";
      ELSIF (clk_in'EVENT AND clk_in = '1') THEN
         IF (count >= "00110010") THEN--计数100
            count <= "00000000";
         ELSE
            count <= count + "00000001";--计数
         END IF;
      END IF;
   END PROCESS;
   
   pwm_20 <= '1' WHEN (count < "00001010") ELSE--20%占空比
             '0';
   pwm_50 <= '1' WHEN (count < "00011001") ELSE--50%占空比
             '0';
   pwm_75 <= '1' WHEN (count < "00100101") ELSE--75%占空比
             '0';
   pwm_100 <= '1';--100%占空比
   
   --倒计时5分钟
   PROCESS (clk_1hz, rst_n)
   BEGIN
      IF ((NOT(rst_n)) = '1') THEN
         min_5 <= "000100101100";
      ELSIF (clk_1hz'EVENT AND clk_1hz = '1') THEN
         IF (state = s_idle) THEN
            min_5 <= "000100101100";
         ELSIF (state = s_sleep_1) THEN
            min_5 <= min_5 - "000000000001";
         END IF;
      END IF;
   END PROCESS;
   
    --倒计时10分钟
   PROCESS (clk_1hz, rst_n)
   BEGIN
      IF ((NOT(rst_n)) = '1') THEN
         min_10 <= "001001011000";
      ELSIF (clk_1hz'EVENT AND clk_1hz = '1') THEN
         IF (state = s_idle) THEN
            min_10 <= "001001011000";
         ELSIF (state = s_sleep_2) THEN
            min_10 <= min_10 - "000000000001";
         END IF;
      END IF;

代码文件(付费下载):

smart_LED.rar



1、代码文件需要付费后才可见。
2、支付问题请联系微信公众号客服。
3、优质Verilog/VHDL代码资源,所见即所得。
Verilog/VHDL资源下载 » 亮度可调智能节能led灯VHDL代码Quartus仿真

发表评论

模板文件不存在: ./template/plugins/comment/pc/index.htm

注册为本站会员,充值100得150,详情咨询客服

目前为止共有 *** 位优秀的会员加入! 立刻加入会员