当前位置: 首页 > news >正文

数码管的动态显示(二)

1.原理

这个十六进制是右边的dp为高位。

数码管的动态显示,在第一个计数周期显示个位,在第二个周期显示十位,在第三个周期显示百位由于人眼的视觉和数码管的特性,感觉就是显示了234,每个数码管的显示需要从输入的数据里提取出个十百位,所以需要BCD码。

8,原来输入的数据有多少位宽就要移位多少次。

增加一个BCD转码模块。

修改系统框图

2.代码

2.1 bcd_8421.v

module bcd_8421(input wire 			sys_clk			,input wire 			sys_rst_n		,input wire[19:0]	data			,output reg[3:0]		unit			,output reg[3:0]		ten				,output reg[3:0]		hun				,output reg[3:0]		tho				,output reg[3:0]		t_tho			,output reg[3:0]		h_hun
);reg [4:0]cnt_shift;  //输入是20位,第0次补0,要计数到20,就是0-20,第21次进行输出的赋值
reg [43:0]data_shift;//20位的data输入,和4*6=24位的8421BCD
reg shift_flag;always@(posedge sys_clk or negedge sys_rst_n)if(sys_rst_n==1'b0)cnt_shift<=5'd0;else if((cnt_shift==5'd21)&&(shift_flag==1'b1))cnt_shift<=5'd0;else if(shift_flag==1'b1)cnt_shift<=cnt_shift+1'b1;elsecnt_shift<=cnt_shift;always@(posedge sys_clk or negedge sys_rst_n)if(sys_rst_n==1'b0)shift_flag<=1'b0;elseshift_flag<=~shift_flag;always@(posedge sys_clk or negedge sys_rst_n)if(sys_rst_n==1'b0)data_shift<=44'd0;else if(cnt_shift==5'd0)data_shift<={24'b0,data};else if((cnt_shift<21)&&(shift_flag==1'b0))begindata_shift[23:20]<=(data_shift[23:20]>4) ? (data_shift[23:20]+2'd3) : (data_shift[23:20]);data_shift[27:24]<=(data_shift[27:24]>4) ? (data_shift[27:24]+2'd3) : (data_shift[27:24]);data_shift[31:28]<=(data_shift[31:28]>4) ? (data_shift[31:28]+2'd3) : (data_shift[31:28]);data_shift[35:32]<=(data_shift[35:32]>4) ? (data_shift[35:32]+2'd3) : (data_shift[35:32]);data_shift[39:36]<=(data_shift[39:36]>4) ? (data_shift[39:36]+2'd3) : (data_shift[39:36]);data_shift[43:40]<=(data_shift[43:40]>4) ? (data_shift[43:40]+2'd3) : (data_shift[43:40]);endelse if((cnt_shift<5'd21)&&(shift_flag==1'b1))data_shift<=data_shift<<1;else data_shift<=data_shift;always@(posedge sys_clk or negedge sys_rst_n)if(sys_rst_n==1'b0)beginunit	<=4'b0;ten	    <=4'b0;hun	    <=4'b0;tho	    <=4'b0;t_tho   <=4'b0;h_hun   <=4'b0;endelse if(cnt_shift==5'd21)beginunit	<=data_shift[23:20];ten	    <=data_shift[27:24];hun	    <=data_shift[31:28];tho	    <=data_shift[35:32];t_tho   <=data_shift[39:36];h_hun   <=data_shift[43:40];endendmodule

2.2 tb_bcd_8421.v

`timescale 1ns/1ns
module tb_bcd_8421();reg sys_clk	;
reg sys_rst_n;
reg [19:0] data;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   ;initial beginsys_clk=1'b1;sys_rst_n<=1'b0;data<=20'd0;#30sys_rst_n<=1'b1;data<=20'd123_456;#3000data<=20'd654_321;#3000data<=20'd987_654;#3000data<=20'd999_999;endalways #10 sys_clk=~sys_clk;bcd_8421 tb_bcd_8421(.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

shift_reg高电平时,cnt_shift开始计数

(最后一位999_999显示有误,不知道怎么改)

http://www.lryc.cn/news/317252.html

相关文章:

  • 【JavaScript】数据类型转换 ① ( 隐式转换 和 显式转换 | 常用的 数据类型转换 | 转为 字符串类型 方法 )
  • git学习(创建项目提交代码)
  • Day36:安全开发-JavaEE应用第三方组件Log4j日志FastJson序列化JNDI注入
  • HTML5+CSS3+JS小实例:全屏范围滑块
  • ctf杂项总结
  • openAI key 与ChatGPTPlus的关系,如何升级ChatGPTPLus
  • KB5034441 0x80070643 reagentc.exe 无法更新引导配置数据
  • 全网最最最详细“Jupyter command ‘jupyter-notebook‘ not found.“的解决方案
  • Java中常用的集合及方法(2)
  • 如何轻松打造属于自己的水印相机小程序?
  • Qt+FFmpeg+opengl从零制作视频播放器-12.界面美化
  • 【测试】1. 概念 + 基础篇
  • 【数据结构取经之路】快速排序的非递归实现
  • 面试官: Spring Boot中spring-boot-starter-parent 有什么用
  • 手搭手RocketMQ发送消息
  • Mysql数据库的优点
  • 蓝桥杯练习系统(算法训练)ALGO-980 斐波那契串
  • AHU 数据库 实验五
  • 信号和槽1
  • 一个简单的微信小程序表单提交样式模板
  • SpringController返回值和异常自动包装
  • 生存预后不显著?最佳阈值来帮你!| 附完整代码 + 注释
  • kangle一键安装脚本
  • C#写入和调用方法
  • Qt的定时器QTimer
  • Python 导入Excel三维坐标数据 生成三维曲面地形图(面) 4-4、线条平滑曲面(修改颜色)去除无效点
  • 某小厂java后端初面,记录一下
  • Unity制作马赛克效果
  • 【零基础学习04】嵌入式linux驱动中信号量功能基本实现
  • SQL中常见的DDL操作及示例,数据库操作及表操作