数码管动态显示

这篇具有很好参考价值的文章主要介绍了数码管动态显示。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

数码管动态显示

一、分析原理图

数码管动态显示

  • 8个数码管 SEL
  • 8个显示电路 a,b,c,d,e,f,g,h SEG
  • 要使哪一个亮,则将SEL[X]置为1,X线拉低--------->使用一个3-8译码器,根据cnt[2:0]来选择哪一个数码管亮
  • 所以不同的数都可以根据SEL和SEG来进行选择
    数码管动态显示
  • 根据输入的不同的数来进行显示,一共有8个数码管,一个数的范围是0-f 。需要4位,一共8个,所以需要32位------->[31:0] Disp_data
  • 使用一个3-8译码器来选择,显示哪一个数字

数码管动态显示

二、代码实现

  1. 首先由于每个数码管是串行显示的(节省管脚数),如果需要同时显示,需要每个数码管在20ms内亮一次,达到视觉暂留的现象。
    所以要求每个数码管在每20ms内都要点亮一次,所以20ms/8=2.5ms,所以每个灯点亮时间需要小于2.5ms。假设计数器以1ms的周期来计数

  2. ACX720的时钟频率是50M,我们所需的是1K的时钟周期。所以要进行分频。周期为1ms,所以每500微秒翻转一次。也即计数500000ns/20ns=25000次

  3. 一般不能直接posedge 不是clk的时钟,不稳定且有延迟。可以改成使能时钟,例如EN。 所以计数一个周期即可。50000次数码管动态显示文章来源地址https://www.toymoban.com/news/detail-418772.html

//计数器
reg [15:0] div_cnt;
always @(posedge Clk or negedge Reset_n) begin
    if (!Reset_n) 
        div_cnt<=0;
    else if (div_cnt>=50000-1) 
        div_cnt<=0;
    else 
        div_cnt<=div_cnt+1'b1;
end

//这样写时钟信号的高电平只持续一个时钟周期,只有一个突起--P26 17C 20min
reg clk_lk;
always @(posedge Clk or negedge Reset_n) begin
    if (!Reset_n) 
        clk_lk<=0;
    else if (div_cnt>=50000-1) 
        clk_lk<=1;
    else
        clk_lk<=0;
end

//每过一个周期选择器加一,一共8个选择器,所以刚好[2:0]
reg [2:0] num_cnt;
always @(posedge Clk or negedge Reset_n) begin
    if (!Reset_n) 
        num_cnt<=0;
    else if(clk_lk) 
        num_cnt<=num_cnt+1;
end
  1. 根据不同的选择器,选择点亮哪一个数码管和需要显示的数字
	//3-8译码器
    always @(posedge Clk)
        case(num_cnt)
            0:SEL<=8'b00000001;
            1:SEL<=8'b00000010;
            2:SEL<=8'b00000100;
            3:SEL<=8'b00001000;
            4:SEL<=8'b00010000;
            5:SEL<=8'b00100000;
            6:SEL<=8'b01000000;
            7:SEL<=8'b10000000;
        endcase
    //选择输入的8个数中的一个
    reg [3:0] disp_tmp;
    always @(posedge Clk)
        case(num_cnt)
            7:disp_tmp=Disp_data[31:28];
            6:disp_tmp=Disp_data[27:24];
            5:disp_tmp=Disp_data[23:20];
            4:disp_tmp=Disp_data[19:16];
            3:disp_tmp=Disp_data[15:12];
            2:disp_tmp=Disp_data[11:8];
            1:disp_tmp=Disp_data[7:4];
            0:disp_tmp=Disp_data[3:0];
        endcase
  1. 通过查找表选择哪一段点亮
 	//查找表-通过具体的值输出哪几段
    always @(posedge Clk)
        case(disp_tmp)
            0:SEG=8'hc0;
            1:SEG=8'hf9;
            2:SEG=8'ha4;
            3:SEG=8'hb0;
            4:SEG=8'h99;
            5:SEG=8'h92;
            6:SEG=8'h82;
            7:SEG=8'hf8;
            8:SEG=8'h80;
            9:SEG=8'h90;
            4'ha:SEG=8'h88;
            4'hb:SEG=8'h83;
            4'hc:SEG=8'hc6;
            4'hd:SEG=8'ha1;
            4'he:SEG=8'h86;
            4'hf:SEG=8'h8e;
        endcase 

三、ACX720开发板的板级实验

  • 通过移位寄存器和输出锁存器来实现串转并的功能。
  • 例如下图:在四个周期之后,所有的移位寄存器都接收到data的值,再统一通过LATCH信号,传输给D,实现并行输出。
    数码管动态显示
  • 这个功能就在74HC595里面实现。
    数码管动态显示
  • FPGA需要通过74HC595这个芯片把16位的数据(SEL+SEG) 变为并行端口用来驱动数码管
  • FPGA通过三根数据线,也就是图中的Clk、Data、Latch信号
  • 3.3V供电情况下,取SHCP的时钟频率为12.5MHz

到了这里,关于数码管动态显示的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 实验(四)数码管动态显示实验

    一.实验目的、内容、仪器 实验目的: 1.熟悉数码管的功能和使用 2.了解位选和段选,和动态显示的原理 了解74HC138的引脚功能。 实验内容:接共阴极数码管,要求动态显示(HELLOC51),动态扫描显示即轮流向各位数码管送出字形码和相应的位选。 实验仪器:7SEG-MPX8-CC:八位数码管共

    2024年02月08日
    浏览(30)
  • 单片机——数码管动态显示

    1.头文件和定义,代码还使用了 sbit 定义来声明了两个变量 duan 和 wei,它们实际上是 P2.6 和 P2.7 端口的别名,用于控制数码管的段选和位选信号。这种方法可以使代码更具可读性,并提高代码的可维护性。定义无符号整数便于后面应用。 2.使用一个 16 个元素的数组 table,该数

    2024年02月11日
    浏览(30)
  • FPGA(5)数码管静态显示与动态显示

    目录 一、数码管静态显示 二、数码管动态显示 1、变量定义 2、定时(60us) 3、动态显示 代码 FPGA的数码管有4位,8段 。( 位和段都是共阳,即低电平有效 )     位选的4位(二进制):分别为第1、2、3、4位数码管。 段选的8位(二进制):分别为第h、g、f、e、d、c、b、a段

    2023年04月12日
    浏览(32)
  • [FPGA 学习记录] 数码管动态显示

    数码管动态显示 在上一小节当中,我们对数码管的静态显示做了一个详细的讲解;但是如果单单只掌握数码管的静态显示这种显示方式是远远不够的,因为数码管的静态显示当中,被选中的数码位它们显示的内容都是相同的,这种显示方式在我们的实际应用当中显然是不合适

    2024年02月04日
    浏览(39)
  • C51单片机-共阳极数码管循环显示数字0至9,共阴极数码管循环显示5201314(动态)

    keil uVision4界面: proteus仿真界面:

    2024年02月06日
    浏览(47)
  • 单片机数码管显示原理

    1、数码管的基本介绍 先给大家提供一张原理图看一下,如图1所示。 图1 数码管原理图 这是比较常见的数码管的原理图,我们板子上一共有6只数码管。前边有了LED小灯的学习,数码管学习就会轻松的多了。从图1能看出来,数码管共有a,b,c,d,e,f,g,dp这8个段,而实际上,这8个段

    2024年02月07日
    浏览(30)
  • 单片机-如何让数码管动态显示

    单片机IO口输出难稳定,需要数码管与单片机连接需要增加驱动电路, 使用 74HC245 abcdefgDP并联导出  74HC245 对数码管进行驱动,P0 是输出电流 来驱动各个段的 驱动芯片 增加电阻 是为了防止电流过大烧坏数码管 。P0输出段选的 共阴 就是所有阴极 连接 在一起,连接在公共端

    2024年02月09日
    浏览(34)
  • STM32-GPIO数码管动态显示

    目录 一、数码管原理 1、LED数码管的结构 2、LED数码管工作原理 3、数码管动态显示 1)动态显示的概念 2)动态显示的接口 二、代码的实现 三、仿真结果展示   本篇文章将继续进一步了解GPIO外设输出模式 知道这一部分的朋友可以直接点击目录部分跳过这段跳过 ,这里介绍

    2023年04月08日
    浏览(31)
  • 二、19【FPGA】数码管动态显示实验

    学习说明此文档为本人的学习笔记,注重实践,关于理论部分会给出相应的学习链接。 学习视频:是根据野火FPGA视频教程——第二十二讲 https://www.bilibili.com/video/BV1nQ4y1Z7zN?p=3 “天下武功唯快不破”    “看到的不一定为真” 眼睛的视觉暂留:光信号传入大脑需要短暂时间,

    2023年04月08日
    浏览(29)
  • 51单片机控制数码管动态显示

    首先打开proteus,导入8位数码管和89c51。 然后如图连线,分清断码和位码, 断码就是一个数码管的7个LED灯。 位码:就是第几位显示,由于是共阴极,所以哪位接地就显示哪位。 下面通过改变位码的接线就可以看出不同的效果 下面就编写程序,从第1位到第8位显示从0到7的八

    2023年04月21日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包