• 方案介绍
  • 附件下载
  • 相关推荐
申请入驻 产业图谱

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

07/07 15:30
546
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

2-240122143G1514.doc

共1个文件

名称:亮度可调智能节能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

演示视频:

设计文档:

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;

点击链接获取代码文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=607

  • 2-240122143G1514.doc
    下载

相关推荐