LED 灯闪烁实验

目录

1 LED 灯简介

2 实验任务

3 硬件设计

4 程序设计

5 下载验证


1 LED 灯简介

        单向导电性。
        一般将电流限定在 3~20mA 之间,电流过大就会烧坏二极管。

2 实验任务

        使领航者底板上的 PL LED0 PL LED1 以固定的频率交替闪烁。

3 硬件设计

LED 灯硬件原理图
        本实验中,系统时钟、按键复位以及两个 LED 端口的管脚分配如下表所示,其中复位按键和两个LED 位于底板上,时钟位于核心板上:
LED闪烁实验管脚分配
        对应的 XDC 约束语句如下所示:
set_property -dict {PACKAGE_PIN U18 IOSTANDARD LVCMOS33} [get_ports sys_clk]
set_property -dict {PACKAGE_PIN N16 IOSTANDARD LVCMOS33} [get_ports sys_rst_n]
set_property -dict {PACKAGE_PIN H15 IOSTANDARD LVCMOS33} [get_ports {led[0]}]
set_property -dict {PACKAGE_PIN L15 IOSTANDARD LVCMOS33} [get_ports {led[1]}]

4 程序设计

        本次设计的模块端口及信号连接如下图所示:
LED 灯模块原理图
        其中,计数器对 50MHz 时钟进行计数,从而达到计时的目的。计数器在每次计时到 1 秒之后清零,然后重新开始计数,计数的值用于控制 LED 的显示状态。当计数器的值小于 0.5s 时,就把 LED0 点亮并把 LED1 熄灭;每当计数器的值大于 0.5s 时,就把 LED0 熄灭并把 LED1 点亮,以此实现两个 LED 的交替闪烁。

         LED 闪烁模块的代码如下:

module led_twinkle(
	input sys_clk , //系统时钟
	input sys_rst_n, //系统复位,低电平有效

	output [1:0] led //LED 灯
	);

//reg define
reg [25:0] cnt ;

//*****************************************************
//** main code
//*****************************************************

//对计数器的值进行判断,以输出 LED 的状态
assign led = (cnt < 26'd2500_0000) ? 2'b01 : 2'b10 ;

//计数器在 0~5000_000 之间进行计数
always @ (posedge sys_clk or negedge sys_rst_n) begin
	if(!sys_rst_n)
		cnt <= 26'd0;
	else if(cnt < 26'd5000_0000)
		cnt <= cnt + 1'b1;
	else
	    cnt <= 26'd0;
end

endmodule
        本程序中输入时钟为 50MHz ,所以一个时钟周期为 20ns 1/50MHz )。因此计数器 cnt 通过对 50MHz 系统时钟计数,计时到 1s ,需要累加 1s/20ns=5000_0000 次。在代码第 23 行,每当计时到 1s 计数器清零一次。
        同时,在代码的第 16 行,对根据计数器的计数值来赋值两个 LED 的状态。当计数值小于
26'd2500_000 即计时到 1s 中的前 500ms 时, LED0 点亮 LED1 熄灭;当计数值大于等于 26'd2500_000 ,即 计时到 1s 中的后 500ms 时, LED0 熄灭 LED1 点亮。当计数到 1s 时,计数器又会回 0 ,重复此过程。以此实现两个 LED 的交替闪烁。

5 下载验证

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不做拖延王

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值