FPGA学习——按键控制LED流水灯(附源码 无按键消抖版本)

news2024/12/25 9:05:53

文章目录

  • 一、前言
  • 二、开发板按键原理图
  • 三、源码
  • 四、实现效果

一、前言

在博主的cyclone4开发板上一共有4个按键,本次实验的目的是为了实现每按下一次按键,都会使开发板上的4个LED灯切换一次状态,博主一共设计了四种状态,分别是:

按键状态
按键1按下自右向左的流水灯
按键2按下自左向右的流水灯
按键3按下四灯常亮
按键4按下四灯闪烁

二、开发板按键原理图

在这里插入图片描述

  • 由原理图可以看出,开发板按键按下代表低电平

三、源码

在源码中博主设计了一个0.2s的计数器和两位的cstate状态寄存器,用来控制LED的状态及流水灯闪烁。同时可以看出博主设计了一个flag寄存器,由于本次实验未添加按键消抖模块,因此按键按下后需要一直按住才能实现效果,而引入flag后,我们便可以通过按键按下后一瞬间的电平改变从而改变flag的状态,再由flag的状态控制LED的状态,以此算是一种无按键消抖的平替。

module key_led (
    input   wire            clk,
    input   wire            rst_n,
    input   wire    [3:0]   key,

    output  reg     [3:0]   led
);
    parameter MAX = 10_000_000;
    reg [23:0]  cnt;
    reg [1:0]   cstate;
    reg [3:0]   flag;

//0.2s计数器
    always @(posedge clk or negedge rst_n) begin
        if(!rst_n)begin
            cnt <= 1'b0;
        end
        else if(cnt == MAX - 1'b1)begin
            cnt <= 1'b0;
        end
        else begin
            cnt <= cnt + 1'b1;
        end
    end

//状态控制 之所以不需要在状态计满后清零,是因为后续在计数至11后再加1值来到100
//而我们的状态设置为两位寄存器,因此只取后两位变为00,相当于清零
    always @(posedge clk or negedge rst_n)begin
        if(!rst_n)begin
            cstate <= 2'd0;
        end
        else if(cnt == MAX - 1'b1)begin
            cstate <= cstate + 1'b1;
        end
        else begin
            cstate <= cstate;
        end
    end
//根据按键状态改变flag状态
    always@(posedge clk or negedge rst_n)begin
        if(!rst_n)begin
            flag <= 4'b0000;
        end
        else if(key[0] == 1'b0)begin
            flag <= 4'b0001;
        end
        else if(key[1] == 1'b0)begin
            flag <= 4'b0010;
        end
        else if(key[2] == 1'b0)begin
            flag <= 4'b0100;
        end
        else if(key[3] == 1'b0)begin
            flag <= 4'b1000;
        end
        else begin
            flag <= flag;
        end
    end
//根据flag状态改变led状态
    always @(posedge clk or negedge rst_n)begin
        if(!rst_n)begin
            led <= 4'b0000;
        end
        else if(flag == 4'b0001)begin
            case (cstate)
               2'd0 : led <= 4'b0001;
               2'd1 : led <= 4'b0010;
               2'd2 : led <= 4'b0100;
               2'd3 : led <= 4'b1000;
                default: led <= 4'b0000;
            endcase
        end
        else if(flag == 4'b0010)begin
            case (cstate)
               2'd0 : led <= 4'b1000;
               2'd1 : led <= 4'b0100;
               2'd2 : led <= 4'b0010;
               2'd3 : led <= 4'b0001;
                default: led <= 4'b0000;
            endcase
        end
        else if(flag == 4'b0100)begin
            case (cstate)
               2'd0 : led <= 4'b1111;
               2'd1 : led <= 4'b0000;
               2'd2 : led <= 4'b1111;
               2'd3 : led <= 4'b0000;
                default: led <= 4'b0000;
            endcase
        end
        else if(flag == 4'b1000)begin
            case (cstate)
               2'd0 : led <= 4'b1111;
               2'd1 : led <= 4'b1111;
               2'd2 : led <= 4'b1111;
               2'd3 : led <= 4'b1111;
                default: led <= 4'b0000;
            endcase
        end
        else begin
            led <= 4'b0000;
        end
    end

endmodule

四、实现效果

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/745849.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

滴水逆向三期笔记与作业——02C语言——04 IF语句逆向分析下

OneNote防丢失。 海哥牛逼。 目录 一、if…else...反汇编1、反汇编特点2、案例分析 二、作业1三、IF...ELSE IF...ELSE IF..多分支语句1、多分支反汇编2、案例分析 四、作业2 一、if…else…反汇编 1、反汇编特点 2、案例分析 二、作业1 解&#xff1a; 分析图&#xff1a; 分…

【基于矢量射线的衍射积分 (VRBDI)】基于矢量射线的衍射积分 (VRBDI) 和仿真工具(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

前端开发中常见的20个数组方法,你掌握了几个?

文章目录 前言一、常见的数组方法1.1 push (将指定的元素添加到数组的末尾&#xff0c;并返回新的数组长度)1.2 pop (从数组中删除最后一个元素&#xff0c;并返回该元素的值)1.3 shift (从数组中删除第一个元素&#xff0c;并返回该元素的值)1.4 unshift (向数组首位添加一个或…

路径规划算法:基于鹈鹕优化的路径规划算法- 附代码

路径规划算法&#xff1a;基于鹈鹕优化的路径规划算法- 附代码 文章目录 路径规划算法&#xff1a;基于鹈鹕优化的路径规划算法- 附代码1.算法原理1.1 环境设定1.2 约束条件1.3 适应度函数 2.算法结果3.MATLAB代码4.参考文献 摘要&#xff1a;本文主要介绍利用智能优化算法鹈鹕…

VirtualBox单机版安装K8S+TF

本文参考自&#xff1a;kubernetes最新版安装单机版v1.21.5_kubernetes下载_qq759035366的博客-CSDN博客 只用一台VB虚拟机&#xff0c;装K8S加Tungsten Fabric。 0. 提前避坑&#xff1a; 0.1 Tungsten Fabric的VRouter对Linux内核版本有要求&#xff0c;以下内核版本才…

音视频——码率、帧率越高越清晰?分辨率、像素、dpi的关系

一 前言 本期我介绍一下视频的一些基础概念&#xff0c;如帧率、码率、分辨率、像素、dpi、视频帧、I帧、P帧、gop等。我i初步学习音视频&#xff0c;给这些专业词汇进行扫盲 会解释多少码率是清晰的&#xff0c;是否帧率越高越流畅等问题。 这些概念是比较杂乱的&#xff0c…

微信二维码登录,修改下面提示的字体和样式

背景 由于业务需要&#xff0c;需要把微信二维码下面默认的提示文字进行修改&#xff0c;如下图所示&#xff1a; 需要修改上面红色框内选择的字体&#xff0c;在研究的过程中&#xff0c;发现好多人都在查询这个问题&#xff0c;并且有些网友思路也是对的。可能只是方式没对。…

库存扣减设计和下单

这里写目录标题 前言正文库存设计原则常见库存扣减方案秒杀订单域设计整体服务领域模型领域服务领域事件之下单下单整体流程同步下单库存预扣减库存扣减 总结参考链接 前言 大家好&#xff0c;我是练习两年半的Java练习生&#xff0c;前面我们已经介绍了领域驱动和缓存设计&am…

路径规划算法:基于金豺优化的路径规划算法- 附代码

路径规划算法&#xff1a;基于金豺优化的路径规划算法- 附代码 文章目录 路径规划算法&#xff1a;基于金豺优化的路径规划算法- 附代码1.算法原理1.1 环境设定1.2 约束条件1.3 适应度函数 2.算法结果3.MATLAB代码4.参考文献 摘要&#xff1a;本文主要介绍利用智能优化算法金豺…

【网络编程】应用层协议——HTTPS协议(数据的加密与解密)

文章目录 一、HTTP协议的缺陷二、HTTPS协议的介绍三、加密与解密3.1 加密与解密流程3.2 为什么要加密和解密3.3 常见的加密方式3.3.1 对称加密3.3.2 非对称加密3.3.3 数据摘要&#xff08;数据指纹&#xff09;3.3.4 数据签名 四、HTTPS工作过程4.1 中间人攻击方式4.2 数字证书…

50行PyTorch代码中的生成对抗网络(GAN)

一、说明 2014年,蒙特利尔大学的伊恩古德费罗(Ian Goodfellow)和他的同事发表了一篇令人惊叹的论文,向世界介绍了GANs或生成对抗网络。通过计算图和博弈论的创新组合,他们表明,如果有足够的建模能力,相互竞争的两个模型将能够通过普通的旧反向传播进行共同训练。 二、原…

大学啥也没有学到,跑到培训班里学技术,真的有用吗-以下来自一位认识的朋友投稿-王大师

在学习IT技术的过程中&#xff0c;你是否也被安利过各种五花八门的技术培训班&#xff1f;这些培训班都是怎样向你宣传的&#xff0c;你又对此抱有着怎样的态度呢&#xff1f;在培训班里学技术&#xff0c;真的有用吗&#xff1f;–王大师告诉你 1、掌握 JAVA入门到进阶知识(持…

极验滑块(3代)验证码细节避坑总结

声明 本文章中所有内容仅供学习交流使用&#xff0c;不用于其他任何目的&#xff0c;不提供完整代码&#xff0c;抓包内容、敏感网址、数据接口等均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff01; 关于 w 值…

惊!这道题正确率竟然只有 22%:答案详解

《Go 语言爱好者周刊》第 148 期有一道题目&#xff1a;以下代码输出什么&#xff1f; package mainimport ("fmt" )func main() {m : [...]int{a: 1,b: 2,c: 3,}m[a] 3fmt.Println(len(m)) }A&#xff1a;3&#xff1b;B&#xff1a;4&#xff1b;C&#xff1a;10…

面试官:过滤器和拦截器有什么区别?

过滤器&#xff08;Filter&#xff09;和拦截器&#xff08;Interceptor&#xff09;都是基于 AOP&#xff08;Aspect Oriented Programming&#xff0c;面向切面编程&#xff09;思想实现的&#xff0c;用来解决项目中某一类问题的两种“工具”&#xff0c;但二者有着明显的差…

AI原生云向量数据库Zilliz Cloud创建备份快照

目录 创建快照 调整快照保留天数 相关文档 快照是为某个集群在指定时间点创建的备份。您可以基于快照创建新的集群或将快照用作集群数据备份。 说明 快照功能目前仅对签约用户开放。如需使用该功能,请联系我们。 创建快照 快照创建是异步操作,创建所需时间取决于集群大…

Python爬虫学习笔记(一)————网页基础

目录 1.网页的组成 2.HTML &#xff08;1&#xff09;标签 &#xff08;2&#xff09;比较重要且常用的标签&#xff1a; ①列表标签 ②超链接标签 &#xff08;a标签&#xff09; ③img标签&#xff1a;用于渲染&#xff0c;图片资源的标签 ④div标签和span标签 &…

LabVIEW开发BROOKS SLA5850 BROOKS 0251

LabVIEW开发BROOKS SLA5850 BROOKS 0251 SLA5800 系列热式质量流量计和质量流量控制器在精度、稳定性和可靠性方面堪称标杆&#xff0c;因而得到广泛的认可。这些产品具有广泛的流量测量范围&#xff0c;适用于各种温度和压力条件&#xff0c;非常适合化工和石化研究、实验室、…

【Gradle】实现自动化构建和测试,提高代码质量和可靠性

做Android开发的同学&#xff0c;对Gradle肯定不陌生&#xff0c;我们用它配置、构建工程&#xff0c;可能还会开发插件来促进我们的开发&#xff0c;我们必须了解Gradle。Gradle是一种基于Groovy的项目自动化构建工具&#xff0c;用于编译、打包、测试、发布和依赖管理等任务。…

pdf可以转化成excel表格吗?四个方法可以帮助到你!

PDF文件是许多用户在工作中经常接触的文件格式。为了保持格式排版的一致性并防止篡改&#xff0c;在传输过程中通常会先将文件转换为PDF格式。然而&#xff0c;如果需要编辑其中的数据&#xff0c;就需要先将PDF转换为Excel才能继续相关操作。那么&#xff0c;如何将PDF转换为E…