首页 > 其他分享 >22-数码管的动态显示

22-数码管的动态显示

时间:2023-07-05 23:00:18浏览次数:46  
标签:动态显示 显示 22 clk seg sys 数码管 模块

1.数码管动态显示

  • 不同位的数码管显示不同的数值
  • 使用动态扫描的方式,使用6位8段数码管显示1,2,3,4,5,6,选中第一个数码管让其显示1,显示时间位T;经过时间T之后选中第二个数码管显示2,显示时间为T,依次进行相似的操作,显示到6之后,经过时间T之后再显示1
  • 显示一个周期所有的时间为6个周期,6T,如果T为1s则六位8段数码管依次显示1,2,3,4,5,6显示时间间隔为1s
  • T = 0.2s,会进行闪烁显示
  • T = 1ms,闪烁频率过快,肉眼不能分辨出闪烁,近似常亮
  • 视觉暂留:人眼在观察景物的时候,光信号传递到大脑需要一定的时间,光的作用结束之后,视觉影像不会立刻消失,这种残留的视觉称之为后像,这种现象称之为视觉暂留。
  • 数码管的余晖效应:停止向数码管供电之后,数码管的亮度还能够维持一段时间。
  • 人眼可见的频率在60Hz

2.FPGA

使用6位8段数码管显示从0-999999,计数到最大值之后循环显示,每0.1s加1

2.1 模块框图

2.1.1 顶层模块框图

2.1.2 产生数据模块框图

显示的数据需要一个新的模块产生data_gen

2.1.3 数码管动态显示的模块

  • 输入信号有时钟和复位信号sys_clk,sys_rst_n
  • 需要输入数据生成模块生成的数据,seg_595_dynamic
  • 数码管动态显示芯片经常用到,所以增加一些功能,增加显示小数点的功能,输入小数点信号point,使用的是6位8段数码管,所以小数点位数是6bit
  • 增加一个符号位sign,可以用于显示符号
  • 增加一个使能端口seg_en,更好的控制数码管的显示,高电平显示数据,低电平不显示数据

2.1.4 动态显示驱动模块和控制模块

参考数码管静态显示,将seg_595_dynamic模块划分为两个模块,一个是动态显示驱动模块,第二个是595控制模块

  • seg_dynamic - 产生位选信号和段选信号

2.1.5 seg_595_dynamic框图

2.1.6 系统框图绘制

2.2 波形图

2.2.1 数据生成模块波形图

  • 生成一个计数器cnt_100ms变量对0.1s进行计数
  • 系统时钟是50MHz,周期20ns,0.1s = 100ms = 1*10^8ns
  • 计数个数:5*10^6
  • 计数最大值是:4999_999
  • 生成计数器标志信号:cnt_flag(计数器计数到最大值减一的时候拉高一个时钟周期)
  • 待显示数据生成,初值为0,在第一个0.1s内显示为0,当cnt_flag为高的时候,显示数据加1,计数到最大值,归0
  • 小数点位数据,定义为高电平小数点位有效,这里一直保持无效的低电平
  • 符号位波形绘制,高电平有效,这里一直保持为高电平(计数值都是正的)
  • 数码管使能信号,初值为低电平,这里信号始终保持高电平,因为数码管一直有效

2.3 RTL

2.3.1 数据生成模块

module data_gen
#(
  parameter CNT_MAX = 23'd4999_999,
  parameter DATA_MAX = 20'd999_999
)
(
  input wire sys_clk,
  input wire sys_rst_n,
  
  output reg [19:0] data,
  output wire [5:0] point,
  output wire sign,
  output reg seg_en
);
  
  reg [22:0] cnt_100ms;
  reg cnt_flag;

  always @ (posedge sys_clk or negedge sys_rst_clk)
    if(sys_rst_n == 1'b0)
      cnt_100ms <= 23'd0;
    else if(cnt_100ms == CNT_MAX)
      cnt_100ms <= 23'd0;
    else 
      cnt_100ms <= 23'd0 + 1'b1;

   always @ (posedge sys_clk or negedge sys_rst_clk)
    if(sys_rst_n == 1'b0)
      cnt_flag <= 1'b0;
    else if(cnt_100ms == CNT_MAX-1)
      cnt_flag <= 1'b1;
    else
      cnt_flag <= 1'b0;

   always @ (posedge sys_clk or negedge sys_rst_clk)
    if(sys_rst_n == 1'b0)
      data <= 20'd0;
    else if((data == DATA_MAX)&&(cnt_flag == 1'b1))
      data <= 20'd0;
    else if(cnt_flag == 1'b1)
      data <= data + 1'b1; 
    else
      data <= data;

  // 小数点赋值
  assign point = 6'b000_000
  // 符号位
  assign sign = 1'b0;   

  // 使能信号
  always @ (posedge sys_clk or negedge sys_rst_clk)
    if(sys_rst_n == 1'b0)
      seg_en <= 1'b0;
    else 
      seg_en <= 1'b1;
endmodule

2.3.2 数据生成模块testbench

module tb_data_gen();
  input reg sys_clk;
  input reg sys_rst_n;
  
  output wire [19:0] data;
  output wire [5:0] point;
  output wire sign;
  output wire seg_en;
  
  always #10 sys_clk = -sys_clk;
  
  module data_gen
#(
  .CNT_MAX (23'd4999_999),
  .DATA_MAX (20'd999_999)
)
(
  .sys_clk (sys_clk),
  .sys_rst_n,
  
  .data (data),
  .point (point),
  .sign (sign),
  .seg_en (seg_en)
);
    

endmodule

2.3.3 仿真

标签:动态显示,显示,22,clk,seg,sys,数码管,模块
From: https://www.cnblogs.com/Icer-newer/p/17521473.html

相关文章

  • Codeforces Round #222 (Div. 1) B - Preparing for the Contest
    先二分,输入排序,然后对于确定的天数,贪心判断是否可行。#include<iostream>#include<queue>#include<stack>#include<map>#include<set>#include<bitset>#include<cstdio>#include<algorithm>#include<cstring>#include<......
  • MedCalc v22.009 医学ROC曲线统计分析软件下载安装教程
    MedCalc是一款医学ROC曲线统计软件,用于ROC曲线分析的参考软件,医学工作者设计的医学计算器,功能齐全。它可以帮助医生快速作出普通的医学计算,从而对症下药。提供超过76种常用的规则和方法,包括:病人数据、单位参数、费用计算等等。甚至可以将图形另存为BMP,PNG,GIF,PCX,JPG或TIF文件,或......
  • cellos.20221115_030623类似的目录撑爆存储节点的root文件系统
    1、某Exadata客户,其中一个存储节点的根文件系统使用率超过90%,使用如下命令检查是哪些目录占用空间#du-sm*|sort-rn|head发现是/var/log目录下的东西占用大量空间。2、在/var/log目录下,存在大量cellos开头,但以日期结果的目录,这些目录占用大量磁盘空间。如下所示:drwxr-----7......
  • 2022-09-22-Lagrange
    妙插值插值是离散函数逼近的重要方法,利用它可通过函数在有限个点处的取值状况,估算出函数在其他点处的近似值。因为两点确定一条直线,三点确定一条抛物线,所以说\(k+1\)个点可以确定一个\(k\)次的多项式,这个确定的方式可以暴力的高斯消元直接\(k^3\)确定每一项的系数,但......
  • 【HMS Core】接入华为帐号,获取访问令牌失败,提示错误码20022
    ​【问题描述】通过AppAuth接入华为帐号,调用https://oauth-login.cloud.huawei.com/oauth2/v3/token接口时返回错误,"sub_error":20022,"error_description":“invalidredirect_uri”,"error":1101​ 【问题分析】根据官网接口错误码描述,是由于redirect_uri格式校验不......
  • STC89C52+DS18B20实现环境温度检测(数码管显示温度)
    一、项目介绍温度检测是工业自动化、生产线等众多领域中常见的应用场景之一,能及时准确地监测温度对于保障生产安全和提高生产效率有着非常重要的作用。而在现代的电子制造行业中,使用单片机和传感器等电子元器件进行温度检测已经成为了一个比较成熟的技术方案。本项目选择STC89C52单......
  • ubuntu22.04 安装 smb 文件共享服务
    安装和配置1.安装smb服务sudoapt-getinstallsamba2.创建一个用于分享的文件夹sudomkidr/home/cl/share3.使用smbpasswd添加用户,chenglong是我当前的用户名sudosmbpasswd-achenglong4.编辑smb.conf,在配置文件最后添加内容,替换用户名为自己的用户名[share]......
  • Nftables栈溢出漏洞(CVE-2022-1015)复现
    背景介绍NftablesNftables是一个基于内核的包过滤框架,用于Linux操作系统中的网络安全和防火墙功能。nftables的设计目标是提供一种更简单、更灵活和更高效的方式来管理网络数据包的流量。钩子点(HookPoint)钩子点的作用是拦截数据包,然后对数据包进行修改,比较,丢弃和放行等操作......
  • ORA-01122 ORA-01200故障处理---惜分飞
    联系:手机/微信(+8617813235971)QQ(107644445)标题:ORA-01122ORA-01200故障处理作者:惜分飞©版权所有[未经本人同意,不得以任何形式转载,否则有进一步追究法律责任的权利.]由于某种原因客户的数据库启动报ORA-01122ORA-01200错误让客户把system01.dbf文件发给我进行分析,发......
  • leetcode 22. 括号生成
    暴力枚举classSolution{publicList<String>generateParenthesis(intn){List<String>list=getAll(2*n);List<String>result=newArrayList<>();for(Stringitem:list){intvalue=0;......