【mcuclub】数码管

2023-11-09

一、实物图

 

二、原理图

 

1 数码管介绍

1.1 作用:数码管是显示器件,用来显示数字。

1.2 分类:单个(1位)、联排(2位、4位、8位)。

1.3 工作原理

(1)亮灭原理(其实就是内部的照明LED)。

(2)显示数字(甚至文字)原理:利用内部的LED的亮和灭让外部的组成数字的笔画显示或者不显示,人看到的就是不同的数字。

1.4 共阳极和共阴极数码管

(1)驱动方法的差异。必须清楚一个数码管内部的8颗LED是独立驱动的。如果8颗LED的正极接在一起接到VCC上(负极分别接到单片机的不同引脚),这种接法就叫共阳极。反之如果8颗LED负极接在一起然后接到GND(正极就分别接到单片机的不同引脚)就叫共阴极。两种接法都可以驱动数码管显示,但是用来显示的单片机程序不同(共阳极时单片机0是亮,共阴极时单片机的1是亮)。

(2)驱动电流需求差异。数码管(其实就是LED)如果按照共阳极接法则单片机可以直接驱动显示,如果按照共阴极接法则单片机不能直接驱动,因为单片机的IO口提供的电流大小不够驱动数码管内部的LED显示,需要外部电路来提供一个大电流驱动的芯片来解决。

(3)不管是共阳极或共阴极数码管,都要在数码管的段选位加上限流电阻,数码管点亮的电流值一般为3mA左右,正常工作电流范围为3~10mA,超过10mA的话会烧坏数码管。目前大多用的都是硅管,点亮时的压降值为1.7V,外接+5V的Vcc,所以电阻R=(Vcc-1.7V)/3mA,大概为1k欧姆。若需要亮度比较大的话,限流电阻值就选择330欧姆。

(4) 数码管公共端直接接到+5V ,中间不要接电阻。虽然表面上看在+5V和数码管公共端之间接一个电阻会代替其余的8个电阻,但是,实际上数码管在点亮时,点亮的段数是变化的,电流也是在变化的,点亮一段时电流比较小还可以,点亮8段时电流比较大,会出现亮度明显下降。在实际工作时会出现忽亮忽暗的现象。

(5)建议使用P0口,P0口驱动能力好点,灌电流能力也强些。

1.5 静态和动态数码管

(1)用途差异:静态方式用于驱动单独的数码管,动态方式用于驱动联排数码管。

(2)电路接法差异。

2 静态数码管的驱动

2.1 原理图分析

 

2.2 接线

单片机的P0端口接330Ω的电阻,然后接到共阳极数码管的阴极。因此单片机输出0则数码管亮,输出1数码管灭。

2.3 编程点亮

(1)P0 = 0x0; 8段全亮

(2)P0 = 0xff; 8段全灭

(3)P0 = 0x0f; 4段亮4段灭

2.4 验证原理图中数码管段号是否正确

(1)数码管的8段实际是8个LED,分别对应IO端口P0的8个引脚(P0.0、P0.1····P0.7),那么谁对应谁呢?

(2)理论上可以分析原理图和接线方法去推测这个对应关系(数码管的段码),但是实际上理论分析的经常不对。

(3)实战中一般都是自己写代码去测试的。

P0 = 0xfe; // 11111110 P0.0输出0 实测对应a

P0 = 0xfd; // 11111101 P0.1输出0 实测对应b

P0 = 0xfb; // 11111011 P0.2输出0 实测对应c

P0 = 0xf7; // 11110111 P0.3输出0 实测对应d

P0 = 0xef; // 11101111 P0.4输出0 实测对应e

P0 = 0xdf; // 11011111 P0.5输出0 实测对应f

P0 = 0xbf; // 10111111 P0.6输出0 实测对应g

P0 = 0x7f; // 01111111 P0.7输出0 实测对应dp

注意:P0端口的8个二进制位中,高位对应P0.7,而低位对应P0.0

2.5 思考:数码管如何显示数字?

(1)数码管显示数字,其实就是让数码管亮相应的几个段。其实就是让IO端口的相应引脚输出0(其余引脚输出1),其实就对应一个8位的二进制数。

(2)结论就是:P0端口输出一个合适的字节数,数码管就会显示相应的数字。每个数字都会有一个对应的8位二进制数,关键就是要得到这8位二进制数。

注意:

1)不同的数码管数字编码(段码)表完全可能不同。

2)同一个数码管接线方式不同编码表可能完全不同。

3)硬件确定后可通过调试的方法来实验确定编码表。

(3)使用数组调用编码表

3 动态数码管

3.1 静态数码管驱动方式的缺陷

(1)优势是驱动简单直接,好编程。

(2)缺陷是每个数码管需要1个端口,单片机的端口不够用。

解决办法:使用动态方式驱动多个数码管

3.2 什么是动态数码管

(1)数码管还是原来的数码管(共阳极或共阴极均可)记住:数码管有2端:COM端和段码端,也就是常说的位选和段选。

(2)段码一侧还是接一个单片机端口。

(3)COM(共极)接单片机IO口,通常接三极管或74HC138等。

分析对比静态和动态数码管,发现本质区别是:静态数码管中只要给了段码,数码管就一定工作(显示只取决于段码端),动态数码管中段码端给了段码值后还需要COM端配合才能点亮数码管。

3.3 动态数码管如何工作

(1)在某一特定时间段中,联排数码管中只有一个数码管在工作,其他均在休息(不工作)。

(2)COM端选择哪个数码管工作,段码端输出这个数码管要显式的数字的段码;延时;COM端选择下一个数码管工作,同时段码端输出这个数码管要显示的数字的段码;延时;以此类推。

(3)快速切换工作的数码管,则人看到的是所有的数码管都在亮(其实亮度是比静态驱动低的)。

(4)动态数码管利用了人眼的视觉暂留。物体在快速运动时, 当人眼所看到的影像消失后,人眼仍能继续保留其影像0.1-0.4秒左右的图像。

搞清楚2点:

第一,宏观上所有的数码管都是同时亮的,所以人以为所有数码管同时工作,所以多个数码管可以合在一起来显示。

第二,微观上数码管是依次亮的,我们可以给不同的数码管送不同的段码,所以不同的数码管可以显示不同的数字。所以相当于几个数码管的显示是独立的。

3.4 动态数码管显示编程

(1)接线确定:段码端接P0,COM端接三极管的基极,发射极接Vcc,集电极接位选端(三极管选用PNP型,用三极管驱动是因为单片机的IO口驱动能力不够,需要三极管增加驱动能力)。

(2)COM端选择一个数码管亮,随便选1个输出0,其余输出1。

(3)段码端给不同的值来测试得到段码表

第一步:先测试P0.0-P0.7和abcdefg.怎么对应的,得到段码表

第二步:再测试哪个IO对应哪一位数码管。

(4) 目标:4个联排数码管一起显示1234

(1)编程思路:先选中第1数码管,然后段码端送1的段码,然后延时一会儿;然后切换选中第2数码管,然后段码端送2的段码,然后延时一会儿;····直到第4个数码管显示完为一个周期。

(2)实验结论:

1、延时时间太长,数字会闪动。

2、把时间改短后发现有3个问题:第一个是亮的不够亮,第二个是暗的不够暗,第三个是其中一个数字(1)显示明显有问题。 解决方案就是在每个数码管亮完要切换下一个数码管时消隐(该位的数码管不亮)。

4 数码管软件设计流程

首先通过测试,确定数据IO口和段选位对应编号,然后编写数字段码表存于数组中,如果是一位数码管,则公共端直接接VCC,控制段选端显示对应数字。如果是多位数码管,则通过三极管控制位选端,选择哪一位数码管显示,然后控制段选端显示对应数字,通过10ms延时以及消隐让显示效果更好,依次循环显示其他位的数码管。具体流程图如下图所示:

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【mcuclub】数码管 的相关文章

  • QT 添加背景图片,按钮不被覆盖

    QT设计窗体时 想添加背景图片 在设计器中 只需要右击窗体 gt 改变样式表 添加你想要的图片就可以了 不想覆盖按钮的话 主需要像上图那样就行了
  • LU分解的矩阵逆运算

    算法名称 矩阵求逆 基于LU分解法 LU分解算法评价 LU分解大约需要执行N3 3次内层循环 每次包括一次乘法和一次加法 这是求解一个 或少量几个 右端项时的运算次数 它要比Gauss Jordan消去法快三倍 比不计算逆矩阵的Gauss
  • Java菜鸟入门(20) Producer Consumer经典代码

    来自oracle官网 https docs oracle com javase 7 docs api java util concurrent locks Condition html class BoundedBuffer final L
  • U盘重装系统教程

    重装系统不管是U盘启动还是光盘启动 最终是否可以引导u盘装系统 很大取决于PE或者DOS系统能否识别出来U盘 一 准备工作 制作大白菜U盘启动盘 需要下载一个windows系统文件 就是win7系统 win10系统文件这类的 到U盘里 便可
  • 代理模式之静态代理

    一 什么是代理模式 代理模式 为其他对象提供一种代理 以控制对这个对象的访问 代理类的对象本身并不真正实现服务 我们在访问实际对象时 是通过代理对象来访问的 二 代理模式的分类 静态代理 代理和被代理之前都是确定的 都实现相同的接口或继承相

随机推荐

  • vue锚点定位(tab切换定位不同的div位置)

    1 效果演示 2 HTML部分 div class tabs div class info tit span class pointer css3 lang CN 集团简介 Group profile span span class poi
  • IntelliJ IDEA配置java环境以及解决IDEA不能直接运行单个JAVA文件

    写Java代码选择IEDA的原因是我之前用的Pycharm写python 而IEDA和pycharm几乎一模一样的用法 而且IEDE可以写Java Python等很多语言 只要安装了对应的插件 File gt Settings gt Plu
  • C语言 -- 链表(企业级,侵入式链表)

    目录 节点结构体的实现 初始化链表 插入链表 遍历链表 删除节点 销毁链表 用户test 侵入式链表 内核链表 普通单链表和侵入式单链表的区别在于 普通的单链表的结点指针域指向的是下一个结点的内存首地址 侵入式单链表的结点指针域指向的是下一
  • VUE设置Echarts Loading及样式

    1 先引入echarts import as echarts from echarts 2 利用Echart自带的loading方法 如果是动态数据应该放在请求之前开始loading 初始化 let charts echarts init
  • 前端工作怎么包装简历,需要掌握哪些知识项目

    要想找个好的工作 最少有几个项目实战拿的出来 Web前端岗位需要掌握的知识 一 前端相关概念建立 主要内容 浏览器的概念介绍 浏览器的作用 工作方式 浏览器的概念介绍 浏览器的作用 工作方式 HTTP协议 协议产生的原因 作用 及内容 页面
  • unbutu docker 添加日志

    新建的docker默认是没有日志的 如下展示 tail f var log cron log tail cannot open var log cron log for reading No such file or directory t
  • Windows terminal安装和配置

    Windows terminal终端比cmd强大许多 其中可以包含cmd和powershell甚至ubuntu子系统 同时还可以进行个性化 打造更精美的终端 安装 进入Windows自带的Microsoft Store 搜索Windows
  • 浏览器打开windows桌面应用

    场景需要在浏览器打开桌面安装的lis应用 这里用到注册表 注意 后面的 路径 两个斜杠 lis可以替换成其他需要打开的应用 lis reg 如下 保存双击执行下 Windows Registry Editor Version 5 00 HK
  • Android 集成 支付宝

    一 到支付宝官网https b alipay com order techService htm channel psl下载 快捷支付 无线 开发包 将alipay sdk common文件夹下的alipaysdk jar alipayse
  • 基本排序算法

    前言 该算法总结针对的是算法设计与分析课程所提到的算法 对于不同的人群可能获益有所不同 在叙述时会对一些较为简单的算法进行概性描述 目的是简单的告诉读者算法实现的基本原理 对一些较为复杂的算法则会付诸大量的笔墨 以求对算法的理解能够更加的透
  • 「转」plt.legend()简明使用教程

    原文链接https blog csdn net helunqu2017 article details 78641290 感谢作者辛勤付出 仅作笔记使用 侵删 1 图例legend基础语法及用法 legend语法参数如下 matplotli
  • 用一个程序员的角度来遐想第五代或第六代计算机

    提前申明 我对这一行了解的不够深入 或许是因为这才所以初生牛犊不怕虎 以至于对计算机有很多构想 我先来说一下当今计算机的发展历程 第一代 1946 1957年 是电子计算机 它的基本电子元件是电子管 内存储器采用水银延迟线 外存储器主要采用
  • TensorFlow2.1.0安装教程

    TensorFlow2 1 0安装教程 安装步骤 常用IDE安装 CUDA安装 CUDA软件安装 cuDNN神经网络加速库安装 配置环境变量 TensorFlow安装 更新 TensorFlow是一款优秀的深度学习框架 支持多种常见的操作系
  • 从0到1搭建 Rollup + TypeScript 模板工程

    哈喽 大家好 我是 SuperYing 今天我们来聊聊如何从 0 到 1 搭建一个 Rollup TypeScript 工具库模板工程 包括从创建文件夹开始 到依赖配置 打包编译等一整套内容 Rollup 是一个 JavaScript 模块
  • CWE-125: Out-of-bounds Read(越界读取)

    ID 125 类型 基础 结构 简单 状态 草稿 描述 软件读取缓冲区之前或者之后的数据 扩展描述 通常 这会允许攻击者从其它内存位置读取敏感信息或导致崩溃 假定存在用于停止读取操作 如字符串中的nul 的哨兵变量时 当代码读取可变数量的数
  • 哨兵架构&redisCluster-Redis(五)

    上篇文章介绍了主从架构以及lua脚本 主从架构 lua脚本 Redis 四 https blog csdn net ke1ying article details 131159229 Sentinel集群 主从的搭建我们已经完成 但如果主节
  • 优化命令之top——实时显示进程动态/查看进程信息

    目录 一 top简介 二 启动TOP 2 1第一行含义 2 2第二行含义 2 3第三行含义 2 4第四行含义 2 5第五行含义 2 6第六行含义 三 top常用按键 3 1按 Z 键更改输出的颜色 我发现这让输出更容易被眼睛看到 3 2 按
  • ctypes.ArgumentError: argument 2: type 'exceptions.TypeError': Don't know how to convert parameter

    错误描述 我在用python的ctypes库调用c 的 so文件时候 出现了下面的错误 ctypes ArgumentError argument 2
  • Java权限修饰符

    权限修饰符可以用来修饰属性和方法的访问范围 本类 同包 子类 其他 private 默认 protected public 默认 是什么修饰符都不加
  • 【mcuclub】数码管

    一 实物图 二 原理图 1 数码管介绍 1 1 作用 数码管是显示器件 用来显示数字 1 2 分类 单个 1位 联排 2位 4位 8位 1 3 工作原理 1 亮灭原理 其实就是内部的照明LED 2 显示数字 甚至文字 原理 利用内部的LED