您当前的位置: 首页 >  fpga开发

正点原子

暂无认证

  • 0浏览

    0关注

    382博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

【正点原子FPGA连载】第八章LED灯闪烁实验 -摘自【正点原子】领航者ZYNQ之FPGA开发指南_V2.0

正点原子 发布时间:2021-12-30 17:59:35 ,浏览量:0

1)实验平台:正点原子领航者ZYNQ开发板 2)平台购买地址:https://item.taobao.com/item.htm?&id=606160108761 3)全套实验源码+手册+视频下载地址:http://www.openedv.com/thread-301505-1-1.html 4)对正点原子FPGA感兴趣的同学可以加群讨论:994244016 5)关注正点原子公众号,获取最新资料更新 在这里插入图片描述

第八章LED灯闪烁实验

LED灯闪烁作为一个经典的入门实验,其地位堪比编程界的“Hello,World!”。对于很多电子工程师来说,LED灯闪烁都是他们在硬件上观察到的第一个实验现象。本章我们同样通过LED灯闪烁实验,带你进入ZYNQ的精彩世界。 本章包括以下几个部分: 1.1 LED灯简介 1.2 实验任务 1.3 硬件设计 1.4 程序设计 1.5 下载验证   1.1 LED灯简介 LED,又名发光二极管。LED灯工作电流很小(有的仅零点几毫安即可发光),抗冲击和抗震性能好,可靠性高,寿命长。由于这些优点,LED灯被广泛用在仪器仪表中作指示灯、液晶屏背光源等诸多领域。 不同材料的发光二极管可以发出红、橙、黄、绿、青、蓝、紫、白这八种颜色的光。图 7.5.13.1是可以发出黄、红、蓝三种颜色的直插型二极管实物图,这种二极管长的一端是阳极,短的一端是阴极。图 7.5.13.2是开发板上用的贴片二极管实物图。贴片二极管的正面一般都有颜色标记,有标记的那端就是阴极。 在这里插入图片描述

图 7.5.13.1 发光二极管实物图

在这里插入图片描述

图 7.5.13.2 贴片发光二极管实物图 发光二极管与普通二极管一样具有单向导电性。给它加上阳极正向电压后,通过5mA左右的电流就可以使二极管发光。通过二极管的电流越大,发出的光亮度越强。不过我们一般将电流限定在3~20mA之间,否则电流过大就会烧坏二极管。 1.2 实验任务 本节实验任务是使领航者底板上的PL LED0和PL LED1以固定的频率交替闪烁。 1.3 硬件设计 底板上LED的原理图如下图所示: 在这里插入图片描述

图 7.5.13.1 LED灯硬件原理图 在图 7.5.13.1中,PL_LED0和PL_LED1连接到ZYNQ的PL端,PS_LED0和PS_LED1连接到ZYNQ的PS端。在《领航者ZYNQ之FPGA开发指南》中,我们只使用PL端的外设。 PL_LED0和PL_LED1的阴极通过 470 欧姆的电阻连到地(GND)上,阳极由ZYNQ PL的IO管脚控制,LED与地之间的电阻起到限流作用。 本实验中,系统时钟、按键复位以及两个LED端口的管脚分配如下表所示,其中复位按键和两个LED位于底板上,时钟位于核心板上: 表 8.3.1 LED闪烁实验管脚分配 信号名 方向 管脚 端口说明 电平标准 sys_clk input U18 系统时钟,50MHz LVCMOS33 sys_rst_n input N16 系统复位按键,低电平有效 LVCMOS33 led[0] output H15 PL_LED0(底板) LVCMOS33 led[1] output L15 PL_LED1(底板) LVCMOS33 对应的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]}]

1.4 程序设计 由于发光二极管的阳极与ZYNQ的管脚相连,只需要改变与LED灯相连的ZYNQ管脚的电平,LED灯的亮灭状态就会发生变化。当ZYNQ管脚为高电平时,LED灯点亮;为低电平时,LED灯熄灭。 本次设计的模块端口及信号连接如下图所示: 在这里插入图片描述

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

1   module  led_twinkle(
2       input          sys_clk  ,  //系统时钟
3       input          sys_rst_n,  //系统复位,低电平有效
4   
5       output  [1:0]  led         //LED灯
6   );
7   
8   //reg define
9   reg  [25:0]  cnt ;
10  
11  //*****************************************************
12  //**                    main code
13  //*****************************************************
14  
15  //对计数器的值进行判断,以输出LED的状态
16  assign led = (cnt             
关注
打赏
1665308814
查看更多评论
0.0380s