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

这篇具有很好参考价值的文章主要介绍了verilog学习笔记- 10)按键控制 LED 灯实验。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

简介:

实验任务:

硬件设计:

程序设计:

下载验证 :

总结与反思:


简介:

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

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

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

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


实验任务:

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


硬件设计:

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

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

本实验中,系统时钟、复位按键、按键和 LED 灯的管脚如下表所示。

verilog学习笔记- 10)按键控制 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 灯的亮灭随状态计数器的值改变,从而呈现出不同的显示效果。

verilog学习笔记- 10)按键控制 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

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


下载验证 :

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

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

 功能正常

总结与反思:

本次LED实验学到了KEY按键的使用,本次实验的缺点在于需要一直按下按键才能有正常的功能,应该设置一个标志位进行状态的切换比较好文章来源地址https://www.toymoban.com/news/detail-415312.html

到了这里,关于verilog学习笔记- 10)按键控制 LED 灯实验的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 按键控制LED闪烁实验

    实验任务: 本节实验任务是使用底板上的PL_KEY0和PL_KEY1按键来控制底板上的PL_LED0和PL_LED1两个LED的闪烁方式。没有按键按下时,两个LED保持常亮;如果按键0按下,则两个LED交替闪烁;如果按键1按下,则两个LED同时闪烁。 模块示意图:   模块代码实现: modulekey_led( input     

    2024年02月04日
    浏览(43)
  • 按键控制 LED 实验

    目录 1 按键简介 2 实验任务 3 硬件设计 4 程序设计 5 下载验证         按键开关是一种电子开关,属于电子元器件类。         轻触式按键         自锁式按键         使用底板上的 PL_KEY0 和 PL_KEY1 按键来控制底板上的 PL_LED0 和 PL_LED1 两个 LED 的闪烁方式。没有

    2024年02月11日
    浏览(38)
  • 【stm32----按键中断实验,按键控制LED灯】

    1、按下KEY1,LED1亮,再次按下KEY1,LED1灭; 2、按下KEY2,LED2亮,再次按下KEY2,LED2灭; 3、按下KEY3,LED3亮,再次按下KEY3,LED3灭; 一、头文件 1、gpio.h 2、key.h 二、初始化函数及功能函数 1、gpio.c 2、key.c 三、中断处理函数 do_irq.c 四、主函数 main.c 依次按下key3、key2、key1、key2

    2024年02月04日
    浏览(50)
  • 【stm32】hal库学习笔记-GPIO按键控制LED和蜂鸣器(超详细!)

    注:本学习笔记基于stm32f4系列 使用的开发板为正点原子stmf407ZGT6探索者开发板 GPIO引脚使用时,可输入或输出数字信号 例如: 检测按键输入信号(Read_Pin)输出信号(Write_Pin) 输出信号点亮或熄灭LED GPIO引脚内部结构图 GPIO状态 输入浮空状态 :上拉下拉电阻均不使用(复位时

    2024年01月20日
    浏览(49)
  • 驱动——按键中断控制LED灯实验

    要求:按键按一下灯亮,再按一下灯灭 注:由于开发板位置,为了方便一一对应观察,采用key1控制LED3,key2控制LED2,key3控制LED1 0、添加相关设备树节点信息 ①按键相关引脚,通过原理图可得: key1------gpiof9; key2------gpiof7; key3------gpiof8 ②LED灯相关引脚: led1-----gpioe10; led2---

    2023年04月18日
    浏览(37)
  • 单片机实验三 独立按键控制LED实验

    1.熟悉实验软件和硬件,进行正确的接线; 2.8个不同的按键对应不同的8个灯,按下按键对应的灯就会亮。 1.Keil uVision4 2.PZISP自动下载软件 3.HC6800S开发板 按键实物图 按键按下就会产生一个脉冲信号,检测脉冲信号就可以知道是否有按键被按下去。 按键原理图 按键之间相互独

    2024年02月08日
    浏览(40)
  • LED灯闪烁拓展实验——单按键控制LED灯不同闪烁方式

    实现平台:Vivado2018.3 1. 使用按键KEY0和KEY_1分别控制LED0和LED1两个LED灯的闪烁方式; 2. 当没有按键按下时,两个LED灯均不亮; 3. 当按键KEY0按下后,LED0灯闪烁,当按键KEY0再次按下后则LED1灯闪烁,如此循环往复; 4. 当按键KEY1按下后,LED0和LED1交替闪烁,当按键KEY1再次按下后则

    2024年01月23日
    浏览(39)
  • 【STM32】按键控制LED亮灭实验——GPIO、LED、KEY、SYS

    无锁存时:当按下独立按钮时LED亮,松开LED灭。 锁存时:当按下独立按钮时LED亮,松开LED仍亮,再按下独立按钮时LED熄灭。 硬件部分 软件部分 1、引入头文件 2、主函数 首先时钟、led、按键初始化 锁存时:当按下独立按钮时LED亮,松开LED仍亮,再按下独立按钮时LED熄灭。常

    2024年02月08日
    浏览(95)
  • 【STM32】控制LED灯和蜂鸣器的按键实验

    🐱作者:一只大喵咪1201 🐱专栏:《STM32学习》 🔥格言: 你只管努力,剩下的交给时间! 本喵这次介绍的实验是按键实验,同样使用STM32F103ZE型号的芯片,在开发板上有4个按键,实验目的是每按一个按键就会让LED灯或者是蜂鸣器的工作状态发生反转,下面本喵来详细介绍。

    2024年02月03日
    浏览(55)
  • FPGA学习——按键控制LED流水灯(附源码 无按键消抖版本)

    在博主的cyclone4开发板上一共有4个按键,本次实验的目的是为了实现每按下一次按键,都会使开发板上的4个LED灯切换一次状态,博主一共设计了四种状态,分别是: 按键 状态 按键1按下 自右向左的流水灯 按键2按下 自左向右的流水灯 按键3按下 四灯常亮 按键4按下 四灯闪烁

    2024年02月06日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包