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

正点原子

暂无认证

  • 4浏览

    0关注

    382博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

【正点原子FPGA连载】第九章按键控制LED灯实验 -摘自【正点原子】新起点之FPGA开发指南_V2.1

正点原子 发布时间:2021-10-22 10:41:00 ,浏览量:4

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

第九章按键控制LED灯实验

按键是常用的一种控制器件。生活中我们可以见到各种形式的按键,由于其结构简单,成本低廉等特点,在家电、数码产品、玩具等方面有广泛的应用。本章我们将介绍如何使用按键控制多个LED的亮灭。 本章包括以下几个部分

99.1简介 9.2实验任务 9.3硬件设计 9.4程序设计 9.5下载验证

9.1简介 按键开关是一种电子开关,属于电子元器件类。我们的开发板上有两种按键开关:第一种是本实验所使用的轻触式按键开关(如图 9.1.1),简称轻触开关。使用时以向开关的操作方向施加压力使内部电路闭合接通,当撤销压力时开关断开,其内部结构是靠金属弹片受力后发生形变来实现通断的;第二种是自锁按键(如图 9.1.2),自锁按键第一次按下后保持接通,即自锁,第二次按下后,开关断开,同时开关按钮弹出来,开发板上的电源键就是这种开关。 在这里插入图片描述

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

图 9.1.2 自锁式按键 9.2实验任务 使用新起点开发板上的四个按键控制四个LED灯。不同按键按下时,四个LED灯显示不同效果。 9.3硬件设计 如图 9.3.1所示,本实验使用四个按键开关控制四个LED灯。 在这里插入图片描述

图 9.3.1 按键电路原理图 如上图所示,开发板上的5个按键未按下时,输出高电平,按下后,输出低电平。 本实验中,系统时钟、复位按键、按键和LED灯的管脚如下表所示。 表 9.3.1 触摸按键控制LED管脚分配图 在这里插入图片描述

对应的TCL约束文件如下: set_location_assignment PIN_M2 -to sys_clk set_location_assignment PIN_M1 -to sys_rst_n set_location_assignment PIN_E16 -to key[0] set_location_assignment PIN_E15 -to key[1] set_location_assignment PIN_M15 -to key[2] set_location_assignment PIN_M16 -to key[3] set_location_assignment PIN_D11 -to led[0] set_location_assignment PIN_C11 -to led[1] set_location_assignment PIN_E10 -to led[2] set_location_assignment PIN_F9 -to led[3] 9.4程序设计 我们程序设计最终实现的效果为:无按键按下时,LED灯全灭;按键1按下时,LED灯显示自右向左的流水效果;按键2按下时,LED灯显示自左向右的流水效果;按键3按下时,四个LED灯同时闪烁;按键4按下时,LED灯全亮。 LED在流水效果和闪烁效果在时间间隔均为0.2秒,因此需要在程序中定义一个0.2s的计数器,即每隔0.2s,状态计数器加一。根据当前按键的状态选择不同的显示模式,不同的显示模式下四个led灯的亮灭随状态计数器的值改变,从而呈现出不同的显示效果。 在这里插入图片描述

图 9.4.1 系统框图 按键控制led模块的代码如下所示:

1   module key_led(
2       input               sys_clk  ,    //50Mhz系统时钟
3       input               sys_rst_n,    //系统复位,低有效
4       input        [3:0]  key,          //按键输入信号
5       output  reg  [3:0]  led           //LED输出信号
6       );
7   
8   //reg define     
9   reg  [23:0] cnt;
10  reg  [1:0]  led_control;
11  
12  //用于计数0.2s的计数器
13  always @ (posedge sys_clk or negedge sys_rst_n) begin
14      if(!sys_rst_n)
15          cnt            
关注
打赏
1665308814
查看更多评论
0.0589s