10.17七段数码管单个多个(部分)

单个数码管的实现 

第一种方式

 

一端并接称为位码;一端分别接收电平信号以控制灯的亮灭,称为段码

8421BCD码转七段数码管段码是将BCD码表示的十进制数转换成七段LED数码管的7个驱动段码

段码就是LED灯的信号

a为1表示没用到a,a为0表示用到了a灯

就是说在B1B2B3B4组成怎样的BCD码时,才会不用到a灯

 就得到各个灯与输入的BCD码之间的关系

第二种 

这个是说,由于3位二进制数只能表示8个状态,所以要表示十进制,至少需要4位二进制数,然后用case语句将这些四位的二进制编码转化为七段显示器所需要的编码

4’hf,'前面记录的是二进制下所需要的位数,是绝对的,不因表示的进制改变而改变,'后面的字母表示表示这个数所用的进制,其绝对后继是怎么表示,是相对的,且记录的方式就是这个进制记录的方式。一位h相当于4位b

 module BCDsegment(input [3:0]SW, 
//输入BCD码SW[3]=R15,SW[2]=M13,SW[1]=L16,SW[0]=J13output reg [6:0]a_to_g,output DP,output [7:0]AN);assign AN=8'b1111_1110;assign DP=1;always@(*)begincase(SW)4'b0000:  a_to_g=7'b0000001;4'b0001:  a_to_g=7'b1001111;4'b0010:  a_to_g=7'b0010010;4'b0011:  a_to_g=7'b0000110;4'b0100:  a_to_g=7'b1001100;4'b0101:  a_to_g=7'b0100100;4'b0110:  a_to_g=7'b0100000;4'b0111:  a_to_g=7'b0001111;4'b1000:  a_to_g=7'b0000000;4'b1001:  a_to_g=7'b0000100;endcaseend
endmodule

.v分析:
① input一个四位向量SW作为输入信号,通过拨动对应的引脚改变输入的BCD码。
② output一个七位向量a_to_g决定一组七段数码管的各二极管亮暗状态,亮起的二极管组合形成一个十进制数。
③ output一个DP信号,是实验板上8组数码管的总开关,用assign语句赋值为1。
④ output一个八位向量AN,AN决定一个实验板上的八组数码管使用状态,赋值为1的不使用,赋值为0的为使用。本次实验中将AN通过assign语句赋值为8’b1111_1110,表示只使用AN[0]对应的那组数码管。
⑤ 在always语句中,用case语句完成BCD码和七段数码管状态的对应工作。

这里就是说R15,M13,L16,J13四个开关(四位二进制数)决定了一个十六进制数,然后在数码管上显示这个在四位开关上表示的一位十六进制数,只调用了一个数码管表示

这里的关键在于引脚文件的编写

##Switchesset_property -dict { PACKAGE_PIN J15   IOSTANDARD LVCMOS33 } [get_ports { SW[0] }]; 
set_property -dict { PACKAGE_PIN L16   IOSTANDARD LVCMOS33 } [get_ports { SW[1] }]; 
set_property -dict { PACKAGE_PIN M13   IOSTANDARD LVCMOS33 } [get_ports { SW[2] }]; 
set_property -dict { PACKAGE_PIN R15   IOSTANDARD LVCMOS33 } [get_ports { SW[3] }];
##7 segment display
set_property -dict { PACKAGE_PIN T10   IOSTANDARD LVCMOS33 } [get_ports { a_to_g[6] }]; 
set_property -dict { PACKAGE_PIN R10   IOSTANDARD LVCMOS33 } [get_ports { a_to_g[5] }];
set_property -dict { PACKAGE_PIN K16   IOSTANDARD LVCMOS33 } [get_ports { a_to_g[4] }]; 
set_property -dict { PACKAGE_PIN K13   IOSTANDARD LVCMOS33 } [get_ports { a_to_g[3] }]; 
set_property -dict { PACKAGE_PIN P15   IOSTANDARD LVCMOS33 } [get_ports { a_to_g[2] }];
set_property -dict { PACKAGE_PIN T11   IOSTANDARD LVCMOS33 } [get_ports { a_to_g[1] }];
set_property -dict { PACKAGE_PIN L18   IOSTANDARD LVCMOS33 } [get_ports { a_to_g[0] }]; set_property -dict { PACKAGE_PIN H15   IOSTANDARD LVCMOS33 } [get_ports { DP }]; set_property -dict { PACKAGE_PIN J17   IOSTANDARD LVCMOS33 } [get_ports { AN[0] }]; 
set_property -dict { PACKAGE_PIN J18   IOSTANDARD LVCMOS33 } [get_ports { AN[1] }]; 
set_property -dict { PACKAGE_PIN T9    IOSTANDARD LVCMOS33 } [get_ports { AN[2] }]; 
set_property -dict { PACKAGE_PIN J14   IOSTANDARD LVCMOS33 } [get_ports { AN[3] }]; 
set_property -dict { PACKAGE_PIN P14   IOSTANDARD LVCMOS33 } [get_ports { AN[4] }]; 
set_property -dict { PACKAGE_PIN T14   IOSTANDARD LVCMOS33 } [get_ports { AN[5] }]; 
set_property -dict { PACKAGE_PIN K2    IOSTANDARD LVCMOS33 } [get_ports { AN[6] }]; 
set_property -dict { PACKAGE_PIN U13   IOSTANDARD LVCMOS33 } [get_ports { AN[7] }]; 

.xdc分析
① 每个引脚一行语句:代表引脚在实验板上的位置和输出标准电平3.3V。
② 引脚锁定文件使用到的引脚名称与design source中所使用到变量名称相对应。
③ 该.xdc文件中,SW[0]~SW[3]代表输入的BCD码,a_to_g[6] ~a_to_g[0]代表一组7段数码管的编号a~g的led灯(顺时针方向),DP为总开关,AN为实验板上的8组7段数码管。

这个引脚文件编写的很清晰,声明和定义放在一起了,清晰明了

SWITHCES表示开关,是下面的四个二进制,组成一个十六进制

Display表示显示,引脚接到数码管上

?这里后面的AN,表示的是说下面的开关来决定到底是板子上的8个灯哪个灯亮,不确定?

一个实验板上的8组七段数码管首先由一个总开关DP控制,DP为1时,数码管才能被使用;而每组数码管是否工作,则由一个8位的向量AN控制,因为是共阳极构造,当AN某位为0时,才表示该组数码管投入使用;每组数码管由7个二极管组成,亮暗状态由一个7位向量a_to_g决定,同样因为共阳极的构造,当a_to_g某位为0时对应的二极管亮。这个a_to_g向量同时控制所有组数码管的7段二极管。

这个是说原始信号为clk.然后分频就是说让这个信号的频率降低,到20时才进一,就是说频率是原来的二十分之一

由于是共阳极构造,0时显示,1时不显示

多个数码管动态显示 

就是说让其刷新频率高于人眼分辨率,但实际上每次是只亮一个灯的,但是速度足够快,所以就显示好像亮了好多灯 ,所以说的是交替被点亮发光


 

 动态数码管显示的原理是: 每次选通其中一位送出这位要显示的内容, 然后一段时间后选通下一位送出对应数据,4 个数码管这样依次选通并送出相应的数据,结束后再重复进行。这样只要选通时间选取的合适,由于人眼的视觉暂留,数码管看起来就是连续显示的。
这里面涉及到七段数码管的分频问题(决定多久从这个数码管换到下一个数码管显示)

那就是说,需要不断记录当前需要显示的是什么内容

分频

增加了一个0,就是频率从400变到了40,说明d后面是分频的倍数,‘d前面记录的数是'd后面所允许记录的最大数(用二进制表示下),’d后面记录的是实际记录的数,用d,即十进制下,不应当超过'd前面记录的那个数的二进制最大,但可以小于

每次比较的时候都是在进行实际记录的数据比较,自加加的也是实际的单位1,与所选进制无关

分时复用? 

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

多维时序 | MATLAB实现SSA-CNN-GRU-Attention多变量时间序列预测(SE注意力机制)

多维时序 | MATLAB实现SSA-CNN-GRU-Attention多变量时间序列预测(SE注意力机制) 目录 多维时序 | MATLAB实现SSA-CNN-GRU-Attention多变量时间序列预测(SE注意力机制)预测效果基本描述模型描述程序设计参考资料 预测效果 基本描述…

LeetCode 高频题目分类列表

💡 LeetCode 高频面试题分类列表,总共24类,312道题目! 图 133.克隆图 207.课程表 210.课程表 II 399.除法求值 547.省份数量 684.冗余连接 743.网络延迟时间 785.判断二分图 堆 215.数组中的第K个最大元素 295.数据流的中位数 26…

apache log4j漏洞复现

log4j是开源的java存储日志的框架,一般都是大企业用,小企业自带的日志功能足够使用,Log4j2是默认支持解析ldap/rmi协议的,打印的日志中包括ldap/rmi协议都行。 具体介绍参考以下文章: log4j2---基于vulhub的log4j2漏…

冲刺十五届蓝桥杯P0006平面切分

文章目录 题目思路代码总结 题目 平面切分 思路 这道题是一个思维题把,之前没有接触过平面几何的知识,做起来感觉还是比较难的,用到的set集合和自己创建一个类 首先我们知道,一根直线A是可以将平面切分成两块的,如…

keep-alive 是 Vue 的一个内置组件,用于缓存其他组件的实例,以避免重复渲染和销毁,它可以在需要频繁切换的组件之间提供性能优化

目录 keep-alive 使用 keep-alive 的示例代码: 手动清除组件缓存的示例代码: keep-alive 组件有以下几个优点: keep-alive 的原理: 使用 keep-alive 组件,你可以包裹需要缓存的组件,然后这些组件在切…

Linux中的主要系统调用

Linux 操作系统中就是创建进程。创建进程的系统调用叫fork。在 Linux 里,要创建一个新的进程,需要一个老的进程调用 fork 来实现,其中老的进程叫作父进程(Parent Process),新的进程叫作子进程(C…

精准定位——MySQL日志学习的一天【错误、二进制、查询、慢查询】

MySQL 日志是记录 MySQL 数据库服务器运行过程中的各种活动和事件的文件。它们对于监控、故障排查、性能优化和数据恢复等方面都非常重要。 回顾一下Linux中查看文件的指令操作 cat 命令: cat 命令用于将文件的内容一次性输出到终端。它的主要功能是将文件连接起来…

Jetpack:011-Jetpack中标题栏

文章目录 1. 概念介绍2. 使用方法2.1 标题与导航2.2 详情菜单 3. 示例代码4. 内容总结 我们在上一章回中介绍了Jetpack中进度条相关的内容,本章回中主要介绍 标题栏。闲话休提,让我们一起Talk Android Jetpack吧! 1. 概念介绍 我们在本章回…

大型公共建筑能耗监测与信息管理系统研究及产品选型

摘要:文章通过阐述大型公共建筑能耗现状,突出大型公共建筑实施节能监管的必要性,并在系统总结运用技术手段实施建筑能耗监测的基础上,介绍了江苏省建筑能耗监测系统研究过程中的技术创新和应用情况。 关键词:公共建筑…

ubuntu20.04 nerf开山之作

源码 GitHub - yenchenlin/nerf-pytorch: A PyTorch implementation of NeRF (Neural Radiance Fields) that reproduces the results. 代码的相关解读 NeRF代码解读-相机参数与坐标系变换 - 知乎 原文题目:NeRF: Representing Scenes as Neural Radiance Field…

yolov5 + openvino + c++测试

1.拉取最新yolov5代码,训练自己数据或者直接用官方pt模型来进行转为openvino的格式,当前已经支持直接把pt模型转为openvino。 我拉取的是:2023-10-03 21:46 dd9e3382c9af9697fb071d26f1fd1698e9be3e04 在export.py代码中把default中加…

Epoch、批量大小、迭代次数

梯度下降 它是 机器学习中使用的迭代 优化算法,用于找到最佳结果(曲线的最小值)。 坡度 是指 斜坡的倾斜度或倾斜度 梯度下降有一个称为 学习率的参数。 正如您在上图(左)中看到的,最初步长较大&#…

基于RuoYi-Flowable-Plus的若依ruoyi-nbcio支持自定义业务表单流程(五)

更多ruoyi-nbcio功能请看演示系统 gitee源代码地址 前后端代码: https://gitee.com/nbacheng/ruoyi-nbcio 演示地址:RuoYi-Nbcio后台管理系统 今天讲一下wf_demo表单的一些修改 1、demo的实现类修改如下: 主要是增加一个服务名称&#…

全新自适应导航网模板 导航网系统源码 网址导航系统源码 网址目录网系统源码

帝国CMS7.5开发目录网络程序基本功能描述: 1.一键获取目标站SEO信息。7.5版增加了一键获取会员中心网站信息权重,小程序提交发布,增加了新的自适应模板; 2.访客可以提交,访客提交手动审核,会员提交不审核…

Python爬虫:制作一个属于自己的IP代理模块

前言 在Python爬虫过程中,为了避免被网站的反爬虫机制干扰,我们需要使用IP代理。所谓IP代理,就是通过修改网络请求中的IP地址,来达到隐藏真实IP地址的效果。本文将教你如何制作一个自己的IP代理模块,让你的爬虫更加稳…

【JUC】原子操作类及LongAddr源码分析

文章目录 1. 十八罗汉2. 原子类再分类2.1 基本类型原子类2.2 数组类型原子类2.3 引用类型原子类2.4 对象的属性修改原子类2.5 原子操作增强类 3. 代码演示及性能比较:4. LongAddr原理5. LongAddr源码分析5.1 add()5.2 longAccumulate()5.3 sum() 6. 小总结6.1 Atomi…

C++算法前缀和的应用:分割数组的最大值的原理、源码及测试用例

分割数组的最大值 相关知识点 C算法:前缀和、前缀乘积、前缀异或的原理、源码及测试用例:付视频课程 二分 过些天整理基础知识 题目 给定一个非负整数数组 nums 和一个整数 m ,你需要将这个数组分成 m 个非空的连续子数组。 设计一个算法…

VsCode通过Git History插件查看某个页面的版本修改记录

首先需要安装插件Git History 方式一:通过 点击File History 查看某个文件变更;即通过commit的提交记录去查看某个文件的修改 方式二:通过点击选择toggle File Blame 查看当前页面每一行所有提交修改记录

基于nodejs+vue小型企业银行账目管理系统

目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 1.2 国内外研究概况 1 1.3 研究的内容 1 第2章 相关技术 3 2.1 nodejs简介 4 2.2 express框架介绍 6 2.4 MySQL数据库 4 第3章 系统分析 5 3.1 需求分析 5 3.2 系统可行性分析 5 3.2.1技术可行性:…

毫米波雷达模块技术革新:在自动驾驶汽车中的前沿应用

随着自动驾驶技术的快速发展,毫米波雷达模块的技术革新成为推动这一领域的关键因素之一。本文将深入研究毫米波雷达模块技术的最新进展,并探讨其在自动驾驶汽车中的前沿应用。 毫米波雷达模块的基本原理 解释毫米波雷达模块的基本工作原理,强…