直接上源码:

 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. IDEA远程连接Hadoop

    IDEA远程连接Hadoop Win 1.Hadoop配置 下载并配置到本地环境 HADOOP_HOME D:\Tools\hadoop-2.7.7\hadoop-2.7.7 HADOOP_PREFI ...

  2. Ubuntu 终端使用ss代理

    用polipo软件,这个软件可以吧socket5转换成http代理 $ sudo apt-get install polipo $ sudo vim /etc/polipo/config 在文件中加入 ...

  3. 宝塔linux面板 解决TP3.2 404

    在配置文件中加入一下配置: location / { if (!-e $request_filename) { rewrite ^/(.*)$ /index.php/$1; } } location ...

  4. JWT(JSON Web Token) 【转载】

    JWT(JSON Web Token) 什么叫JWTJSON Web Token(JWT)是目前最流行的跨域身份验证解决方案. 一般来说,互联网用户认证是这样子的. 1.用户向服务器发送用户名和密码. ...

  5. Hibernate运行原生sql并将查询的结果转化为对象

    原生SQL查询执行的控制是通过SQLQuery接口进行的,通过执行Session.createSQLQuery()获取这个接口.下面来描述如何使用这个API进行查询.标量查询(Scalar queri ...

  6. 将Json数据 填充到 实例类 的函数

    /// <summary> /// 将Json数据 填充到 实例类 /// </summary> /// <typeparam name="T"> ...

  7. MySQL 5.7版本 sql_mode=only_full_group_by 问题

    具体错误: SQLSTATE[42000]: Syntax error or access violation: 1055 Expression #1 of SELECT list is not in ...

  8. HTML 块级元素 行内元素

    块级元素 - block level element 总是在新行上开始: 高度,行高以及外边距和内边距都可控制: 宽度缺省是它的容器的100%,除非设定一个宽度: 它可以容纳内联元素和其他块元素 如: ...

  9. sql server 合并字段

    合并字段用+号连接就可以了,不过要判断是不是有的合并项为NULL.如果其中一项为NULL,则整个合并字段为NULL. (IsNull(a.supplier, '')  + IsNull(a.po, ' ...

  10. iOS安全系列之一:HTTPS

    如何打造一个安全的App?这是每一个移动开发者必须面对的问题.在移动App开发领域,开发工程师对于安全方面的考虑普遍比较欠缺,而由于iOS平台的封闭性,遭遇到的安全问题相比于Android来说要少得多 ...