四位数码管3641AS的FPGA实现

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

       一、数码管介绍

fpga四位数码管显示,FPGA,fpga开发

         四位数码管3641AS为一款共阴极的四位八段数码管,其具体的每一段为单个二极管,可通过压降实现点亮,通过控制单位多段二极管的点亮实现数字或字母等字符。

        共阴极:八段发光二极管的阴极端连接在一起,阳极端分开控制,使用时候公共端接地,要使哪个发光二极管亮,则对应的阳极端接高电平;
        共阳极:八段发光二极管的阳极端连接在一起,阴极端分开控制,使用时候公共端接电源,要使哪个发光二极管亮,则对应的阴极端接低地。

此处为共阴极,其具体原理图如下:

fpga四位数码管显示,FPGA,fpga开发

         如图所示:A—DP为输入端,全部在二极管的正极,二极管的负极共同接地。只有当A—DP输入为高电平的时候,二极管才导通,然后对应的段发亮。

二、实验功能

        点亮后两位数码管,通过按键实现数据的自加,即按下一次按键,数码管显示的数据加一。

三、代码讲解

1、顶层top文件

`timescale 1ns / 1ps
module top_seg_key(
input       sys_clk,            //时钟信号
input       sys_rst_n,          //复位信号
input       key,                //按键信号
output wire [3:0]    sel,       //输出四位位选
output wire [7:0]    seg_data   //输出八位段选
);

key key_inst(                   //按键模块
    .sys_clk       (sys_clk),
    .sys_rst_n     (sys_rst_n),
    .key           (key),
    .key_flag      (key_flag)
    );

seg seg_inst(                    //数码管显示模块
    .sys_clk        (sys_clk),
    .sys_rst_n      (sys_rst_n),
    .key_flag       (key_flag),
    .sel            (sel),
    .seg_data       (seg_data)
    );

endmodule

     此模块为顶层模块,例化了按键模块,数码管显示模块,输入了时钟信号,复位信号及按键信号,输出了四位位选信号及八位段选信号。

 2、数码管显示模块

`timescale 1ns / 1ps

module seg(
input               sys_clk,
input               sys_rst_n,
input               key_flag,
output reg [3:0]    sel,
output reg [7:0]    seg_data
    );

parameter       cnt_1ms = 50_000; //1ms;
reg     [31:0]  cnt;
reg     cnt_flag;   //1ms标志
reg     [2:0]   cnt_sel;   //位选计数
reg        state = 0;

//--------------计数1ms------------------//
always @(posedge sys_clk or negedge sys_rst_n)
if(!sys_rst_n)
    cnt <= 0;
else
begin
    if(cnt >= cnt_1ms - 1)
        cnt <= 0;
    else
        cnt <= cnt + 1;
end

always @(posedge sys_clk or negedge sys_rst_n)
if(!sys_rst_n)
    cnt_flag <= 1'b0;
else 
begin
    if(cnt == cnt_1ms - 1)
        cnt_flag <= 1'b1;
    else
        cnt_flag <= 1'b0;
end

always @(posedge sys_clk or negedge sys_rst_n)    //如想实现四位数码管显示,可改变state的值
if(!sys_rst_n)
    state <= 1'b0;
else
begin
    if(cnt_flag == 1)
        state <= ~state;
    else
        state <= state;
end
reg [15:0]  num;
reg [15:0]  cnt_s = 0;

always @(posedge sys_clk or negedge sys_rst_n)
if(!sys_rst_n)
    cnt_s <= 0;
else 
begin
    if(key_flag == 1 && cnt_s == 19)
        cnt_s <= 0;
    else if(key_flag == 1)
        cnt_s <= cnt_s + 1;
    else
        cnt_s <= cnt_s;
    
end

always @(posedge sys_clk or negedge sys_rst_n)
if(!sys_rst_n)
    sel <= 4'b1111;
else
begin
    case(state)                            //两个值实现两位数码管显示,四位可依此改变
        0:
            begin
                sel <= 4'b1110;
                num <= cnt_s % 10;
            end
        1:
            begin
                sel <= 4'b1101;
                num <= cnt_s /10 % 10;
            end
    default: sel <= 4'b1111;
    endcase
end

always @(posedge sys_clk or negedge sys_rst_n)
if(!sys_rst_n)
    seg_data <= 8'b0000_0000;
else
begin
    case(num)
        0:seg_data <= 8'b0011_1111; //dp g f e d c b a
        1:seg_data <= 8'b0000_0110;
        2:seg_data <= 8'b0101_1011;
        3:seg_data <= 8'b0100_1111;
        4:seg_data <= 8'b0110_0110;
        5:seg_data <= 8'b0110_1101;
        6:seg_data <= 8'b0111_1101;
        7:seg_data <= 8'b0000_0111;
        8:seg_data <= 8'b0111_1111;
        9:seg_data <= 8'b0110_1111;
    default:seg_data <= 8'b0000_0000;
    endcase
end

endmodule 

        数码管显示模块,动态显示,通过一个1ms计数器进行位选,即每一位之间的位选间隔为1ms。此处数码管显示原理为视觉暂留效应及余晖效应。此外有数码管的静态显示为基础,不做更多原理赘述。

3、按键模块

`timescale 1ns / 1ps

module key(
input               sys_clk,
input               sys_rst_n,
input               key,
output  reg         key_flag            //按键标志信号
    );
parameter       cnt_10ms =  500_000;    //10ms
reg [31:0]  cnt = 0;

always @(posedge sys_clk or negedge sys_rst_n)
if(!sys_rst_n)
    cnt <= 0;
else
begin
    if(key)
        cnt <= 0;
    else if(cnt >= cnt_10ms - 1)
        cnt <= cnt;
    else
        cnt <= cnt + 1;
end

always @(posedge sys_clk or negedge sys_rst_n)
if(!sys_rst_n)
    key_flag <= 1'b0;
else
begin
    if(cnt == cnt_10ms - 2)
        key_flag <= 1'b1;
    else
        key_flag <= 1'b0;
end
    
endmodule

        按键模块的主要部分为按键消抖。由于机械按键的物理特性,按键被按下的过程中,存在一段时间的抖动,同时在释放按键的过程中也存在抖动,这就导致在识别的时候可能检测为多次的按键按下,而通常检测到一次按键输入信号的状态为低电平,就可以确认按键被按下了,所以我们在使用按键时往往需要消抖,以确保按键被按下一次只检测到一次低电平。此处通过计数10ms,输出正确的按键标志信号。文章来源地址https://www.toymoban.com/news/detail-743743.html

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

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

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

相关文章

  • 【FPGA】Verilog:实现十六进制七段数码管显示 | 7-Segment Display

    写在前面: 本章主要内容为理解七点数码管显示的概念,并使用 Verilog 实现。生成输入信号后通过仿真确认各门的动作,通过 FPGA 检查在 Verilog 中实现的电路的操作。 七段数码管是利用多重输出功能的非常有用的元件。该元件用于字符化,如十进制、十六进制数等。适当配

    2024年02月02日
    浏览(47)
  • FPGA实战------数码管(1)静态显示

    led的花样点灯差不多了吧,接下来学习另一个基础的东西,数码管。 数码管在FPGA开发板上占得位置不小,在工程开发中也必不可少,比如后边的温度传感器就会用数码管来显示温度。这里先不多介绍温度传感器,过一段时间就会发了。本篇文章先用数码管来做静态显示。也

    2024年02月04日
    浏览(45)
  • [FPGA 学习记录] 数码管动态显示

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

    2024年02月04日
    浏览(50)
  • FPGA基础设计之数码管显示

    数码管是一种半导体发光器件,其基本单元是发光二极管。一般分为七段数码管和八段数码管,多的一段是小数点。也有其他如N型、米型数码管以及16段、24段管等。本次设计的是八段数码管 公阴极数码管高电平亮,公阳极数码管低电平亮。AC620上搭载的是公阳极数码管。 数

    2023年04月26日
    浏览(46)
  • [FPGA 学习记录] 数码管静态显示

    数码管静态显示 在我们的许多项目设计当中,我们通常需要一些显示设备来显示我们需要的信息。我们可以选择的显示设备有很多,而我们的数码管就是使用最多、最简单的显示设备之一。数码管它是一种半导体发光器件,它具有响应时间短、体积小、重量轻、寿命长的优点

    2024年02月03日
    浏览(51)
  • Arduino:实现四位LED共阴极数码管显示——从认识、连接、程序到实现功能

    (1)一位八段共阴极数码管        在认识四位共阴极数码管之前我先介绍一下一位八段共阴极数码管。如左图所示为以为数码管的实物图,其中它共有10个引脚,且上下各五个。 小数点位于右下时为数码管正面 ,在四位共阴极数码管中也是如此,在连接组装时尤为重要。

    2024年02月02日
    浏览(48)
  • 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日
    浏览(41)
  • FPGA项目(5)--FPGA控制数码管动态显示的原理

            数码管是现在电子产品上常用的显示器件,它有驱动简单、显示清晰、价格低廉等优势。数码管的实物图:          数码管的内部结构图如下所示:          从图中可以看出,它由八个段组成,即A B C D E F G DP(小数点),只要将这八个段按规律组合点亮,就

    2024年02月11日
    浏览(51)
  • 二、19【FPGA】数码管动态显示实验

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

    2023年04月08日
    浏览(37)
  • FPGA学习汇总(六)----数码管显示(1)

    目录 概念 单个数码管显示单个数字  操作  代码  现象 分析 四个数码管定时单个显示数字 分析 代码 四个数码管同时显示 分析 代码 现象

    2024年02月01日
    浏览(50)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包