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

文章目录

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


一、实验任务

使用开发板上的四个按键控制四个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) beginif (!rst_n) begincnt_1s <= 26'd0;endelse if (cnt_1s == MAX_1s) begincnt_1s <= 26'd0;endelse begincnt_1s <= cnt_1s + 26'd1;end
end//状态每隔1s进行跳转
always @(negedge rst_n or posedge clk) beginif (!rst_n) beginstate <= 2'd0;endelse if (cnt_1s == MAX_1s) begin            //每隔1s进入下一个状态state <= state + 2'd1;endelse beginstate <= state;end
end//不同按键不同led灯闪烁方式
always @(negedge rst_n or posedge clk) beginif (!rst_n) beginkey_led <= 4'b0000;endelse 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 ;endcaseendelse 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 ;endcaseendelse 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 ;endcaseendelse 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 ;endcaseendelse beginstate <= state;end
endendmodule

仿真代码:

`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 beginclk = 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;endkey_led  #(.MAX_1s(MAX_1s))u_key_led(.clk(clk),.rst_n(rst_n),.key(key),.key_led(key_led));endmodule

四、引脚分配

请添加图片描述

五、总结

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

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

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

相关文章

揭秘GPT-4;Adobe Firefly AI 扩大测试规模

&#x1f989; AI新闻 &#x1f680; Adobe Firefly AI 扩大测试规模&#xff0c;支持100多种语言的输入 摘要&#xff1a;Adobe宣布扩大测试规模&#xff0c;Adobe Firefly AI现在支持100多种语言的 prompts 输入。网页测试版Firefly已经扩充了罗马尼亚语等多种语言&#xf…

MacOS使用USB接口与IPhone进行Socket通信

演示效果如下: 开源地址: GitHub - rsms/peertalk: iOS and Mac Cocoa library for communicating over USB 克隆源码: git clone https://github.com/rsms/peertalk.git 克隆后打开peertalk然后启动xcode工程 先启动MacOS服务端工程,再启动iOS客户端工程 客户端 服务端

微信小程序安装和使用 Vant Weapp 组件库

微信小程序安装和使用 Vant Weapp 组件库 1. Vant Weapp 介绍2. Vant Weapp 的 安装2.1. 通过npm安装2.2. 构建npm2.3. 修改 app.json2.4. 修改 project.congfig.json2.5. 测试一下&#xff0c;使用Vant Weapp提供的组件 1. Vant Weapp 介绍 Vant 是一个轻量、可靠的移动端组件…

极智开发 | ubuntu交叉编译aarch64 boost

欢迎关注我的公众号 [极智视界]&#xff0c;获取我的更多经验分享 大家好&#xff0c;我是极智视界&#xff0c;本文介绍一下 ubuntu交叉编译aarch64 boost。 邀您加入我的知识星球「极智视界」&#xff0c;星球内有超多好玩的项目实战源码和资源下载&#xff0c;链接&#xf…

opencv -10 基础运算之 图像加权和(图像融合图像修复视频合成)

什么是图像加权和&#xff1f; 所谓图像加权和&#xff0c;就是在计算两幅图像的像素值之和时&#xff0c;将每幅图像的权重考虑进来&#xff0c;可以用公式表示为&#xff1a; dst saturate(src1 &#x1d6fc; src2 &#x1d6fd; &#x1d6fe;)式中&#xff0c;satu…

C# Linq 详解二

目录 概述 七、OrderBy 八、OrderByDescending 九、Skip 十、Take 十一、Any 十二、All C# Linq 详解一 1.Where 2.Select 3.GroupBy 4.First / FirstOrDefault 5.Last / LastOrDefault C# Linq 详解二 1.OrderBy 2.OrderByDescending 3.Skip 4.Take 5.Any 6.All C#…

arm day2

汇编实现1到100的累加 .text .global _start_start:mov r0,#0loop:add r0,#1add r1,r0cmp r0,#100blne loopstop:b stop结果为0x13ba等于5050

python的魔法函数

一、介绍 在Python中&#xff0c;魔法函数是以双下划线__开头和结尾的特殊函数。它们在类定义中用于实现特定的行为&#xff0c;例如运算符重载、属性访问、迭代等。 以下是一些常见的Python魔法函数&#xff1a; __init__: 这是一个特殊的构造函数&#xff0c;在创建类的实例…

Web_php_include

代码审计 进入环境&#xff0c;根据题目的提示&#xff0c;本题考察文件包含漏洞 <?php show_source(__FILE__); echo $_GET[hello]; $page$_GET[page]; while (strstr($page, "php://")) {$pagestr_replace("php://", "", $page); } incl…

解决Ruoyi单体版本集成Echarts多图表时在Tab模式下不展示问题

目录 背景 一、Tab拆分后无法展示 1、环境简介 2、原始报表功能说明 3、tab切分遇到的问题 二、问题分析及解决 1、问题分析 2、问题解决 3、初始化时图表渲染 4、Tab切换时重渲 总结 背景 最近在使用ruoyi的单体化版本进行Echarts多图表展示时遇到一个问题&#xff0c;r…

苍穹外卖day03——菜品管理业务代码开发

目录 公共字段自动填充——问题分析和实现思路 公共字段自动填充——代码实现(1) 公共字段自动填充——代码实现完善(2) 新增菜品——需求分析与设计 产品原型 ​编辑 接口设计 ​编辑 数据库设计 新增菜品——代码开发1(文件上传接口) 配置文件 Controller层代码 前后…

Java经典面试解析:服务器卡顿、CPU飙升、接口负载剧增

01 线上服务器CPU飙升&#xff0c;如何定位到Java代码 解决这个问题的关键是要找到Java代码的位置。下面分享一下排查思路&#xff0c;以CentOS为例&#xff0c;总结为4步。 第1步&#xff0c;使用top命令找到占用CPU高的进程。 第2步&#xff0c;使用ps –mp命令找到进程下…

无线电音频-BPA600蓝牙协议分析仪名词解析

1 介绍 2 Baseband基带分析 (1)Delta 是什么含义? "Delta" 有多个含义,取决于上下文。以下是常见的几种含义: 希腊字母:Delta&#x

Linux(centos7)下安装mariadb10详解

MariaDB 和 MySQL 之间存在紧密的关系。 起源&#xff1a;MariaDB 最初是作为 MySQL 的一个分支而创建的。它的初始目标是保持与 MySQL 的兼容性&#xff0c;并提供额外的功能和性能改进。 共同的代码基础&#xff1a;MariaDB 使用了 MySQL 的代码基础&#xff0c;并在此基础上…

Docker 常用命令

docker命令大全 命令说明docker attach将本地标准输入、输出和错误流附加到正在运行的容器docker build从 Dockerfile 构建镜像docker builder管理构建docker checkpoint管理检查点docker commit从容器的更改中创建新图像docker config管理 Docker 配置docker container管理容器…

如何清除视频和照片中水印的几种方式

文章目录 如何清除视频和照片中水印的几种方式一、清除视频中水印的几种方式1、截除水印区域2、模糊水印区域3、使用人工智能技术工具3.1 通过【iMyFone-MarkGo[^1]】消除水印3.2 通过【嗨格式视频转换器[^2]】消除水印3.3 通过【PR 视频编辑器】消除水印3.4 通过 【美图秀秀】…

【Linux】网络基础之UDP协议

目录 &#x1f308;前言&#x1f338;1、传输层&#x1f33a;2、重谈端口号&#x1f368;2.1、端口号范围划分&#x1f367;2.2、认识知名端口号 &#x1f340;3、UDP协议&#x1f368;3.1、UDP协议报文结构&#x1f369;3.2、UDP协议的特点&#x1f36a;3.3、基于UDP的应用层协…

openwrt 阿里云盘webdav 转成 samba4挂载

需要rclone 与samba4-server rclone 吧webdav挂载到openwrt的某个目录下。 然后通过samba-server 挂载出去。 安装rclone sudo -v ; curl https://rclone.org/install.sh | sudo bash 安装fuse opkg install fuse-utils 软连接 ln -s /usr/bin/fusermount /usr/bin/fuse…

【Kubernetes运维篇】RBAC之创建集群用户管理K8S

文章目录 一、创建zhangsan集群用户赋予uat名称空间管理员权限二、创建lisi集群用户赋予查看所有名称Pod权限 需求&#xff1a;公司新入职两位运维同事&#xff0c;分别是zhangsan、lisi&#xff0c;刚入职肯定不能给K8S管理员权限&#xff0c;所以需要创建两个系统账号&#x…

k8s与集群管理

从docker讲起 终于有人把 Docker 讲清楚了&#xff0c;万字详解&#xff01; Docker资源&#xff08;CPU/内存/磁盘IO/GPU&#xff09;限制与分配指南 默认情况下&#xff0c;Docker容器是没有资源限制的&#xff0c;它会尽可能地使用宿主机能够分配给它的资源。如果不对容器资…