FPGA开发——数码管的使用(二)
一、概述
在上一篇文章中我们针对单个数码管的静态显示和动态显示进行了一个设计和实现,这篇文章中我们针对多个数码管同时显示进行一个设计。这里和上一篇文章唯一不同的是就是数码管位选进行了一个改变,原来是单个数码管的显示,所以位选就直接赋值就可以了,但在本篇文章中一次性使用了多个数码管,所以在位选信号中我们就需要进行一个更改。
实验的重难点
在进行多位数码管的显示时,最大的难点就是怎样选择每个数码管的位选,以及每个数码管之间显示的时间间隔,这时本次设计中所设计的两个重难点,只要掌握着两个点,设计也就变得非常简单。
二、工程实现
1、设计文件的编写
在针对上面的两个难点,我们在编写代码时拼接语法的方式实现位选的循环移动,将不同数码管显示的值使用位选变量作为条件写在一个case语句中,以实现我们预设的012345的字符显示。这里在对8段发光二极管显示字符进行设计时,我们和前一篇文章一样需要先确认时共阴极还是共阳极(这里使用的是共阳极),如果时共阴极就是高电平驱动,反之,就是低电平驱动。通过给8段对应的二极管进行0或者1的赋值,共同组成不同的字符。
module seg0(input clk,input rst_n,output reg [5:0] seg_sel,//位选output reg [7:0] seg_dual//段选
);
localparam ZERO = 8'b1100_0000, //共阳极段码ONE = 8'b1111_1001,TWO = 8'b1010_0100,THREE = 8'b1011_0000,FOUR = 8'b1001_1001,FIVE = 8'b1001_0010;
reg [15:0] cnt;//ms计数器
wire add_cnt;
wire end_cnt;
reg [4:0] flag;
wire add_flag;
wire end_flag;always @(posedge clk or negedge rst_n)beginif(!rst_n)cnt<=0;else if(add_cnt)beginif(end_cnt)cnt<=0;elsecnt<=cnt+1'b1;end
end
assign add_cnt=1'b1;
assign end_cnt=add_cnt && (cnt==50_000-1);always @(posedge clk or negedge rst_n)beginif(!rst_n)seg_sel<=6'b111_110;else if(end_cnt)seg_sel<={seg_sel[4:0],seg_sel[5]};
endalways @(posedge clk or negedge rst_n)beginif(!rst_n)seg_dual<=8'b1111_1111;else begincase (seg_sel)6'b111_110:seg_dual<=ZERO ;6'b111_101:seg_dual<=ONE ;6'b111_011:seg_dual<=TWO ; 6'b110_111:seg_dual<=THREE;6'b101_111:seg_dual<=FOUR ;6'b011_111:seg_dual<=FIVE ;default: ;endcaseend
end
endmodule
2、测试文件编写
这里很简单,我就不进行波形仿真了,下面是测试文件,感兴趣的可以去仿真一下,我就直接在后面给出下板验证的结果。
//定义时间尺度
`timescale 1ns/1ns
module seg0_tb ;//输入信号定义
reg clk;
reg rst_n;
wire [7:0] seg_dual;
wire [5:0] seg_sel;
//模块例化
seg0 seg_inst(/*input */.clk (clk ),/*input */.rst_n (rst_n ),/*output*/.seg_sel (seg_sel ),/*output*/.seg_dual (seg_dual));
//激励信号产生
parameter CLK_CLY = 20;
//时钟
initial clk=1;
always #(CLK_CLY/2)clk=~clk;//复位
initial beginrst_n= 1'b0;#(CLK_CLY*3);#5;//复位结束避开时钟上升沿rst_n= 1'b1;
end
endmodule
3、下板验证
图片中我们可以看到6个数码管从0显示到5,成功设计成多个数码管同时显示。

相关文章:
FPGA开发——数码管的使用(二)
一、概述 在上一篇文章中我们针对单个数码管的静态显示和动态显示进行了一个设计和实现,这篇文章中我们针对多个数码管同时显示进行一个设计。这里和上一篇文章唯一不同的是就是数码管位选进行了一个改变,原来是单个数码管的显示,所以位选就直…...
技术汇总记录笔记5:在 C++ 中,如何使用正则表达式来验证一个字符串是否只包含数字?
在C中,你可以使用 <regex> 头文件中定义的正则表达式功能来验证一个字符串是否只包含数字。以下是一个基本的示例,展示如何使用正则表达式来检查一个字符串是否完全是数字: #include <iostream> #include <string> #inclu…...
ai模特换装软件哪个好用?不知道怎么穿搭就用这几个
最近#紫色跑道的city穿搭#风靡全网,大家纷纷晒出自己的紫色风情。 可一想到衣橱里堆积如山的衣服和钱包的“瘦身计划”,是不是有点小纠结? 别怕,科技来救场!那就是“一键换装在线工具”,让你无需剁手&…...
HCL实验2:VLAN
目的:让PC_3和PC_5处于vlan1, PC_4和PC_6处于vlan2 SW1的配置命令: vlan 2 port GigabitEthernet 1/0/2 quit int g1/0/3 port link-type trunk port trunk permit vlan all quit SW2的配置命令: vlan 2 port GigabitEthernet 1/0/2 quit int g1/0/3 p…...
输出总分题目
题目描述 依次输入三位同学的语文、数学和英语成绩,依次输出他们的总分。 输入输出格式 输入 三行,每行三个整数,用空格隔开,分别表示这三个同学的语文、数学和英语成绩。 输出 一行三个整数,用空格隔开…...
自定义协议(应用层协议)——网络版计算机基于TCP传输协议
应用层:自定义网络协议:序列化和反序列化,如果是TCP传输的:还要关心区分报文边界(在序列化设计的时候设计好)——粘包问题 ——两个问题:粘包、序列化反序列化 1、首先想要使用TCP协议传输的网…...
在jmeter中使用javascript脚本
工作上遇到一个压力测试的需求,需要测试几个考试相关的接口。其中有一个获取试题详情的接口,和一个提交答题信息的接口。后一个接口以上一接口的返回内容为参数,添加上用户的答案即可。jmeter提供了非常多的方式可以实现该需求,这…...
[Bugku] web-CTF靶场详解!!!
平台为“山东安信安全技术有限公司”自研CTF/AWD一体化平台,部分赛题采用动态FLAG形式,避免直接抄袭答案。 平台有题库、赛事预告、工具库、Writeup库等模块。 ------------------------------- Simple_SSTI_1 启动环境: 页面提示传入参数f…...
系统架构师(每日一练11)
每日一练 1.CORBA服务端构件模型中,()是CORBA对象的真正实现,负责完成客户端请求答案与解析 A.伺服对象(Servant) B.对象适配器(Object Adapter) C.对象请求代理(Object Request Broker) D.适配器激活器(AdapterActivator) 2.DMA(直接存储器访问)工作方…...
【前端】fis框架学习
文章目录 1. 介绍2. 安装 1. 介绍 FIS是专为解决前端开发中自动化工具、性能优化、模块化框架、开发规范、代码部署、开发流程等> 问题的工具框架 使用FIS我们可以快速的完成各种前端项目的资源压缩、合并等等各种性能优化工作,同时FIS还提> 供了大量的开发辅…...
STM32高级运动控制系统教程
目录 引言环境准备高级运动控制系统基础代码实现:实现高级运动控制系统 4.1 传感器数据采集模块 4.2 数据处理与运动控制模块 4.3 通信与网络系统实现 4.4 用户界面与数据可视化应用场景:运动控制与优化问题解决方案与优化收尾与总结 1. 引言 高级运动…...
链式栈,队列与树形结构
链式栈 链式存储的栈 实现方式:可以使用单向链表完成 对单向链表进行头插(入栈)、头删(出栈),此时链表的头部就是链栈的栈顶,链表的尾部,就是链栈的栈底 队列 概念 队列&#…...
Android历史版本与APK文件结构
前言 在移动设备日益普及的今天,Android系统已经成为全球最流行的移动操作系统。作为Android开发者或逆向工程师,了解Android系统的演进历史以及APK文件的基本结构是非常重要的。本文将详细介绍Android历史版本的演变以及APK的基本结构。 一、Android历…...
文件解析漏洞集合
IIS解析漏洞 IIS6 目录解析 在网站下建立文件夹的名字为.asp/.asa 的文件夹,其目录内的任何扩展名的文件都被IIS当作asp 文件来解析并执行。 这里显示的是 1.asp下的1.jpg,按照道理来说里面的文件是一个图片,但是访问的话,会出…...
如何利用大语言模型进行半监督医学图像分割?这篇文章给出了答案
PS:写在前面,近期感谢很多小伙伴关注到我写的论文解读,我也会持续更新吖~同时希望大家多多支持本人的公主号~ 想了解更多医学图像论文资料请移步公主👸号哦~~~后期将持续更新!! 关注我,让我们一…...
库文件的制作和makefile文件操作基础实现
库文件包括静态库和动态库: 制作动态库命令如下: gcc -fPIC -shared xxx.c xxx.c -o libxxx.so xxx表示文件名 最后会生成一个libxxx.so文件 。这个so文件就是库文件。(若是用到了自己写的.c和.h文件,需要在同一目录下哦&…...
【Linux】进程创建进程终止进程等待
目录 一、进程创建1.1 写时拷贝1.2 frok的常规用法1.3 fork调用失败的原因 二、进程终止2.1 进程退出码2.2 进程退出方式2.2.1 exit函数的使用2.2.2 _exit函数的使用2.2.3 exit函数与_exit函数的区别 2.3 进程信号 三、进程等待3.1 进程等待的必要性3.2 进程等待的方式3.2.1 wa…...
编程的进阶和并发之路
编程的进阶和并发之路 博主在这谈并发,是因为单进程的资源是全局共享,函数作为局部空间来分担分布式计算的过程,掌握并发等于熟悉流式计算和程序执行的通量快速到达结束点。在大数据初期阶段,经验开发缺乏很多模拟数据࿰…...
文件系统 --- 文件结构体,文件fd以及文件描述符表
序言 在编程的世界里,文件操作是不可或缺的一部分。无论是数据的持久化存储、日志记录,还是简单的文本编辑,文件都扮演着至关重要的角色。然而,当我们通过编程语言如 C、Java 等轻松地进行文件读写时,背后隐藏的复杂机…...
【第三节】python中的函数
目录 一、函数的定义 二、函数的调用 三、函数的参数 3.1 可变与不可变对象 3.2 函数参数传递 3.3 参数类型 四、匿名函数 五、函数的return语句 六、作用域 七、python的模块化 八、 main 函数 一、函数的定义 函数是经过精心组织、可重复使用的代码片段࿰…...
利用最小二乘法找圆心和半径
#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …...
全球首个30米分辨率湿地数据集(2000—2022)
数据简介 今天我们分享的数据是全球30米分辨率湿地数据集,包含8种湿地亚类,该数据以0.5X0.5的瓦片存储,我们整理了所有属于中国的瓦片名称与其对应省份,方便大家研究使用。 该数据集作为全球首个30米分辨率、覆盖2000–2022年时间…...
Web 架构之 CDN 加速原理与落地实践
文章目录 一、思维导图二、正文内容(一)CDN 基础概念1. 定义2. 组成部分 (二)CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 (三)CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 …...
Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信
文章目录 Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信前言一、网络通信基础概念二、服务端与客户端的完整流程图解三、每一步的详细讲解和代码示例1. 创建Socket(服务端和客户端都要)2. 绑定本地地址和端口&#x…...
[ACTF2020 新生赛]Include 1(php://filter伪协议)
题目 做法 启动靶机,点进去 点进去 查看URL,有 ?fileflag.php说明存在文件包含,原理是php://filter 协议 当它与包含函数结合时,php://filter流会被当作php文件执行。 用php://filter加编码,能让PHP把文件内容…...
Docker拉取MySQL后数据库连接失败的解决方案
在使用Docker部署MySQL时,拉取并启动容器后,有时可能会遇到数据库连接失败的问题。这种问题可能由多种原因导致,包括配置错误、网络设置问题、权限问题等。本文将分析可能的原因,并提供解决方案。 一、确认MySQL容器的运行状态 …...
结构化文件管理实战:实现目录自动创建与归类
手动操作容易因疲劳或疏忽导致命名错误、路径混乱等问题,进而引发后续程序异常。使用工具进行标准化操作,能有效降低出错概率。 需要快速整理大量文件的技术用户而言,这款工具提供了一种轻便高效的解决方案。程序体积仅有 156KB,…...
k8s从入门到放弃之Pod的容器探针检测
k8s从入门到放弃之Pod的容器探针检测 在Kubernetes(简称K8s)中,容器探测是指kubelet对容器执行定期诊断的过程,以确保容器中的应用程序处于预期的状态。这些探测是保障应用健康和高可用性的重要机制。Kubernetes提供了两种种类型…...
Linux中INADDR_ANY详解
在Linux网络编程中,INADDR_ANY 是一个特殊的IPv4地址常量(定义在 <netinet/in.h> 头文件中),用于表示绑定到所有可用网络接口的地址。它是服务器程序中的常见用法,允许套接字监听所有本地IP地址上的连接请求。 关…...
c++算法学习3——深度优先搜索
一、深度优先搜索的核心概念 DFS算法是一种通过递归或栈实现的"一条路走到底"的搜索策略,其核心思想是: 深度优先:从起点出发,选择一个方向探索到底,直到无路可走 回溯机制:遇到死路时返回最近…...
