FPGA开发——数码管的使用

news2024/9/19 10:51:23

一、概述

在我们的日常开发中,数字显示的领域中用得最多的就是数码管,这篇文章也是围绕数码管的静态显示和动态显示进行一个讲解。

1、理论

(1)数码管原理图

在对数码管进行相关控制时,其实就是对于8段发光二极管和一个位选信号进行控制,也就是我们熟悉的段选和位选。段选就包括a,b,c,d,e,f,g,h这八个二极管,位选就是选择某个二极管工作的一个简单引脚。

2、共阴极和共阳极的判断

市场上我们常见的数码管有共阴极啊和共阳极两种信号,其外观上没有什么区别,都是通过原理图进行判断和区分,两种数码挂对应的驱动方式也不一样。共阴极是高电平驱动,共阳极是低电平驱动。所谓的共阴极和共阳极实际上就是看公共引脚接在正极还是负极上。

 

3、本次使用的数码管原理图

其实在原理图中并没有明确说明是共阴极还是共阳极,我们需要通过SEL位选信号进行判断。在最下面的三极管我们可以看到只有当SELx_T为低电平时三极管才会接通,所以这里通过判断是共阳极,通过低电平触发。

 二、工程实现

1、单个数码管静态显示

(1)、设计文件

新建seg.v文件,如下:

这里不需要使用任何时序功能,只是简单显示一个数字,直接就用连续赋值进行实现。这里代码过于简单,就不去进行仿真和下板验证了。

module top(
    output  seg_sel,
    output [7:0] seg_dual

);

assign seg_sel=1'b0;//选择第一个数码管
assign seg_dual=8'b11_000_000;//数码管显示0

2、单个数码管实现动态显示

(1)、设计文件

//分频器
module seg0(
  input  clk,
  input  rst_n,
  
  input  seg_sel,//位选
  output reg [7:0] seg_dual0//段选
);
localparam  ZERO  = 8'b11100_0000, //共阳极段码
            ONE   = 8'b11111_1001,
            TWO   = 8'b11010_0100,
            THREE = 8'b11011_0000,
            FOUR  = 8'b11001_1001,
            FIVE  = 8'b11001_0010,
            SIX   = 8'b11000_0010,
            SEVEN = 8'b11111_1000,
            EIGHT = 8'b11000_0000,
            NINE  = 8'b11001_0000,
            A     = 8'b11000_1000,
            b     = 8'b11000_0011,
            c     = 8'b11100_0110,
            d     = 8'b11010_0001,
            E     = 8'b11000_0110,
            f     = 8'b11000_1110;
reg [26:0] cnt;
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_000-1);

always @(posedge clk or negedge rst_n)begin
  if(!rst_n)
    flag<=0;
  else if(add_flag)begin
    if(end_flag)
      flag<=0;
    else
      flag<=flag+1'b1;
  end
end
assign add_flag=end_cnt;
assign end_flag=add_flag && (flag==16-1);

always @(posedge clk or negedge rst_n)begin
  if(!rst_n)
    seg_dual0<=8'b1111_1111;
  else begin
    case (flag)
      4'd0:seg_dual0<=ZERO ;
      4'd1:seg_dual0<=ONE  ;
      4'd2:seg_dual0<=TWO  ; 
      4'd3:seg_dual0<=THREE;
      4'd4:seg_dual0<=FOUR ;
      4'd5:seg_dual0<=FIVE ;
      4'd6:seg_dual0<=SIX  ;
      4'd7:seg_dual0<=SEVEN;
      4'd8:seg_dual0<=EIGHT;
      4'd9:seg_dual0<=NINE ;
      4'd10:seg_dual0<=A ;
      4'd11:seg_dual0<=b  ;
      4'd12:seg_dual0<=c;
      4'd13:seg_dual0<=d;
      4'd14:seg_dual0<=E ;
      4'd15:seg_dual0<=f ;
      default: ;
    endcase
  end 
end
endmodule 

(2)、测试文件

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

//输入信号定义
reg  clk;
reg rst_n;

wire [7:0] seg_dual0;
wire  seg_sel;
defparam  seg0_inst.TIME_1s=500;
//模块例化
seg0 seg0_inst(
    /*input */.clk      (clk     ),
    /*input */.rst_n    (rst_n   ),
    /*output*/.seg_sel  (seg_sel ),
    /*output*/.seg_dual0 (seg_dual0)

);
//激励信号产生
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)、波形图仿真

在波形图中我们可以看到段选从8'b11_000_000——8'b11_000_1110,也就是从0——F动态显示。

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

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

相关文章

LLM还能拿来做异常检测

我从csdn上一路找原文章找到了这一篇 它使用distilbert-base-uncased这个模型给表格数据做文本embedding&#xff0c;并且期望这个LLM已经蕴含了合理的房产相关信息&#xff0c;因此对于没见过的异常房产信息&#xff0c;一定会产生一个与大多数信息embedding都不一样的embedd…

【每日一题】【逆推法 + 贪心】【数学】造数 河南萌新联赛2024第(一)场:河南农业大学 A题 C++

河南萌新联赛2024第&#xff08;一&#xff09;场&#xff1a;河南农业大学 A题 造数 题目描述 样例 #1 样例输入 #1 2样例输出 #1 1样例 #2 样例输入 #2 5样例输出 #2 3做题思路 本题可以用逆推法 将三种操作反过来变为 − 1 , − 2 , / 2 -1 , -2 , /2 −1,−2,/2 …

Linux云计算 |【第二阶段】AUTOMATION-DAY4

主要内容&#xff1a; 部署Ansible、Ansible基础命令&#xff08;Ansible ad-hoc命令格式、Ansible-doc帮助&#xff09;、Ansible模块常用&#xff1a;脚本与命令模块、文件与账户模块、软件与服务模块、逻辑卷模块 补充&#xff1a;touch 除创建文件外&#xff0c;若再创建相…

DBMotion x Chat2DB:高效迁移,优雅同步,数据腾飞不再愁

DBMotion 基本介绍 数据传输服务DBMotion是一款轻量、绿色的数据库迁移、同步、校验工具。支持国产化数据迁移、支持容灾演练、支持两地三中心和异地多活&#xff1b;源库无感知、简单易集成、丝滑高性能。助您在多云之间随心迁移、自由容灾。 功能介绍 已支持的数据库 v1.…

尚品汇-布隆过滤器解决缓存穿透问题(二十四)

目录&#xff1a; &#xff08;1&#xff09;布隆过滤器 &#xff08;2&#xff09;布隆过滤器实现方式 &#xff08;3&#xff09;CompletableFuture异步编排 &#xff08;4&#xff09;CompletableFuture介绍 &#xff08;1&#xff09;布隆过滤器 &#xff08;2&#…

web基础及http协议、

⼀、web基本概念和常识 Web&#xff1a;为⽤户提供的⼀种在互联⽹上浏览信息的服务&#xff0c;Web 服 务是动态的、可交 互的、跨平台的和图形化的。Web 服务为⽤户提供各种互联⽹服务&#xff0c;这些服务包括信息浏览 服务&#xff0c;以及各种交互式服务&#xff0c;包括聊…

vue3警告 `markRaw` or using `shallowRef` instead of `ref`.

百度翻译&#xff1a;Vue收到了一个组件&#xff0c;该组件被制成了一个反应对象。这可能会导致不必要的性能开销&#xff0c;应该通过用“markRaw”标记组件或使用“shallowRef”而不是“ref”来避免。 消除办法是 使用markRaw或者shallowRer代替ref

从原理到实践:开发视频美颜SDK与主播美颜工具详解

本篇文章&#xff0c;笔者将深入探讨视频美颜SDK的开发原理和实践应用&#xff0c;重点介绍如何打造一款功能强大的主播美颜工具。 一、视频美颜的基本原理 视频美颜的核心在于图像处理技术&#xff0c;主要包括面部识别、图像增强和特效处理。 1.面部识别 常见的面部识别算…

设计结构——循环结构

循环结构 什么是循环 代码的重复执行&#xff0c;就叫做循环。 循环的分类 无限循环&#xff1a;程序设计中尽量避免无限循环。(程序中的无限循环必须可控) 有限循环&#xff1a;循环限定循环次数或者循环的条件。 循环的构成 循环体循环条件 循环实现的三要素 循环变量…

深度学习项目 -7-使用 Python 的手写数字识别

一、前言 该文章仅作为个人学习使用 二、正文 项目源代码&#xff1a;深度学习项目 - 使用 Python 进行手写数字识别 - DataFlair (data-flair.training) 数据集&#xff1a;​​​​​​​https://drive.google.com/open?id1hJiOlxctFH3uL2yTqXU_1f6c0zLr8V_K Python 深…

AB安全产品详解Guard master Safety Products

AB安全产品详解Guard master Safety Products

程序员面试中的“八股文”:是助力还是阻力?

“八股文”在实际工作中是助力、阻力还是空谈&#xff1f; 作为现在各类大中小企业面试程序员时的必问内容&#xff0c;“八股文”似乎是很重要的存在。但“八股文”是否能在实际工作中发挥它“敲门砖”应有的作用呢&#xff1f;有IT人士不禁发出疑问&#xff1a;程序员面试考…

深入浅出mediasoup—拥塞控制

拥塞控制对于不同网络条件下保证音视频传输质量非常重要。mediasoup 移植了 WebRTC 的 GCC 模块&#xff0c;嵌入到服务器&#xff0c;使得 mediasoup 具备了和 WebRTC 客户端一样的拥塞控制能力。为了使 GCC 能够与 mediasoup 框架良好交互&#xff0c;mediasoup 做了很多适配…

Large Models for Time Series and Spatio-Temporal Data: A Survey and Outlook

基本信息 博客贡献人 谷雨 作者 Ming Jin, Qingsong Wen, et al. 标签 大语言模型、预训练基础模型、大模型、时间序列、时空数据、时态数据 摘要 时态数据&#xff0c;包括时间序列和时空数据&#xff0c;在现实世界的应用中极为广泛。这些数据类型记录了动态系统随时…

2024电赛H题可能用到的代码——自动行驶小车

目录 前言 一、MPU6050零漂处理 二、MPU6050的Yaw&#xff08;180&#xff09;误差处理 三、PID算法&#xff08;增量式位置式&#xff09; 四、灰度传感器&#xff08;以8路为例&#xff09; 1、获取黑线偏差 2、判断ABCD点&#xff08;有无黑线交点&#xff09; 五、总结 前言…

内存原生CRAM技术将会颠覆计算存储的未来?

近期&#xff0c;一项刚刚发布的最新研究表明&#xff0c;一种名为计算随机存取存储器&#xff08;Computational Random-Access Memory, CRAM&#xff09;的新技术能够极大地减少人工智能&#xff08;AI&#xff09;处理所需的能量消耗。这项技术由明尼苏达大学双城分校的一组…

SmartInitializingSingleton和InitializingBean的区别

SmartInitializingSingleton&#xff1a;接口里面就一个方法afterSingletonsInstantiated&#xff0c;它是spring容器将所有bean都初始化完成之后&#xff0c;才会去调用&#xff0c;要求实现它接口的bean必须是单例的。 应用场景&#xff1a;可以在服务启动之后去处理一些逻辑…

红酒与电影:银幕上的醉人瞬间

在光影交织的银幕世界里&#xff0c;红酒不仅是品味生活的象征&#xff0c;更是情感交流的媒介。当定制红酒与电影相遇&#xff0c;它们共同编织出一个个醉人的瞬间&#xff0c;让观众在品味红酒的同时&#xff0c;也沉醉于电影的魅力之中。今天&#xff0c;就让我们一起走进红…

JS小应用:从图床获取的html代码中提取IMG标签并提取图片复制到剪贴板

JS小应用&#xff1a;从图床获取的html代码中提取IMG标签并提取图片复制到剪贴板 问题产生 自己做站长&#xff0c;为了节省银子&#xff0c;难免要用到图床。有的图床可以直接给你URL&#xff0c;这当然是最好的情况&#xff1a; 而有的图床&#xff0c;却禁用了鼠标右键&am…

“论数据分片技术及其应用”写作框架软考高级论文系统架构设计师论文

论文真题 数据分片就是按照一定的规则&#xff0c;将数据集划分成相互独立、正交的数据子集&#xff0c;然后将数据子集分布到不同的节点上。通过设计合理的数据分片规则&#xff0c;可将系统中的数据分布在不同的物理数据库中&#xff0c;达到提升应用系统数据处理速度的目的…