数码管的动态显示(三)

news2024/9/24 23:22:30

1.原理

data_reg寄存,只寄存符号位和数据位不包含小数点位。

动态数码管每个显示1ms,所以计数到5*10^4-1

为了将sel和seg同步,把sel打了一拍。

6位都使用到了可以这么计算,6位都显示的是数据。或者最高位显示的是小数点,低5位是数据,

因为数码管是共阳数码管,低电平才能点亮。

2.代码

2.1 seg_dynamic.v

module seg_dynamic(
	input wire 			sys_clk		,
	input wire 			sys_rst_n	,
	input wire[19:0] 	data		,
	input wire[5:0]		point		,
	input wire			sign		,
	input wire 			seg_en		,
	
	output reg[7:0]		seg			,//因为一个数码管包括小数点位有8位
	output reg[5:0]		sel //因为总共有6个数码管需要显示
);

parameter CNT_MAX=16'd499_99;

wire [3:0] unit;
wire [3:0] ten;
wire [3:0] hun;
wire [3:0] tho;
wire [3:0] t_tho;
wire [3:0] h_hun; //999_999需要这6个位
reg [23:0] data_reg;  //6个数码管,每个数码管是BCD码表示,一共有4位,因为上面的ten是4位
reg [15:0] cnt_1ms;//因为计数1ms
reg flag_1ms;
reg [2:0] cnt_sel; //因为要计数6个数码管表示一次扫描周期的结束
reg [5:0] sel_reg; //这个是位选信号,控制哪个数码管亮
reg [3:0] data_disp; //这是上面的data_reg的每个位数的拆分,控制它显示十六进制码
reg dot_disp;


always@(posedge sys_clk or negedge sys_rst_n)
	if(sys_rst_n==1'b0)
		data_reg<=24'd0;
	else if((h_hun)||(point[5]))
		data_reg<={h_hun,t_tho,tho,hun,ten,unit};
	else if(((t_tho)||(point[4]))&&(sign==1'b0)) //sign=0就是要使用符号位的意思
		data_reg<={4'd11,t_tho,tho,hun,ten,unit};
	else if(((t_tho)||(point[4]))&&(sign==1'b1))
		data_reg<={4'd10,t_tho,tho,hun,ten,unit};	
	else if(((tho)||(point[3]))&&(sign==1'b0))
		data_reg<={4'd11,4'd11,tho,hun,ten,unit};	
	else if(((tho)||(point[3]))&&(sign==1'b1))
    	data_reg<={4'd11,4'd10,tho,hun,ten,unit};
	else if(((hun)||(point[2]))&&(sign==1'b0))
		data_reg<={4'd11,4'd11,4'd11,hun,ten,unit};
	else if(((hun)||(point[2]))&&(sign==1'b1))	
		data_reg<={4'd11,4'd11,4'd10,hun,ten,unit};
	else if(((ten)||(point[1]))&&(sign==1'b0))
		data_reg<={4'd11,4'd11,4'd11,4'd11,ten,unit};	
	else if(((ten)||(point[1]))&&(sign==1'b1))		
		data_reg<={4'd11,4'd11,4'd11,4'd10,ten,unit};	
	else if(((unit)||(point[0]))&&(sign==1'b0))
		data_reg<={4'd11,4'd11,4'd11,4'd11,4'd11,unit};	
	else 			
		data_reg<={4'd11,4'd11,4'd11,4'd11,4'd10,unit};	
		
always@(posedge sys_clk or negedge sys_rst_n)
	if(sys_rst_n==1'b0)
		cnt_1ms<=16'd0;
	else if(cnt_1ms==CNT_MAX)
		cnt_1ms<=16'd0;
	else
		cnt_1ms<=cnt_1ms+1'b1;
		
always@(posedge sys_clk or negedge sys_rst_n)
	if(sys_rst_n==1'b0)
		flag_1ms<=1'b0;
	else if(cnt_1ms==CNT_MAX-1'b1)
		flag_1ms<=1'b1;
	else
		flag_1ms<=1'b0;

always@(posedge sys_clk or negedge sys_rst_n)
	if(sys_rst_n==1'b0)
		cnt_sel<=3'd0;
	else if((flag_1ms==1'b1)&&(cnt_sel==3'd5))
		cnt_sel<=3'd0;
	else if(flag_1ms==1'b1)
		cnt_sel<=cnt_sel+1'b1;
	else
		cnt_sel<=cnt_sel;
		
always@(posedge sys_clk or negedge sys_rst_n)
	if(sys_rst_n==1'b0)
		sel_reg<=6'd0;
	else if ((cnt_sel==3'd0)&&(flag_1ms==1'b1))
		sel_reg<=6'b000_001;
	else if(flag_1ms==1'b1)
		sel_reg<=sel_reg<<1;
	else
		sel_reg<=sel_reg;
		

always@(posedge sys_clk or negedge sys_rst_n)
	if(sys_rst_n==1'b0)
		data_disp<=4'd0;
	else if((seg_en==1'b1)&&(flag_1ms==1'b1))
		case(cnt_sel)
			3'd0: data_disp<=data_reg[3:0];
			3'd1: data_disp<=data_reg[7:4];
			3'd2: data_disp<=data_reg[11:8];
			3'd3: data_disp<=data_reg[15:12];
			3'd4: data_disp<=data_reg[19:16];
			3'd5: data_disp<=data_reg[23:20];
			default: data_disp<=4'b0;
		endcase
	else
		data_disp<=data_disp;
		
always@(posedge sys_clk or negedge sys_rst_n)
	if(sys_rst_n==1'b0)
		dot_disp<=1'b1;
	else if(flag_1ms==1'b1)
		dot_disp<=~point[cnt_sel];
	else 
		dot_disp<=dot_disp;

always@(posedge sys_clk or negedge sys_rst_n)
	if(sys_rst_n==1'b0)	
		seg<=8'd0;
	else 
		case(data_disp)
			4'd0: seg<={dot_disp,7'b100_0000};
			4'd1: seg<={dot_disp,7'b111_1001};
			4'd2: seg<={dot_disp,7'b010_0100};
			4'd3: seg<={dot_disp,7'b011_0000};
			4'd4: seg<={dot_disp,7'b011_1001};
			4'd5: seg<={dot_disp,7'b001_0010};
			4'd6: seg<={dot_disp,7'b000_0010};
			4'd7: seg<={dot_disp,7'b111_1000};
			4'd8: seg<={dot_disp,7'b000_0000};
			4'd9: seg<={dot_disp,7'b001_0000};
			4'd10: seg<=8'b1011_1111;//10就是符号,只显示中间的那条杠,因此是
			4'd11: seg<=8'b1111_1111;//就是显示0
			default:seg<=8'b1100_0000;
		endcase

always@(posedge sys_clk or negedge sys_rst_n)
	if(sys_rst_n==1'b0)	
		sel<=6'd0;
	else
		sel<=sel_reg;

					
bcd_8421 bcd_8421_inst(
	.sys_clk	(sys_clk	)		,
	.sys_rst_n	(sys_rst_n)	,
	.data		(data		)	,
				
	.unit		(unit		)	,
	.ten		(ten		)		,
	.hun		(hun		)		,
    .tho		(tho		)		,
	.t_tho		(t_tho		)	,
    .h_hun      (h_hun    )
);

endmodule




2.2 tb_seg_dynamic.v

module tb_seg_dynamic();

reg 		sys_clk		;
reg 		sys_rst_n   ;
reg[19:0]  data		;
reg[5:0]	point		;
reg		sign		;
reg 		seg_en		;
     
wire[7:0] 	seg;			
wire[5:0]    sel;

initial 
	begin
		sys_clk=1'b1;
		sys_rst_n<=1'b0;
		data<=20'd0;
		point<=6'b000_000;
		sign<=1'b0;
		seg_en<=1'b0;
		#30
		sys_rst_n<=1'b1;
		data<=20'd98_76;
        point<=6'b000_010;
        sign<=1'b1;
        seg_en<=1'b1;
	end
	
always #10 sys_clk=~sys_clk;
defparam seg_dynamic_inst.CNT_MAX=20'd5;

seg_dynamic seg_dynamic_inst(
	.sys_clk	(sys_clk	)	,
	.sys_rst_n	(sys_rst_n),
	.data		(data		),
	.point		(point		),
	.sign		(sign		),
	.seg_en		(seg_en		),
                 
	.seg		(seg		)	,
	.sel        (sel      )
);
endmodule

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

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

相关文章

微软远程桌面RD Client:连接与管理的新境界

微软远程桌面RD Client&#xff1a;连接与管理的新境界 在数字化日益深入的今天&#xff0c;远程工作与管理已成为许多企业和个人的首选。微软远程桌面RD Client作为一款功能强大的远程连接工具&#xff0c;凭借其出色的性能和便捷的操作&#xff0c;受到了广泛的关注和好评。…

C# EPPlus导出dataset----Excel2绘制图像

一、生成折线图方法 /// <summary> ///生成折线图 /// </summary> /// <param name="worksheet">sheet页数据 </param> /// <param name="colcount">总列数</param> /// &l…

一、C#冒泡排序算法

一、C#冒泡排序算法 简介 冒泡排序算法是一种基础的排序算法&#xff0c;它的实现原理比较简单。核心思想是通过相邻元素的比较和交换来将最大&#xff08;或最小&#xff09;的元素逐步"冒泡"到数列的末尾。 实现原理 冒泡排序是一种简单的排序算法&#xff0c;其…

PGA高端项目:FPGA基于GS2971+GS2972架构的SDI视频收发,提供3套工程源码和技术支持

目录 1、前言免责声明 2、相关方案推荐本博已有的 SDI 编解码方案本方案的SDI接收图像缩放应用本方案的SDI接收纯verilog图像缩放纯verilog多路视频拼接应用本方案的SDI接收HLS图像缩放HLS多路视频拼接应用本方案的SDI接收OSD动态字符叠加输出应用本方案的SDI接收HLS多路视频融…

x6.js 从流程图组件库中拖拽组件到画布dnd使用

上一篇已经了解到了x6.js常用功能以及使用方法。但我们使用流程图的时候还少不了一个非常重要的功能那就是拖拽组件库里的组件进来。如下图&#xff1a; 首先是布局这块&#xff0c;拖拽组件库的视图中布局无需我们去写&#xff0c;我们只需把界面搭建好。 添加组件库 1.搭建布…

先验分布、后验分布、极大似然的一点思考

今天和组里同事聊天的时候&#xff0c;无意中提到了贝叶斯统计里先验分布、后验分布、以及极大似然估计这三个概念。同事专门研究如何利用条件概率做系统辨识的&#xff0c;给我画了一幅图印象非常深刻&#xff1a; 其中k表示时序关系。上面这个图表示后验分布是由先验分布与似…

pcl 直通滤波

pcl 直通滤波 处理某一个坐标轴方向上的点云 头文件等 #include<pcl/filters/passthrough.h>typedef pcl::PointXYZ PointT; typedef pcl::PointCloud<PointT> CloudT; typedef CloudT::Ptr CP; 主要代码 CP cloudTo(new CloudT);pcl::PassThrough<pcl::Poi…

【机器学习300问】37、什么是迁移学习?

一、什么是迁移学习&#xff1f; &#xff08;1&#xff09;它的出现是为了解决什么问题&#xff1f; 迁移学习是为了解决深度学习中由于数据不足导致的学习效果受限以及跨领域知识的有效利用等问题而发展起来的一种重要技术手段。 ① 缺少训练数据 在许多实际应用中&#xf…

新火种AI|GPT-4诞生1年,OpenAI把它放到了机器人上

作者&#xff1a;一号 编辑&#xff1a;美美 ChatGPT拥有了身体&#xff0c;机器人也有了灵魂。 从OpenAI在去年3月14日拿出GPT-4后&#xff0c;已经过了整整一年。显然&#xff0c;在GPT-4诞生之后的这一年&#xff0c;一切都迭代得太快了&#xff0c;从GPT-4展现多模态能力&…

ChatGPT-Next-Web SSRF漏洞+XSS漏洞复现(CVE-2023-49785)

0x01 产品简介 ChatGPT-Next-Web 是一种基于 OpenAI 的 GPT-3.5 、GPT-4.0语言模型的产品。它是设计用于 Web 环境中的聊天机器人,旨在为用户提供自然语言交互和智能对话的能力。 0x02 漏洞概述 2024年3月,互联网上披露CVE-2023-49785 ChatGPT-Next-Web SSRF/XSS 漏洞,未经…

尚硅谷SpringBoot3笔记 (二) Web开发

Servlet&#xff0c;SpringMVC视频推荐&#xff1a;53_尚硅谷_servlet3.0-简介&测试_哔哩哔哩_bilibili HttpServlet 是Java Servlet API 的一个抽象类&#xff0c;用于处理来自客户端的HTTP请求并生成HTTP响应。开发人员可以通过继承HttpServlet类并重写其中的doGet()、do…

Android Button点击事件

一.Button点击事件 <!-- activity_main.xml --> <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android" xmlns:tools"http://schemas.android.com/tools"…

导入fetch_california_housing 加州房价数据集报错解决(HTTPError: HTTP Error 403: Forbidden)

报错 HTTPError Traceback (most recent call last) Cell In[3], line 52 from sklearn.datasets import fetch_california_housing3 from sklearn.model_selection import train_test_split ----> 5 X, Y fetch_california_housing(retu…

接上一篇:分布式调用链追踪系统设计

所以必须得记录父子关系&#xff1a; A---->B 是 B---->C 的父调用 A---->D 是 D---->E 的父调用 A---->D 还是 D---->F 的父调用 如何记录呢&#xff1f;需要给每个调用分配一个ID (称为 SpanID)&#xff0c;并且把这个 ID 传递给子调用&#xff0c; 子…

idea如何使用,从激活开始

idea到期后激活使用 如何使用 点击阅读 idea分享

Vue2 + node.js项目

1、Vue2 vue2主要功能包括登入、退出、用户权限、表格的增删改查、文件下载。 Vue2项目地址https://gitee.com/www6/finance1.git 2、node.js编写后端接口 2.1、项目初始化 后端地址https://gitee.com/www6/finance-backend.git 创建项目 npm install -g koa-generator …

算法笔记之蓝桥杯pat系统备考(2)

算法笔记之蓝桥杯&pat系统备考&#xff08;1&#xff09; 文章目录 五、数学问题5.2最大公约数和最小公倍数5.2.1最大公约数5.2.2最小公倍数 5.3分数的四则运算5.3.1分数的表示与化简5.3.2分数的四则运算5.3.3分数的输出 5.4素数&#xff08;质数&#xff09;5.4.1[素数的…

Python基于 opencv 的人脸识别考勤系统(V1.0),附源码

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝12W、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…

O2OA(翱途)开发平台系统安全-用户登录IP限制

O2OA(翱途)开发平台[下称O2OA开发平台或者O2OA]支持对指定的用户设置可以连接的客户端计算机的IP地址&#xff0c;以避免用户在不安全的环境下访问系统。本篇主要介绍如何开启O2OA用户登录IP限制。 一、先决条件&#xff1a; 1、O2Server服务器正常运行&#xff0c;系统安装部…

mac安全干净卸载Anaconda3

使用which python显示当前使用的是/Users/username/anaconda3/bin/python 现在想卸载Anaconda&#xff0c;恢复使用mac系统自带的Python 删除隐藏文件目录 rm -rf ~/.anaconda修改~/.bash_profile文件&#xff0c;将anaconda相关删除 也有可能不是~/.bash_profile而是~/.zs…