直接上源码:

 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. Linux 配置SSH免密登陆

    1.在hadoop01服务器上 通过ssh -keygen 生成公私钥  [ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa] 2.把公钥给hadoop02服务器 3. ...

  2. servlet中的request和response

    request对象 1.什么是请求 a.浏览器向服务器发送数据就是请求. 一.request功能1--获取数据 1.获取浏览器相关的信息 getRequestURL方法 -- 返回客户端发出请求完整U ...

  3. Day 22 初识面向对象

    一.两种编程思想 1.面向过程编程 核心是'过程',过程指的是解决问题的步骤,就是先干什么再干什么 基于面向过程思想编写程序相当于写一条流水线,是一种机械式的思维方式 优点:解决问题的思路清晰,可以把 ...

  4. IntelliJ IDEA 下载安装以及破解

    转载自:http://blog.csdn.net/my_jack/article/details/69248495 IDEA开发工具是java语言开发的集成环境,IntelliJ在业界被公认为最好的j ...

  5. mongodb url

    https://blog.csdn.net/jianlong727/article/details/53484440

  6. Open Source 开发工具集

    Open Source 开发工具集 转自:http://www.linuxforum.net原作者:gogoliu(Pooh-Bah) 编辑器: vi:老牌编辑器,在各个unix和unix-like平 ...

  7. C# .NET XML 序列化为对象,反序列化

    如果遇到:   根级别上的数据无效. 行 1,位置 1   .:即无法反序列化(反序列失败),得到对象为null ,把 xml 文本 Trim一下. xml=xml.Trim(); 序列化完毕你可以看 ...

  8. Win32-Application的窗口和对话框

    Win32 Application,没有基于MFC的类库,而是直接调用C++接口来编程. 一.弹出消息窗口 (1)最简单的,在当前窗口中弹出新窗口.新窗口只有“YES”按钮. int APIENTRY ...

  9. RN 的页面布局

    从 https://blog.csdn.net/liangzelei/article/details/53965417转载 React Native布局详细指南  https://www.jiansh ...

  10. 从容器里dump java堆实验探索(原创)

    目标:从docker容器里dump java堆 模拟程序 占用空间500M, 设置启动JVM参数 docker启动命令 (PS:经过测试,至少要650M才能启动容器) 方式1: 通过docker ex ...