FPGA——按键(二)
直接上源码:
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——按键(二)的更多相关文章
- FPGA按键去抖verilog代码
按键去抖的原因及其分类就不罗嗦了. 在这里解释一段代码,代码是网上找的,看了半天没懂,无奈查了半天想了半天,终于明白了... module sw_debounce(clk,rst_n,sw1,sw2, ...
- 【FPGA篇章二】FPGA开发流程:详述每一环节的物理含义和实现目标
欢迎大家关注我的微信公众账号,支持程序媛写出更多优秀的文章 FPGA的开发流程是遵循着ASIC的开发流程发展的,发展到目前为止,FPGA的开发流程总体按照下图进行,有些步骤可能由于其在当前项目中的条件 ...
- C++自定义修饰键,实现如<Capslock+J>等组合键的按键映射
前:所谓修饰键,就是Ctrl,Alt,Shift,Win这些按键. Update: 我使用AHK写了一个功能更丰富的脚本:https://github.com/h46incon/ModifierCus ...
- FPGA开发流程1(详述每一环节的物理含义和实现目标)
要知道,要把一件事情做好,不管是做哪们技术还是办什么手续,明白这个事情的流程非常关键,它决定了这件事情的顺利进行与否.同样,我们学习FPGA开发数字系统这个技术,先撇开使用这个技术的基础编程语言的具体 ...
- FPGA开发流程
需求说明:Verilog设计 内容 :FPGA开发基本流程及注意事项 来自 :时间的诗 原文来自:http://www.dzsc.com/data/2015-3-16/1080 ...
- 【资料下载区】【iCore3相关代码、资料下载地址】更新日期2017/1/5
[iCore3 ARM代码下载地址][全部]DEMO1.0测试程序发布例程一:ARM驱动三色LED例程二:读取arm按键状态例程三:EXTI中断输入实验——读取ARM按键状态例程四:USART通信实验 ...
- 【资料下载区】【iCore4相关代码、资料下载地址】更新日期2018/02/24
[iCore4相关文档][更新中...] iCore4原理图(PDF)下载iCore4引脚注释(PDF)下载iCore4机械尺寸(PDF)下载 [iCore4相关例程代码][ARM] DEMO测试程序 ...
- jQuery监听键盘事件及相关操作使用教程
一.首先需要知道的是: 1.keydown() keydown事件会在键盘按下时触发. 2.keyup() keyup事件会在按键释放时触发,也就是你按下键盘起来后的事件 3.keypress() k ...
- javascript/jquery键盘事件介绍
一.首先需要知道的是:1.keydown()keydown事件会在键盘按下时触发.2.keyup()keyup事件会在按键释放时触发,也就是你按下键盘起来后的事件3.keypress()keypres ...
随机推荐
- mac下 部分服务启动,结束, 查看状态的命令
以sshd服务为例 启动sshd服务:sudo launchctl load -w /System/Library/LaunchDaemons/ssh.plist 停止sshd服务:sudo laun ...
- 17. Debuggers (调试器 5个)
反编译是安全研究的重要组成部分. 它将帮助您解剖Microsoft补丁,以发现他们无法告诉您的默认修复的错误,或更仔细地检查服务器二进制文件以确定为什么您的漏洞利用不起作用. 许多调试器都可用,但ID ...
- AntV G6绘制流程图学习例子
下面代码可以直接贴到html文件中运行看效果. 代码说明 js中data是一个json变量,里面有两个关键对象"nodes.edges",分别来描述节点.节点间箭线. 更多&quo ...
- DevExpress 控件汉化代码和使用方法
DevExpress 第三方控件汉化的全部代码和使用方法 DevExpress.XtraEditors.Controls 此控件包中包含的控件最多,包括文本框,下拉列表,按钮,等等 ...
- Http数据协商
一.定义: 客户端发送给服务端请求的时候,声明拿到的数据格式以及相关的限制.服务端根据请求做出判断,返回相应的数据. 二.分类 1.请求 Accept : 想要的的数据类型 Accept-Encodi ...
- reset Cisco 2960 password
详见:http://www.cahilig.net/2014/04/14/how-reset-cisco-2960-switch-password-without-losing-your-config ...
- ActiveMQ (二)—发布订阅模式
ActiveMQ的另一种模式就SUB/HUB即发布订阅模式,是SUB/hub就是一拖N的USB分线器的意思.意思就是一个来源分到N个出口.还是上节的例子,当一个订单产生后,后台N个系统需要联动,但有一 ...
- MySQL报错ERROR 1558 (HY000): Column count of mysql.user is wrong.
MySQL报错ERROR 1558 (HY000): Column count of mysql.user is wrong. 1.今天在使用MySQL创建数据库时出现如下报错: mysql> ...
- 使用COM打开Excel文档注意事项
本文主要讲解程序中打开Excel文档,读写Excel文档可以参照前章: C#读写Excel实践笔记 C#使用NPOI读写Excel的注意事项 如果只是单纯的打开Excel文档,建议使用: System ...
- IE6设置li的float:left,不能自适应宽的解决方法
原文地址:https://blog.csdn.net/u012299002/article/details/50589453 做个divcss页面,发现在IE6下,设置了li的float:left,L ...