目录

简介:

实验任务:

硬件设计:

程序设计:

下载验证 :

总结与反思:


简介:

按键开关是一种电子开关,属于电子元器件类。我们的开发板上有两种按键开关:第一种是本实验所使用的轻触式按键开关,使用时以向开关的操作方向施加压力使内部电路闭合接通,当撤销压力时开关断开,其内部结构是靠金属弹片受力后发生形变来实现通断的

第二种是自锁按键,自锁按键第一次按下后保持接通,即自锁,第二次按下后,开关断开,同时开关按钮弹出来,开发板上的电源键就是这种开关


实验任务:

使用新起点开发板上的四个按键控制四个 LED 灯。不同按键按下时,四个 LED 灯显示不同效果。


硬件设计:

如上图所示,开发板上的 5 个按键未按下时,输出高电平,按下后,输出低电平。

本实验中,系统时钟、复位按键、按键和 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]

程序设计:

我们程序设计最终实现的效果为:无按键按下时,LED 灯全灭;按键 1 按下时,LED 灯显示自右向左的流水效果;按键 2 按下时,LED 灯显示自左向右的流水效果;按键 3 按下时,四个 LED 灯同时闪烁;按键 4 按下时,LED 灯全亮。

LED 在流水效果和闪烁效果在时间间隔均为 0.2 秒,因此需要在程序中定义一个 0.2s 的计数器,即每隔 0.2s,状态计数器加一。根据当前按键的状态选择不同的显示模式,不同的显示模式下四个 led 灯的亮灭随状态计数器的值改变,从而呈现出不同的显示效果。

按键控制 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<=24'd9_999_999;
16 else if(cnt<24'd9_999_999)
17 cnt<=cnt+1;
18 else
19 cnt<=0;
20 end
21
22 //用于 led 灯状态的选择
23 always @(posedge sys_clk or negedge sys_rst_n) begin
24 if (!sys_rst_n)
25 led_control <= 2'b00;
26 else if(cnt == 24'd9_999_999)
27 led_control <= led_control + 1'b1;
28 else
29 led_control <= led_control;
30 end
31
32 //识别按键,切换显示模式
33 always @(posedge sys_clk or negedge sys_rst_n) begin
34 if(!sys_rst_n) begin
35 led<=4'b 0000;
36 end
37 else if(key[0]== 0) //按键 1 按下时,从右向左的流水灯效果
38 case (led_control)
39 2'b00 : led<=4'b1000;
40 2'b01 : led<=4'b0100;
41 2'b10 : led<=4'b0010;
42 2'b11 : led<=4'b0001;
43 default : led<=4'b0000;
44 endcase
45 else if (key[1]==0) //按键 2 按下时,从左向右的流水灯效果
46 case (led_control)
47 2'b00 : led<=4'b0001;
48 2'b01 : led<=4'b0010;
49 2'b10 : led<=4'b0100;
50 2'b11 : led<=4'b1000;
51 default : led<=4'b0000;
52 endcase
53 else if (key[2]==0) //按键 3 按下时,LED 闪烁
54 case (led_control)
55 2'b00 : led<=4'b1111;
56 2'b01 : led<=4'b0000;
57 2'b10 : led<=4'b1111;
58 2'b11 : led<=4'b0000;
59 default : led<=4'b0000;
60 endcase
61 else if (key[3]==0) //按键 4 按下时,LED 全亮
62 led=4'b1111;
63 else
64 led<=4'b0000; //无按键按下时,LED 熄灭
65 end
66
67 endmodule

该代码分为三个模块:

第 12 至 20 行对系统时钟计数,当计数时间达 0.2s 时,计数器清零,是一个产生0.2s模块

第 22 至 30 行对LED灯的状态四个状态(00,01,10,11)内依次变化

第 32 至 64 行对每种情况下LED的闪烁模式进行了四种不同的定义,并且按下按键切换模式

Testbench 模块代码如下:

1 `timescale 1 ns/ 1 ns
2 module tb_key_led();
3
4 parameter T = 20;
5
6 reg [3:0] key ;
7 reg sys_clk ;
8 reg sys_rst_n;
9
10 wire [3:0] led;
11
12 initial begin
13 key <=4'b1111;//按键初始状态为全断开
14 sys_clk <=1'b0; //初始时钟为低电平
15 sys_rst_n <=1'b0; //复位信号初始为低电平
16 #T sys_rst_n <=1'b1; //一个时钟周期后复位信号拉高
17
18 #600_000_020 key[0] <=0; //0.6s 时按下按键 1
19 #800_000_000 key[0] <=1;
20 key[1] <=0; //0.8s 后松开按键 1,按下按键 2
21 #800_000_000 key[1] <=1;
22 key[2] <=0; //0.8s 后松开按键 2,按下按键 3
23 #800_000_000 key[2] <=1;
24 key[3] <=0; //0.8s 后松开按键 3,按下按键 4
25 #800_000_000 key[3] <=1; //0.8s 后松开按键 4
26
27 end
28
29 always # (T/2) sys_clk <= ~sys_clk;
30 key_led u_key_led(
31 .sys_clk(sys_clk),
32 .sys_rst_n(sys_rst_n),
33 .key(key),
34 .led(led)
35 );
36
37 endmodule


下载验证 :

功能正常

总结与反思:

本次LED实验学到了KEY按键的使用,本次实验的缺点在于需要一直按下按键才能有正常的功能,应该设置一个标志位进行状态的切换比较好

verilog学习笔记- 10)按键控制 LED 灯实验相关推荐

  1. verilog学习笔记- 12)触摸按键控制LED灯实验

    目录 简介: 实验任务: 硬件设计: 程序设计: 下载验证: 简介: 触摸按键主要可分为四大类:电阻式.电容式.红外感应式以及表面声波式.根据其属性的不同,每种触摸按键都有其合适的使用领域. 电阻式触 ...

  2. led计数电路实验报告_「正点原子FPGA连载」第八章 按键控制LED灯实验

    1)实验平台:正点原子开拓者FPGA开发板 2)本实例源码下载:请移步正点原子官网 第八章 按键控制LED灯实验 按键是常用的一种控制器件.生活中我们可以见到各种形式的按键,由于其结构简单,成本低廉等 ...

  3. 米思齐按键控制LED灯

    按键控制LED灯实验2 代码如下: volatile int BUTTON; volatile int LED; volatile boolean state; void setup(){ pinMo ...

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

    1)实验平台:正点原子领航者ZYNQ开发板 2)平台购买地址:https://item.taobao.com/item.htm?&id=606160108761 3)全套实验源码+手册+视频下 ...

  5. 嵌入式学习笔记——寄存器实现控制LED小灯

    文章目录 前言 GPIO通用输出模式 初始化LED小灯的GPIO 原理图 初始化代码 初始化的效果 功能函数封装 直接分开宏定义两个 使用条件运算符 封装函数实现简单的功能 KEIL MDK一些技巧 ...

  6. 基于Verilog的按键控制LED灯

    按键控制LED灯 原理图 程序设计 `timescale 1ns / 1psmodule key_led( input sys_clk, input sys_rst_n, input [3:0] ke ...

  7. 记录1——stm32f411CEU6之点亮一盏LED灯+按键控制LED灯

    文章目录 前言 一.准备工作 二.点亮一盏LED灯 1.配置工程 2.代码实现 3.程序烧录注意 三.按键控制LED灯 1.配置工程 2.代码实现 按键控制 按键进阶1: 按键进阶2 3.基于自己理解 ...

  8. 【tiny4412】按键控制led灯亮灭

    前言:使用友善之臂tiny4412进行嵌入式学习,对于初学者而言并不是一件轻松事情,即使该平台已经存在很多年,网上也有很多分享,但由于官方文档相对还是不够全面,导致很多初学者遇到问题不知如何下手,如果 ...

  9. FPGA:基础入门按键控制LED灯

    题目概述: 使用按键控制LED灯亮灭. 无按键按下--LED全灭 按下KEYO--从右向左的流水灯效果 按下KEY1--从左向右的流水灯效果 按下KEY2--LED闪烁 按下KEY3--LED全亮 编 ...

最新文章

  1. 14 集成测试方法之自底向上集成方法
  2. 【Unity/Kinect】获取预制的手势信息KinectInterop.HandState
  3. rgb cmyk lab的区别
  4. java矩阵连乘算法_使用java写的矩阵乘法实例(Strassen算法)
  5. CSS display属性的值及作用
  6. 黑盒测试 ------ 等价类划分法
  7. html字颜色代码,css 字体颜色(css color)
  8. mysql某个表被行锁了_一文搞懂MySQL行锁、表锁、间隙锁详解
  9. 记录es几个问题,增删改查,索引创建
  10. nginx启动vue_Docker部署前端Vue
  11. sklearn 手写体识别
  12. 云计算是商业模式创新而非技术创新
  13. android回溯机制,Android事件分发机制全面解析
  14. linux输入文件后clustalw,合并提取后的domain序列之后,linux系统中的clustalw不能读出蛋白信息...
  15. 七千年来被国人误解的七句古话
  16. 读《万一针》老中医万方琴五十年针灸心得
  17. 《经济半小时》 20130906 指尖上的商机(五)数据时代
  18. Python - 列联表的独立性检验(卡方检验)
  19. 【好书推荐】第一本无人驾驶技术书
  20. 无法启动MySQL服务,提示“错误1069,由于登录失败而无法启动服务”

热门文章

  1. c、c++中的字符输入
  2. 恒压供水全套 海利普变频器 恒压供水 海利普变频器
  3. 使用JDBC连接数据库的几种方法
  4. Burp Suite 常用模块简介
  5. Matplotlib 数据可视化(读书笔记)
  6. 【每日一题】 1319. 连通网络的操作次数
  7. 硬件追捕 v1.3 官网
  8. AC米兰战后的队长们
  9. PySpark ML(转换器)
  10. 第三代酷睿i3处理器_10nm+新架构+Iris Plus核显 第十代酷睿到底有多强?