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

正点原子

暂无认证

  • 0浏览

    0关注

    382博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

【正点原子FPGA连载】第九章 按键控制LED实验 -摘自【正点原子】领航者ZYNQ之FPGA开发指南_V2.0

正点原子 发布时间:2021-12-30 18:01:42 ,浏览量: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闪烁的方式。 本章包括以下几个部分: 9.1 按键简介 9.2 实验任务 9.3 硬件设计 9.4 程序设计 9.5 下载验证   9.1 按键简介 按键开关是一种电子开关,属于电子元器件类。我们的开发板上有两种按键开关:第一种是本实验所使用的轻触式按键开关(如图 7.5.13.1),简称轻触开关。使用时以向开关的操作方向施加压力使内部电路闭合接通,当撤销压力时开关断开,其内部结构是靠金属弹片受力后发生形变来实现通断的;第二种是自锁按键(如图 7.5.13.2),自锁按键第一次按下后保持接通,即自锁,第二次按下后,开关断开,同时开关按钮弹出来,开发板上的电源键就是这种开关。 在这里插入图片描述

图 7.5.13.1 轻触式按键 在这里插入图片描述

图 7.5.13.2 自锁式按键 9.2 实验任务 本节实验任务是使用底板上的PL_KEY0和PL_KEY1按键来控制底板上的PL_LED0和PL_LED1两个LED的闪烁方式。没有按键按下时,两个LED保持常亮;如果按键0按下,则两个LED交替闪烁;如果按键1按下,则两个LED同时闪烁。 9.3 硬件设计 底板上按键的原理图如下图所示: 在这里插入图片描述

图 7.5.13.1 按键电路原理图 在图 7.5.13.1中,PL_KEY0和PL_KEY1连接到ZYNQ的PL端,PS_KEY0和PS_KEY1连接到ZYNQ的PS端。在《领航者ZYNQ之FPGA开发指南》中,我们只使用PL端的外设。 PL端的按键没有按下时,对应的IO端口为高电平;当按键按下时,对应的IO端口变为低电平。 本实验的管脚分配如下表所示: 表 9.3.1 按键控制LED实验管脚分配 信号名 方向 管脚 端口说明 电平标准 sys_clk input U18 系统时钟,50M LVCMOS33 sys_rst_n input N16 PL复位按键,低有效 LVCMOS33

key[0]	input	L14	PL按键0	LVCMOS33
key[1]	input	K16	PL按键1	LVCMOS33
led[0]	output	H15	PL LED 0	LVCMOS33
led[1]	output	L15	PL LED 0	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 L14 IOSTANDARD LVCMOS33} [get_ports key[0]] set_property -dict {PACKAGE_PIN K16 IOSTANDARD LVCMOS33} [get_ports key[1]] set_property -dict {PACKAGE_PIN H15 IOSTANDARD LVCMOS33} [get_ports {led[0]}] set_property -dict {PACKAGE_PIN L15 IOSTANDARD LVCMOS33} [get_ports {led[1]}] 9.4 程序设计 按键控制LED系统框图如下图所示: 在这里插入图片描述

图 7.5.13.1 按键控制LED系统框图 在图 7.5.13.1中,计数器对50MHz时钟进行计数,从而达到计时的目的。计数器在每次计时到0.5秒的时候,就改变LED的显示状态,然后清零并重新开始计数。 然后根据两个按键(KEY0和KEY1)的状态,在不同的LED状态下,分别设置LED的显示模式(是同时闪烁,或者交替闪烁)。

顶层模块代码如下:

1   module key_led(
2       input               sys_clk ,
3       input               sys_rst_n ,
4   
5       input        [1:0]  key ,
6       output  reg  [1:0]  led
7   );
8   
9   //reg define
10  reg [24:0] cnt;
11  reg        led_ctrl;
12  
13  //*****************************************************
14  //**                    main code
15  //*****************************************************
16  
17  //计数器
18  always @ (posedge sys_clk or negedge sys_rst_n) begin
19      if(!sys_rst_n)
20          cnt             
关注
打赏
1665308814
查看更多评论
0.0449s