四个按键控制led的四种变化(按键控制led)(附源码)

news2024/11/23 16:34:00

文章目录

  • 一、实验任务
  • 二、系统框图
  • 三、代码实现
  • 四、引脚分配
  • 五、总结


一、实验任务

使用开发板上的四个按键控制四个LED灯。按下不同的按键时,四个LED灯显示不同效果。本实验是在EP4CE6F17C8开发板上实现,仿真请用modelsim Altera
请添加图片描述

在这里插入图片描述

二、系统框图

请添加图片描述

三、代码实现

module key_led (
    input clk,                      //时钟周期
    input rst_n,                    //复位信号
    input [3:0] key ,               //4个按键,提供4个位宽
    output reg [3:0] key_led        //4个led灯,提供4个位宽
);
reg [1:0] state;                    //两位宽的状态寄存器,存储4个状态
reg [25:0] cnt_1s;                  //存储1s的寄存器


parameter MAX_1s = 26'd49_999_999;//1s的时钟周期


//1s计数器
always @(negedge rst_n or posedge clk) begin
    if (!rst_n) begin
        cnt_1s <= 26'd0;
    end
    else if (cnt_1s == MAX_1s) begin
        cnt_1s <= 26'd0;
    end
    else begin
        cnt_1s <= cnt_1s + 26'd1;
    end
end

//状态每隔1s进行跳转
always @(negedge rst_n or posedge clk) begin
    if (!rst_n) begin
        state <= 2'd0;
    end
    else if (cnt_1s == MAX_1s) begin            //每隔1s进入下一个状态
        state <= state + 2'd1;
    end
    else begin
        state <= state;
    end
end

//不同按键不同led灯闪烁方式
always @(negedge rst_n or posedge clk) begin
    if (!rst_n) begin
        key_led <= 4'b0000;
    end
    else if (key[0] == 0) begin            //key0键按下,从右往左流水灯
        case (state)
            2'd0: key_led <= 4'b0001;
            2'd1: key_led <= 4'b0010;
            2'd2: key_led <= 4'b0100;
            2'd3: key_led <= 4'b1000;
            default: key_led <= key_led ;
        endcase
    end
     else if (key[1] == 0) begin            //key1键按下,从左往右流水灯
        case (state)
            2'd0: key_led <= 4'b1000;
            2'd1: key_led <= 4'b0100;
            2'd2: key_led <= 4'b0010;
            2'd3: key_led <= 4'b0001;
            default: key_led <= key_led ;
        endcase
    end
     else if (key[2] == 0) begin            //key2键按下,led灯闪烁
        case (state)
            2'd0: key_led <= 4'b1111;
            2'd1: key_led <= 4'b0000;
            2'd2: key_led <= 4'b1111;
            2'd3: key_led <= 4'b0000;
            default: key_led <= key_led ;
        endcase
    end
     else if (key[3] == 0) begin            //key3键按下,灯常亮
        case (state)
            2'd0: key_led <= 4'b1111;
            2'd1: key_led <= 4'b1111;
            2'd2: key_led <= 4'b1111;
            2'd3: key_led <= 4'b1111;
            default: key_led <= key_led ;
        endcase
    end
    else begin
        state <= state;
    end
end



endmodule

仿真代码:

`timescale 1ns/1ns
module key_led_tb (
);
    reg clk;
    reg rst_n;
    reg [3:0] key;
    wire [3:0] key_led;

    parameter MAX_1s = 9;
    parameter CYCLE = 20;

    always #(CYCLE/2) clk <= ~clk;

    initial begin
        clk = 1'b0;
        rst_n = 1'b0;
        #(CYCLE);
        rst_n = 1'b1;
        key = 4'b1111;
        #(4*(MAX_1s + 1)*CYCLE);  //4个state的时间
        key = 4'b1110;
        #(4*(MAX_1s + 1)*CYCLE);  
        key = 4'b1101;
        #(4*(MAX_1s + 1)*CYCLE);  
        key = 4'b1011;
        #(4*(MAX_1s + 1)*CYCLE);  
        key = 4'b0111;
        $stop;
    end


    key_led  #(.MAX_1s(MAX_1s))u_key_led(
        .clk(clk),
        .rst_n(rst_n),
        .key(key),
        .key_led(key_led)
    );


    
endmodule

四、引脚分配

请添加图片描述

五、总结

注意:该实验并未进行按键消抖,需一直按着按键才能让该按键所操控的led变化功能实现。

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

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

相关文章

23 分页控件

文章目录 界面设置初始化主对话框子页面初始化 页面1枚举窗口页面2枚举进程全部代码 界面设置 ui 设置 >创建CTablCtrl > 创建页控件&#xff08;子窗口&#xff09;&#xff0c;style设置成为chlid 添加类 页面中加入listCtrl 控件 添加变量 分别添加初始化函数 初始化…

3ds Max 建模基础教程:创建棕榈植物

推荐&#xff1a; NSDT场景编辑器助你快速搭建可二次开发的3D应用场景 嘿伙计们&#xff0c;在本教程中&#xff0c;我们将学习如何使用其花盆创建棕榈植物&#xff0c;首先我们将对花盆进行建模&#xff0c;然后设置叶子和纹理&#xff0c;我从谷歌搜索中找到了纹理&#xff0…

常用的k8s管理命令

Kubernetes 是一个由主节点和工作节点组成的容器编排工具。它只允许通过作为控制平面核心组件的 API 服务器进行通信。API 服务器公开了一个 HTTP REST API&#xff0c;允许内部组件&#xff08;如用户和集群&#xff09;和外部组件之间的通信。 你可以将 API 服务器视为 Kuber…

RestClient操作索引库

一、初始化RestClient 分为三步&#xff1a; 1&#xff09;引入es的RestHighLevelClient依赖&#xff1a; <dependency><groupId>org.elasticsearch.client</groupId><artifactId>elasticsearch-rest-high-level-client</artifactId> </dep…

字节面试:连接一个不存在的 IP 地址,会发生什么?

分享两个字节面试题&#xff0c;都是基于场景问的网络问题。 Q1&#xff1a;客户端连接一个不存在的 IP 地址&#xff0c;会发生什么&#xff1f; Q2&#xff1a;客户端连接一个存在的 IP 地址但是端口不存在&#xff0c;会发生什么&#xff1f; PS&#xff1a;这里的「连接…

leetcode:2395. 和相等的子数组(python3解法)

难度&#xff1a;简单 给你一个下标从 0 开始的整数数组 nums &#xff0c;判断是否存在 两个 长度为 2 的子数组且它们的 和 相等。注意&#xff0c;这两个子数组起始位置的下标必须 不相同 。 如果这样的子数组存在&#xff0c;请返回 true&#xff0c;否则返回 false 。 子数…

快消品行业企业如何选择适合自己的订单管理系统源码

快消品行业企业在选择适合自己的订单管理系统源码时&#xff0c;需要考虑以下五个方面&#xff1a; 首先&#xff0c;企业需要考虑订单管理系统的功能是否能够满足自身的需求。订单管理系统应该具备订单录入、订单查询、订单处理、订单跟踪、进销存管理、临期提醒等基本功能&am…

创业大赛,助力AI创业团队加速发展

AI产业投资人认为&#xff0c;参加AI大模型大赛的企业&#xff0c;无论是大厂还是创业团队&#xff0c;在技术、资本和产品等方面都面临全方位的竞争。特别对于创业团队而言&#xff0c;早期的问题是缺乏资金和技术支持&#xff0c;这让很多创业团队犹豫不决。 大型模型的研发…

2.MySQL- Linux 常见指令

目录 回顾&#xff1a;Linux 常见命令 一、创建目录 make directory (mkdir) 二、创建一个空白的文本文件 (touch) 练习 三、查看文本文件内容相关的指令&#xff08;cat head tile...&#xff09; 3.1 cat 3.2 head & tail 3.3 wc -l 3.4 grep 3.5 less & …

电脑城要倒闭?“泰酷辣”

电脑城要倒闭&#xff1f;“泰酷辣” &#x1f607;博主简介&#xff1a;我是一名正在攻读研究生学位的人工智能专业学生&#xff0c;我可以为计算机、人工智能相关本科生和研究生提供排忧解惑的服务。如果您有任何问题或困惑&#xff0c;欢迎随时来交流哦&#xff01;&#x1…

走进Linux世界【一、Linux概述】

第一章 Linux概述 1、操作系统 ​ 定义&#xff1a;操作系统(Operating System&#xff0c;简称OS)是管理计算机硬件与软件资源的计算机程序 ​ 作用&#xff1a;是把计算机系统中对硬件设备的操作封装起来&#xff0c;供应用软件调用&#xff0c;也是提供一个让用户与系统交…

I2C(IIC)总线 物理层

2C 通信设备常用的连接方式如下图&#xff1a; ①它是一个支持多设备的总线。“总线”指多个设备共用的信号线。在一个I2C 通讯总线中&#xff0c;可连接多个I2C 通讯设备&#xff0c;支持多个通讯主机及多个通讯从机。 ②一个I2C 总线只使用两条总线线路&#xff0c;一条双向串…

Windows 操作系统架构介绍

Windows 操作系统架构介绍 4 种基本类型的用户模式进程用户进程服务进程系统进程环境子系统服务进程Windows 内核模式组件 重要的系统组件环境子系统和子系统 DLL子系统的启动Windows 子系统Windows 10 和 Win32k.sys 其他子系统执行体内核内核对象内核处理器控制区&#xff08…

掌握这些写简历投简历的“黑魔法”,告别简历已读不回!

“哎&#xff0c;我还能找到工作吗&#xff1f;” 这是最近加我微信的好友&#xff0c;问的最多的一句话。 太卷了 最近加我微信的朋友很多&#xff0c;我都很奇怪&#xff0c;最近也没怎么发文章&#xff0c;怎么会有这么多人加我。 大概就是因为太卷了&#xff0c;之前写的…

右键pdf文件没有打印

问题描述 右键点pdf文件&#xff0c;弹出的菜单找不到打印选项。网上找了很多办法&#xff0c;然并卵啊。还是得靠自己慢慢摸索。 原因分析 新安装的win11系统&#xff0c;pdf文件默认可以用windows自带的edge浏览器打开。但是edge浏览器没有能力提供右键打印功能。 解决办法…

(一)ESP32基于MicroPython平台——环境搭建

一. 获取固件 我们要使用MicroPython平台进行ESP32程序的编写&#xff0c;您需要做的第一件事是下载最新的 MicroPython 固件.bin 文件以加载到您的 ESP32 设备上。您可以从 &#xff1a;MicroPython固件链接下载它 。从这里&#xff0c;您有 3 个主要选择&#xff1a; 稳定的…

STM32与RS485

单片机应用实践篇之RS485通信及MODBUS通信协议——MODBUS通信协议简介_哔哩哔哩_bilibili RS485基本认识 1&#xff1a;RS485用于工业控制&#xff0c;与我们使用的USART不同&#xff0c;无法直接与单片机的RXD和TXD直接相连&#xff0c;需要使用转化芯片&#xff0c;将TTL电平…

Halcon——C#中在HWindow上显示字符串遇见的问题及解决方案

Halcon——C#中在HWindow上显示字符串遇见的问题及解决方案 前言一、HWindow上显示字符串的两种方式1. DispText函数2. WriteString函数 二、DispText函数与WriteString函数的区别三、遇见的问题及解决方案“HALCON error #5123: Wrong window type in operator disp_text”“H…

带你【玩转Linux命令】➽ cat chattr 每天2个day01

带你【玩转Linux命令】➽ cat & chattr 每天2个day01 &#x1f53b; 一、文件管理命令1.1 cat-打印输出文件内容1.2 chattr-改变文件属性 &#x1f53b; 总结—温故知新 &#x1f448;【上一篇】 &#x1f496;The Begin&#x1f496; 点点关注&#xff0c;收藏不迷路&am…

驱动程序设计 驱动程序函数、驱动控制LED闪烁 7.7

驱动函数 .read() .write() ssize_t (*read) (struct file *, char __user *, size_t, loff_t *);ssize_t (*write) (struct file *, const char __user *, size_t, loff_t *);驱动程序 /** 文件名称&#xff1a;mod.c* 创 建 者: memories* 创建日期&#xff1a;2023…