直接上源码:

 module key_led(
input sys_clk , //50Mhz系统时钟
input sys_rst_n, //系统复位,低有效
input [:] key, //按键输入信号
output reg [:] led //LED输出信号
); //reg define
reg [:] cnt;
reg [:] led_control; //用于计数0.2s的计数器
always @ (posedge sys_clk or negedge sys_rst_n) begin
if(!sys_rst_n)
cnt<='d9_999_999;
else if(cnt<'d9_999_999)
cnt<=cnt+;
else
cnt<=;
end //用于led灯状态的选择
always @(posedge sys_clk or negedge sys_rst_n) begin
if (!sys_rst_n)
led_control <= 'b00;
else if(cnt == 'd9_999_999)
led_control <= led_control + 'b1;
else
led_control <= led_control;
end //识别按键,切换显示模式
always @(posedge sys_clk or negedge sys_rst_n) begin
if(!sys_rst_n) begin
led<='b 0000;
end
else if(key[]== ) //按键1按下时,从右向左的流水灯效果
case (led_control)
'b00 : led<=4'b1000;
'b01 : led<=4'b0100;
'b10 : led<=4'b0010;
'b11 : led<=4'b0001;
default : led<='b0000;
endcase
else if (key[]==) //按键2按下时,从左向右的流水灯效果
case (led_control)
'b00 : led<=4'b0001;
'b01 : led<=4'b0010;
'b10 : led<=4'b0100;
'b11 : led<=4'b1000;
default : led<='b0000;
endcase
else if (key[]==) //按键3按下时,LED闪烁
case (led_control)
'b00 : led<=4'b1111;
'b01 : led<=4'b0000;
'b10 : led<=4'b1111;
'b11 : led<=4'b0000;
default : led<='b0000;
endcase
else if (key[]==) //按键4按下时,LED全亮
led='b1111;
else
led<='b0000; //无按键按下时,LED熄灭
end endmodule

  这个代码注释很清晰。

  从这个例子能看出,代码中三个always控制的句子功能都是判断是重新复位了,还是来得时晶振的高电平。就是判断是重新工作还是,正常工作着。并列执行:1. 计数器 +1 ; 2. 如果到了0.2s,则更改一次 led 状态;3. 按键 x 按下,则调用相应的流水灯。其实这个流水灯是0.2s改变led状态个改变的,每一个case下面有四个句子,一次进入只能执行一个。0.2s后执行下一个,形成流水灯。

  本例子和前一个在计数器计数部分,差了1,其实无所谓,时间很少,但是精确地说应该是计数到 24'd1000_0000 时,正好是到0.2s。16行应该写成 :

  else if(cnt<24'd9_999_999)

  上面的case代码相当于C语言的switch-case,写成C语言如下:

 switch(led_control)
{
case :
led = 0x8;
........................
default :
led = 0x0;
}

FPGA——按键(二)的更多相关文章

  1. FPGA按键去抖verilog代码

    按键去抖的原因及其分类就不罗嗦了. 在这里解释一段代码,代码是网上找的,看了半天没懂,无奈查了半天想了半天,终于明白了... module sw_debounce(clk,rst_n,sw1,sw2, ...

  2. 【FPGA篇章二】FPGA开发流程:详述每一环节的物理含义和实现目标

    欢迎大家关注我的微信公众账号,支持程序媛写出更多优秀的文章 FPGA的开发流程是遵循着ASIC的开发流程发展的,发展到目前为止,FPGA的开发流程总体按照下图进行,有些步骤可能由于其在当前项目中的条件 ...

  3. C++自定义修饰键,实现如<Capslock+J>等组合键的按键映射

    前:所谓修饰键,就是Ctrl,Alt,Shift,Win这些按键. Update: 我使用AHK写了一个功能更丰富的脚本:https://github.com/h46incon/ModifierCus ...

  4. FPGA开发流程1(详述每一环节的物理含义和实现目标)

    要知道,要把一件事情做好,不管是做哪们技术还是办什么手续,明白这个事情的流程非常关键,它决定了这件事情的顺利进行与否.同样,我们学习FPGA开发数字系统这个技术,先撇开使用这个技术的基础编程语言的具体 ...

  5. FPGA开发流程

    需求说明:Verilog设计 内容       :FPGA开发基本流程及注意事项 来自       :时间的诗 原文来自:http://www.dzsc.com/data/2015-3-16/1080 ...

  6. 【资料下载区】【iCore3相关代码、资料下载地址】更新日期2017/1/5

    [iCore3 ARM代码下载地址][全部]DEMO1.0测试程序发布例程一:ARM驱动三色LED例程二:读取arm按键状态例程三:EXTI中断输入实验——读取ARM按键状态例程四:USART通信实验 ...

  7. 【资料下载区】【iCore4相关代码、资料下载地址】更新日期2018/02/24

    [iCore4相关文档][更新中...] iCore4原理图(PDF)下载iCore4引脚注释(PDF)下载iCore4机械尺寸(PDF)下载 [iCore4相关例程代码][ARM] DEMO测试程序 ...

  8. jQuery监听键盘事件及相关操作使用教程

    一.首先需要知道的是: 1.keydown() keydown事件会在键盘按下时触发. 2.keyup() keyup事件会在按键释放时触发,也就是你按下键盘起来后的事件 3.keypress() k ...

  9. javascript/jquery键盘事件介绍

    一.首先需要知道的是:1.keydown()keydown事件会在键盘按下时触发.2.keyup()keyup事件会在按键释放时触发,也就是你按下键盘起来后的事件3.keypress()keypres ...

随机推荐

  1. ssh_exchange_identification: read: Connection reset by peer

    vim /etc/hosts.deny 删除ip 借鉴:https://www.sunnyos.com/article-show-81.html

  2. js练习

    /** * Created by bianxiaoling on 2018/9/7. */ // 获取 url 中的参数 // 1. 指定参数名称,返回该参数的值 或者 空字符串 // 2. 不指定参 ...

  3. Centos搭建NFS服务及客户端访问

    一.环境介绍 NFS服务端:192.168.200.101 NFS客户端:192.168.200.102 二.服务器端安装配置 1.查看rpcbind和nfs-utils安装包是否安装 [root@b ...

  4. Flagr 配置说明

    说明文档来自官方文档 https://checkr.github.io/flagr/#/flagr_env 完整配置 包含了组件的配置参数以及说明,对于学习如何使用Flagr 还是很重要的,包含了数据 ...

  5. 20175202 《Java程序设计》第八周学习总结

    20175202 2018-2019-2 <Java程序设计>第八周学习总结 教材知识点总结 1.泛型: 主要目的是可以建立具有类型安全的集合框架,如链表.散列映射等数据结构. 泛型类的声 ...

  6. C#版微信公众号支付|微信H5支付|微信扫码支付问题汇总及解决方案总结

    最近负责的一些项目开发,都用到了微信支付(微信公众号支付.微信H5支付.微信扫码支付).在开发的过程中,在调试支付的过程中,或多或少都遇到了一些问题,今天总结下,分享,留存.代码在文章结尾处,有需要的 ...

  7. Unity3D外包 团队更新一下UE4和Unity3D案例

    欢迎联系我们索取,谢谢! 有项目外包请联系QQ:372900288 索取案例.

  8. jenkins 构建完毕后接着构建另外一个构建的方法

  9. mysql通过now()获取的时间不对

    先用now()获取系统时间,发现时间不对(差8个小时): mysql> select now(); +---------------------+ | now() | +------------ ...

  10. SQL FOR JSON PATH 返回 json

    --直接返回 age FOR JSON PATH --返回值 [{"name":"张学友","age":60}] select c1, c2 ...