FPGA开发——数码管的使用(二)

news2024/11/16 4:23:10

一、概述

     在上一篇文章中我们针对单个数码管的静态显示和动态显示进行了一个设计和实现,这篇文章中我们针对多个数码管同时显示进行一个设计。这里和上一篇文章唯一不同的是就是数码管位选进行了一个改变,原来是单个数码管的显示,所以位选就直接赋值就可以了,但在本篇文章中一次性使用了多个数码管,所以在位选信号中我们就需要进行一个更改。

实验的重难点

在进行多位数码管的显示时,最大的难点就是怎样选择每个数码管的位选,以及每个数码管之间显示的时间间隔,这时本次设计中所设计的两个重难点,只要掌握着两个点,设计也就变得非常简单。

二、工程实现

1、设计文件的编写

       在针对上面的两个难点,我们在编写代码时拼接语法的方式实现位选的循环移动,将不同数码管显示的值使用位选变量作为条件写在一个case语句中,以实现我们预设的012345的字符显示。这里在对8段发光二极管显示字符进行设计时,我们和前一篇文章一样需要先确认时共阴极还是共阳极(这里使用的是共阳极),如果时共阴极就是高电平驱动,反之,就是低电平驱动。通过给8段对应的二极管进行0或者1的赋值,共同组成不同的字符。

module seg0(
  input  clk,
  input  rst_n,
  output reg [5:0] seg_sel,//位选
  output reg [7:0] seg_dual//段选
);
localparam  ZERO  = 8'b1100_0000, //共阳极段码
            ONE   = 8'b1111_1001,
            TWO   = 8'b1010_0100,
            THREE = 8'b1011_0000,
            FOUR  = 8'b1001_1001,
            FIVE  = 8'b1001_0010;
reg [15:0] cnt;//ms计数器
wire       add_cnt;
wire       end_cnt;
reg     [4:0]   flag;
wire            add_flag;
wire            end_flag;


always @(posedge clk or negedge rst_n)begin
    if(!rst_n)
      cnt<=0;
    else if(add_cnt)begin
      if(end_cnt)
        cnt<=0;
      else
        cnt<=cnt+1'b1;
    end
end
assign add_cnt=1'b1;
assign end_cnt=add_cnt && (cnt==50_000-1);

always @(posedge clk or negedge rst_n)begin
  if(!rst_n)
    seg_sel<=6'b111_110;
  else if(end_cnt)
    seg_sel<={seg_sel[4:0],seg_sel[5]};
end

always @(posedge clk or negedge rst_n)begin
  if(!rst_n)
    seg_dual<=8'b1111_1111;
  else begin
    case (seg_sel)
      6'b111_110:seg_dual<=ZERO ;
      6'b111_101:seg_dual<=ONE  ;
      6'b111_011:seg_dual<=TWO  ; 
      6'b110_111:seg_dual<=THREE;
      6'b101_111:seg_dual<=FOUR ;
      6'b011_111:seg_dual<=FIVE ;
      default: ;
    endcase
  end 
end
endmodule 

2、测试文件编写

这里很简单,我就不进行波形仿真了,下面是测试文件,感兴趣的可以去仿真一下,我就直接在后面给出下板验证的结果。

//定义时间尺度
`timescale 1ns/1ns
module seg0_tb ;

//输入信号定义
reg  clk;
reg rst_n;
wire [7:0] seg_dual;
wire [5:0] seg_sel;
//模块例化
seg0 seg_inst(
    /*input */.clk      (clk     ),
    /*input */.rst_n    (rst_n   ),
    /*output*/.seg_sel  (seg_sel ),
    /*output*/.seg_dual (seg_dual)

);
//激励信号产生
parameter CLK_CLY = 20;
//时钟
initial clk=1;
always #(CLK_CLY/2)clk=~clk;

//复位
initial begin
    rst_n= 1'b0;
    #(CLK_CLY*3);
    #5;//复位结束避开时钟上升沿
    rst_n= 1'b1;
end
endmodule

3、下板验证

图片中我们可以看到6个数码管从0显示到5,成功设计成多个数码管同时显示。

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

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

相关文章

Android Studio运行报错:module java.base dose not “opens java.io“ to unnamed module

今天第一次使用Android Studio运行一个安卓工程&#xff0c;报如图错误,应该是环境问题。 解决&#xff1a; 右上角的设置图标->settings->Buid,Execution,Deployment->Build Tools->Gradle->Gradle JDK->选择本地环境的java_home jdk&#xff08;怎么安装…

docker镜像不可用

现在阿里、163等docker镜像基本不能使用&#xff0c;不能pull镜像了。 1.腾讯云内部 腾讯云服务器内部可用镜像&#xff08;当然&#xff0c;需要先有一个腾讯云服务器&#xff09;&#xff1a;https://mirror.ccs.tencentyun.com 配置方法&#xff0c;vi /etc/docker/daemon…

C++—— IO流

一、C语言的输入与输出 C语言中我们用到的最频繁的输入输出方式就是scanf()和printf()。 scanf()&#xff1a;从标准输入设备&#xff08;键盘&#xff09;中读取数据&#xff0c;并将值存放在变量中。 printf()&#xff1a;将指定的文字/字符串输出到标准输出设备&#xff08;…

Python 聊天机器人项目-8-学习使用 NLTK 和 Keras 构建您的第一个聊天机器人

一、前言 该文章仅作为个人学习使用 二、正文 项目源代码&#xff1a;Python 聊天机器人项目 - 学习使用 NLTK 和 Keras 构建您的第一个聊天机器人 - DataFlair (data-flair.training) 数据集&#xff1a;https://data-flair.training/blogs/download-python-chatbot-data-…

Web3时代:科技与物联网的完美结合

随着信息技术的不断进步和物联网应用的普及&#xff0c;Web3技术作为下一代互联网的重要组成部分&#xff0c;正逐渐与物联网技术深度融合&#xff0c;共同开创了新的科技时代。本文将深入探讨Web3技术与物联网的结合&#xff0c;探索它们如何共同推动未来科技发展的新趋势和应…

【32单片机篇】项目:智能排队控制系统

一、项目需求 1. 红外传感器检测有人通过并计数&#xff1b; 2. 计数值显示在LCD1602&#xff1b; 3. 允许通过时&#xff0c;LED1闪烁&#xff0c;蜂鸣器不响&#xff0c;继电器不闭合&#xff1b; 4. 不允许通过时&#xff0c;LED2闪烁&#xff0c;蜂鸣器响&#xff0c;继电…

工信部:2024上半年我国信息安全领域收入909亿元

2024年上半年软件业经济运行情况 上半年&#xff0c;我国软件和信息技术服务业&#xff08;以下简称“软件业”&#xff09;运行态势良好&#xff0c;软件业务收入和利润均保持两位数增长&#xff0c;软件业务出口收入增速由负转正&#xff0c;主要大省持续向好发展。 一、总…

光纤基础科普

这部分主要介绍光纤的常见接口&#xff08;四种&#xff09;、光纤传输的种类、光模块的封装类型。 文章目录 一、光纤的常见接口二、光模块封装三、光纤传输种类 一、光纤的常见接口 光纤接口种类繁多&#xff0c;这里给出常用的四种 &#xff08;1&#xff09;SC 型光纤接…

C++静态成员变量和静态成员函数

演示代码如下&#xff1a; #include<iostream> using namespace std;class Person { public://静态成员函数 所有对象共享一个函数&#xff0c;且只能调用静态成员变量 ******static void func(){m_A 300;cout << "静态成员函数调用" << endl;}/…

Charles抓包工具系列文章(七)-- Rewrite工具的应用示例

一、背景 客户端通过域名访问后端服务,在api网关层,会判断path的前缀,默认/api开头的请求都转发至后端服务A。 当前缀是/assist/api开头,请求将转发至后端服务B(部署在192.168.80.226,便于测试对比) 在不改动kong网关配置的情况下,现需要把后者的请求转发至192.168.…

RxJava基础使用

Rx思想 事件从起点流向终点。 过程中可以对事件进行拦截&#xff0c;拦截时可以对事件进行处理&#xff0c;处理后将处理后的事件继续流向终点。 终点接收上一次处理后的事件。 获取网络图片并显示 基础实现 使用Observable.just(path) 创建图片路径的Observable。 使用m…

reshape函数及MATLAB应用

reshape 函数在 MATLAB 中是一个非常有用的函数&#xff0c;通过重新排列现有元素来重构数组。它允许你重新调整数组&#xff08;或矩阵&#xff09;的尺寸&#xff0c;而不改变其数据。这个函数特别适用于当你需要将一个矩阵或数组从一种结构转换为另一种结构时&#xff0c;只…

黑神话悟空是什么游戏 黑神话悟空配置要求 黑神话悟空好玩吗值得买吗 黑神话悟空苹果电脑可以玩吗

《黑神话&#xff1a;悟空》的类型定义是一款单机动作角色扮演游戏&#xff0c;但实际体验后会发现&#xff0c;游戏在很多设计上采用了「魂like」作品的常见元素。根据个人上手试玩&#xff0c;《黑神话&#xff1a;悟空》的推进节奏比较接近魂类游戏&#xff0c;Boss战也更像…

数据结构--双链表,循环链表,静态链表代码(王道书上代码手敲!!!)c++

目录 1.带头结点的双链表的初始化&#xff0c;判断链表是否为空&#xff0c;前插&#xff0c;后插&#xff0c;按位序插&#xff0c;删除后继节点&#xff0c;按位查找&#xff0c;按之查找&#xff0c;清空链表&#xff0c;销毁链表&#xff0c;遍历打印列表操作 2. 循环单链…

linux目录结构和重要文件

1. 目录介绍 操作Linux命令行&#xff0c;最基本的对象就是目录和文件&#xff0c;因为Linux中一切事物都是基于文件的&#xff0c;而目录就是文件的文件夹&#xff0c;所以接下来对一些基础且核心的文件目录管理命令进行说明。 1.1 目录结构 Linux系统目录结构是一个有层次…

达梦数据库的系统视图v$dict_cache

达梦数据库的系统视图v$dict_cache 达梦数据库系统视图V$DICT_CACHE主要用于监控和管理字典缓存的状态。字典缓存是数据库系统中用于存储元数据信息&#xff08;如表结构、索引信息等&#xff09;的缓存区域&#xff0c;它对于提高数据库查询性能至关重要。通过查询V$DICT_CAC…

Python 报错 SyntaxError: EOL while scanning string literal

Python 报错 SyntaxError: EOL while scanning string literal 在编程领域&#xff0c;尤其是使用Python这类解释型语言时&#xff0c;SyntaxError: EOL while scanning string literal 是一种常见的错误。这种错误通常发生在Python解释器尝试解析代码时&#xff0c;遇到了意外…

L-H、BytePlus 和 INOVAI在东京成功举办Web3 AI未来峰会

7月30日&#xff0c;L-H (Legendary Humanity)、字节跳动旗下BytePlus 和日本知名Web3孵化器 INOVAI 在东京联合举办Web3&AI未来峰会&#xff0c;水滴资本等行业重磅机构共同参与此次峰会&#xff0c;探讨AI与 Web3的融合性未来。 在此次峰会上&#xff0c;L-H (Legendary…

区块链软硬件协同,做产业数字化转型的“安全官” |《超话区块链》直播预告

今年的两会政府工作报告提出&#xff1a;“产业的数字化&#xff08;行业数字化转型&#xff09;是发展新质生产力的核心&#xff0c;是推动产业升级实现高质量发展的关键。”全面推进产业数字化&#xff0c;需要技术创新与产业应用深入协同&#xff1b;立足可持续发展的长远目…

动态面板数据实证模型及 Stata 具体操作步骤

目录 一、文献综述 二、理论原理 三、实证模型 四、稳健性检验 五、程序代码及解释 六、代码运行结果 一、文献综述 在经济学和社会科学的广袤领域中&#xff0c;动态面板数据模型逐渐成为研究者们探索复杂现象和关系的有力工具。众多杰出学者凭借这一模型在多个研究方向上…