单片机学习笔记---静态数码管显示

news2024/9/24 21:28:38

目录

数码管是什么?

一位数码管的引脚定义

四位一体的数码管引脚定义

数码管的原理图解析

数码管怎么显示数据?(总结+代码显示)


今天开始学习数码管,它比LED和独立按键复杂一点

数码管是什么?

LED数码管是一种简单、廉价的显示器,是由多个发光二极管封装在一起组成“8”字型的器件

也就是在我们开发板的这里

它下方的138译码器和右边的74HC245都属于数码管操作的这些东西

以下是它的原理图

一位数码管的引脚定义

市面上有一位的数码管和四位一体的数码管:

先介绍一位的数码管

如果所有数码管的阴极都连接到一个端口上,我们就称为共阴极连接,如下图:

如果所有的数码管的阳极都连接到一个端口上,我们就称为共阳极连接,如下图:

一般的,数码管上的8个LED,每一段都定义了名字,如下图,每一段的名字按顺时针依次是A、B、C、D、E、F、G(中间那段),外加个小数点,叫做DP

8段正好跟1个字节8个比特位一一对应,而51单片机也是8位的单片机

再来看下引脚定义,引脚的定义正好跟芯片的序号差不多,当我们正视它的时候,左下角的第一个引脚叫做一号引脚,逆时针过来就是2号引脚,依次递推就是3,4,5,6,7,8,9,10号引脚,如下图:

我们来看一些这些引脚的连接结构

右边的原理图上的每一个二极管都标好了名字,对应“8”字上的每一段的名字,原理图上的每一个引脚的序号也是一一对应“8”字上的每一个引脚,比如,A段二极管的阳极连接的是3和8号引脚,其实3和8号引脚都是一个引脚,只不过分开两根而已(如果是共阳极的话,那上下都是所有LED的正极)

而A段LED的负极也就是阴极连接到7号引脚上

以下就是它的引脚和LED的连接逻辑

可以发现,虽然在原理图上看着是乱序的,但实际上它都是就近连接原则

所以我们自己买数码管,自己设计电路的时候,一定要搞清楚它哪个段是接在哪个引脚上面的

接下来我们来看一下怎么让数码管显示一个我们让它显示的数字

比如想让它显示数字6,假设它是共阴极连接(因为我的开发板上就是共阴极连接的)

那么我们就要点亮A,C,D,E,F,G段二极管

点亮二极管之前,我们肯定要把所有LED的阴极的公共端接地

就是给数字0,或者给低电平,都叫接地。

选公共端,就做位选端,就是选中哪一个哪一个才亮,如果有多个位选,就是控制多个选中。

共阴极接地(负极),然后阳极接引脚(正极)。

位选完之后要段选。

我们想要A段点亮,A段就应该接高电平1,B不点亮,就给它低电平0

然后我们再把这8个引脚接到单片机的IO口,再给IO这样一个数据,然后把公共端选中

这时A,C,D,E,F,G就亮了,就能显示数字“6”

而10111110这串数字就是LED的段码

如果是共阳极的话,公共端就要接到VCC(高电平1,电源的正极)

那如果想要LED亮的话,阴极就不是给1了,应该给0

那01000001这串数字就是操作共阳极的段码数据,和共阴极正好相反

以上就是一个数码管的操作方式

就是把公共端选中,然后段选端给相应的数据,它就亮相应的数字

四位一体的数码管引脚定义

接下来就是看四位一体的数码管

我们开发板上的数码管就是四位一体的

它同样有共阴极和共阳极连接

引脚的序号也是正视时,从左下角开始逆时针排序

它的公共端单独引出来,然后所有的A段连接在一起,所有的B段连接在一起......再连接到就近的引脚上

比如我们要让数码管的第三位显示数字“1”,怎么连呢?

我们给第一位、第二位、第四位高电平1,即阴极连接正极,那无论如何这三位是不会亮了。

我们给第三位低电平0,即阴极连接负极,然后段选端我们选择B段和C段数字1,即这两段的阳极连接正极,这两段就会亮,而其他段给数字0。

这样就能实现在数码管上的第三位上显示数字“1”了

我们得出一个结论,这个四位一体的数码管不可能在同一时刻显示多个不同数字,即使有多位选中的话,那显示的数字也会是相同的。这是由于他们共用引脚导致的这个现象。当然这也是为了节省引脚的连接方式,方便操作。

数码管的原理图解析

以上预备知识了解后,我们回头看看138译码器和74HC245的原理图

注意:原理图上的138译码器写的是74LS138,实际上我们开发板上连接的是74HC138,

中间是电压和工号那个符号。

138译码器和74HC245都是74系列,是比较古老的系列了,现在几乎已经停产了,只不过我们现在只是拿来学习而已。

数码管原理图上COM,就是公共端,这个是共阴极的数码管。

数码管引脚共阴极和共阳极怎么分辨?

应用时COM端接VCC就是共阳极,COM端接GND就是共阴极。

如我们前面所讲,如果给以下数据的话,就能让数码管显示“1”。

对于共阴极的数码管,公共端的数据我们叫做阴码,下方的叫做阳码。

原理图上LED1-LED8接到了138译码器的输出端

138译码器是什么工作原理呢?

现在目的是使它的输出端其中一个输出0,然后剩下的输出1,138译码器正好可以实现这个功能

并且可以使8个端口变成用3个端口控制(P2的三个口,直接连在单片机上),三个IO口可以控制8个输出端,其中一位是0,其他位是1。

那操作流程是怎么样的呢?

左边的ABC是它的输入端,右边的Y0-Y7是输出端

中间的VCC和GND是要接电源的正极和负极

左下角的G1,G2A,G2B是它的使能端,它相当于一种开关,如果使能电平有效的话,它就可以工作,如果没有效,它就不工作,就是一种电源开关。

那这种开关怎么工作呢?

需要把G1接上高电平1(正极VCC),G2A和G2B接上低电平0(接地),如图所示

只要上电138译码器就已经开始工作了,所以我们就不管这三个引脚了。

138译码器叫做38线译码器,就是3个线到8个线,

那译码是怎么样的功能呢?

我们把这个输出画一下表格:

三的IO口的二进制数值转换成十进制的数值对应输出端的哪个一个口,哪一个口就有效,输出0,其他的都为1。这样可以用3个IO口操作8个输出端,减少IO口数。

然后接下来看看74HC245这块芯片,它叫做双向数据缓冲器,是用数据缓冲的。

左下角的两个控制引脚GND和VDD分别是电源的负极和正极。

然后那个OE其实应该是CE,chip enable芯片使能端,低电平有效,跟138译码器的三个使能端一样,如果给它接地,它就工作,如果接VCC高电平,它就不工作。

中间的连接如上图红线所示。

还有左上角的DIR,direction表示方向的意思,把左边的数据给缓存到右边,把右边的数据给读回来,这就是DIR的功能。

对于数码管显示来说,我们只需要给它送数据,不需要读回来。

所以说这个LE连接到J21的LE的位置。

我们原理图左上角有一个J21,对应开发板上的这个跳线帽,它插在某个地方就是把两个引脚给短路,它始终都把LE接到高电平的VCC上。

如果DIR接高电平,就把左边数据送到右边去,如果接低电平,就把右边的数据给读回来。所以LE是插在左边,那一直是高电平,就一直都是把左边的数据送到右边去。

为什么这样接呢?

因为高电平的驱动能力有限,输出的最大电流不能太大,低电平的驱动能力强一些,这也就是为什么之前的LED是用低电平点亮的方式。因为高电平的驱动能力弱。

如果试过高电平点亮和低电平点亮的话,你会发现一定是低电平点亮的更亮一些,所以高电平点亮数码管,电流就会很小,会很暗,因此加了一个缓冲器,用来提高驱动能力的。

这个是个电容100 000pF,叫做电源滤波,作用是稳定电源,使电源给芯片供电更加稳定

这个东西是排组,四个电阻为一体的排组,电阻值是100R就是100欧的意思,如果是千欧的话就是100K,作用就是限流电阻,防止数码管的电流过大

就在开发板的拉杆下面

数码管怎么显示数据?(总结+代码显示)

到这,本节的原理图的电路介绍完毕,接下来总结一下,怎么样才能显示一个数据呢?

第一步:就是控制译码器上的这三个P2口,使右边某一位输出0选中,也就是数码管的公共端的某个口被选中给0。

第二步:选中之后,再给P0口的段码数据,比如说给0100 0000,它就会缓冲一下,直接过来,送到公共的段码端,就会显示相应的数据。

现在就开始写本节的示例代码:静态数码管显示

新创建工程,直接点亮数码管来演示一下,比如让第三位显示“6”

首先选中LED6,然后LED6是接在Y5上,那么我们就要想怎么让P2的三个口的二进制数值换算成十进制的时候数值是5,显然P24,P23,P22依次分别是1 0 1的时候,换算成十进制就是5

然后再给P0的8个口段码数据,让第三位数码管显示“6”,如图我们要点亮的是a,c,d,e,f,g段LED

只有b段和小数点dp不亮,,就它们数字0,其他位选端位1,我们就要给数据0111 1101

然后把这个数据原封不动地从左边移到右边P0的8个口来,注意一定要对准高低位。

把0111 1101转换成16进制写程序应该是0x7D

编译无错误后下载看效果

可以看到第三位显示6个了

如果想要第四位显示“6”,代码怎么写?

看一看到第四位是LED5,那P2的三个口二进制数值应该是100

P0的8个口的数字是0111 1101换算成十六进制就是0x7D

把代码改成这样

编译下载看效果

可以看到第四位显示6。

D3和D4LED也会亮是因为引脚冲突,因为D3和D4也是由P22和P23接连的。

以上这样的代码也能实现效果,

不过这样很麻烦,我们可以优化一下代码

我们可以把这两段代码用一个子函数封装起来

Location表示位置,可以用一个Switch分支语句封装

而Number的封装则可以定义一个数组,初始值我们可以把下面的一串断码表复制进去:

0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F

其实这个可以推断出来

比如,数字“0”的断码是a,b,c,d,e,f  

则对应的二进制是0011 1111,转换成16进制就是0x3F

分装的函数最后是这样

然后我们写个程序验证一下

编译无错误后看看效果

我们看到的确是第7个LED显示数组“2”,这就是本节想要实现的效果

我们可以尝试一下改成别的位置和显示别的数字

的确是第2个LED显示数字“3”,说明程序没有问题!

以上就是本节的静态数码管显示程序。

说明一下,大家可以把这里勾选上,这样就不用每次编译完无错误后点击下载了,勾选上之后它会自动给我们下载,我们需要重启板子就可以了

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

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

相关文章

【Docker Registry】docker 镜像仓库实战

Docker Registry 镜像仓库 (Docker Registry) 负责存储、管理和分发镜像,并且提供了登录认证能力,建立了仓库的索引。 镜像仓库管理多个 Repository, Repository 通过命名来区分。每个 Repository 包含一个或多个镜像,镜像通过镜…

AMEYA360详解蔡司原位液体电化学显微解决方案

基于蔡司全系列电子显微镜的原位液体电化学显微解决方案具有在真实液氛下的高分辨成像、多模态全面表征以及灵活扩展的创新优势。本期分享液氛SEM的原位多模态分析方法,以及高分辨成像的全新案例。 创新突破1:液氛SEM的原位多模态分析 蔡司原位液体电化学…

C# Socket 允许控制台应用通过防火墙

需求: 在代码中将exe添加到防火墙规则中,允许Socket通过 添加库引用 效果: 一键三联 若可用记得点赞评论收藏哦,你的支持就是写作的动力。 源地址: https://gist.github.com/cstrahan/513804 调用代码: private static void …

AI投资或成科技裁员罪魁祸首

最近的科技裁员让许多人对这个行业的稳定性产生了疑问。然而,仔细观察发现,这些裁员并不是经济困境的迹象,而是科技公司为了重新调整优先事项并投资未来而进行的战略举措。科技行业正投入数十亿美元用于人工智能(AI)&a…

BIO、NIO编程与直接内存、零拷贝

一、网络通信 1、什么是socket? Socket 是应用层与 TCP/IP 协议族通信的中间软件抽象层,它是一组接口,一般由操作 系统提供。客户端连接上一个服务端,就会在客户端中产生一个 socket 接口实例,服务端每接受 一个客户端…

iTunes Connect 中修改后的内购(IPA)审核所需的时间

引言 在 iOS 开发过程中,将应用上传到 App Store 是一个重要的步骤。应用审核和 IAP 商品审核是分开的,审核一般需要等待一周左右。如果审核通过,我们会收到 Apple 发来的反馈邮件,根据邮件中的指示进行后续操作。如果已经上架的…

顺序表的奥秘:高效数据存储与检索

🍿顺序表 🧀1、顺序表的实现🍥1.1 创建顺序表类🍥1.2 插入操作🍥1.3 查找操作🍥1.4 删除操作🍥1.5 清空操作 🧀2、ArrayList的说明🧀3、ArrayList使用🍥3.1 A…

jQuery 遍历 —— W3school 详解 简单易懂(十八)

什么是遍历? jQuery 遍历,意为“移动”,用于根据其相对于其他元素的关系来“查找”(或选取)HTML 元素。以某项选择开始,并沿着这个选择移动,直到抵达您期望的元素为止。 下图展示了一个家族树…

Spring Security的入门案例!!!

一、导入依赖 <dependencies><!--web--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!--security--><dependency><groupId>…

Kubernetes安装Seata1.8.0(注册到Nacos,连接外置数据库)

文章目录 Seata简介效果安装Seata1.8.01、拷贝数据2、修改配置3、初始化数据库4、安装Seata Seata简介 Seata 是一款开源的分布式事务解决方案&#xff0c;致力于提供高性能和简单易用的分布式事务服务。Seata 将为用户提供了 AT、TCC、SAGA 和 XA 事务模式&#xff0c;为用户…

CSA大中华区发布《AI安全白皮书》,中国电信、蚂蚁集团、华为、百度安全等单位参编

关注国际云安全联盟CSA公众号&#xff0c;回复关键词“AI”获取报告 2023年9月&#xff0c;CSA大中华区成立AI安全工作组&#xff0c;旨在共同解决 AI 技术快速发展所带来的安全难题。《AI安全白皮书》是CSA大中华区AI安全工作组的首个研究成果&#xff0c;由来自中国电信、蚂…

【计算机网络】——TCP协议

&#x1f4d1;前言 本文主要是【计算机网络】——传输层TCP协议的文章&#xff0c;如果有什么需要改进的地方还请大佬指出⛺️ &#x1f3ac;作者简介&#xff1a;大家好&#xff0c;我是青衿&#x1f947; ☁️博客首页&#xff1a;CSDN主页放风讲故事 &#x1f304;每日一句…

Java学习-常用API-ArrayList

ArrayList的遍历并删除元素&#xff08;案例&#xff09;ArrayList的常用apiArrayList是一种泛型集合ArrayList是什么&#xff1f;有何特点&#xff1f;作用&#xff1f; importjava.util.ArrayList; importjava.util.List; publicclassapiArrayListDemo1{ publicstaticvoidmai…

44 漏洞发现-APP应用之漏洞探针类型利用修复

目录 文章思路说明案例演示:抓包工具WEB协议面使用说明抓包工具非WEB协议面使用说明安卓逆向便捷APK一键提取URL演示利用Burp筛选及联动功能打出军体拳模拟器四个违法案例APP安全分析测试 涉及资源&#xff1a; 逆向只会涉及到相关工具的使用&#xff0c;不会涉及到原理&#x…

【论文阅读】Long-Tailed Recognition via Weight Balancing(CVPR2022)附MaxNorm的代码

目录 论文使用方法weight decayMaxNorm 如果使用原来的代码报错的可以看下面这个 论文 问题&#xff1a;真实世界中普遍存在长尾识别问题&#xff0c;朴素训练产生的模型在更高准确率方面偏向于普通类&#xff0c;导致稀有的类别准确率偏低。 key:解决LTR的关键是平衡各方面&a…

AutoMQ Kafka 云上十倍成本节约的奥秘(一): SPOT 实例

近年来&#xff0c;无论是海外还是国内&#xff0c;虽然受疫情影响&#xff0c;公有云的市场规模增速有所放缓&#xff0c;但是云的市场总规模仍然是持续增长的。公有云作为一个各个国家重点布局的战略方向和其本身万亿级市场的定位[1]&#xff0c;我们学习用好云是非常有必要的…

彻底解决 MAC Android Studio gradle async 时出现 “connect timed out“ 问题

最近在编译一个比较老的项目&#xff0c;git clone 之后使用 async 之后出现一下现象&#xff1a; 首先确定是我网络本身是没有问题的&#xff0c;尝试几次重新 async 之后还是出现问题&#xff0c;网上找了一些方法解决了本问题&#xff0c;以此来记录一下问题是如何解决的。 …

网络地址相关函数一网打尽

这块的函数又多又乱&#xff0c;今天写篇日志&#xff0c;以后慢慢补充 1. 网络地址介绍 1.1 ipv4 1.1.1 点、分十进制的ipv4 你对这个地址熟悉吗&#xff1f; 192.168.10.100&#xff0c;这可以当做一个字符串。被十进制数字、 “ . ”分开。IP地址的知识就不再多讲…

关于MyBatis和JVM的最常见的十道面试题

ORM项目中类属性名和数据库字段名不一致会导致什么问题&#xff1f;它的解决方案有哪些&#xff1f; 在ORM项目中&#xff0c;如果类的属性名称和数据库字段名不一致会场导致插入、修改时设置的这个不一致字段为null&#xff0c;查询的时候即使数据库有数据&#xff0c;但是查…

Jenkins如何从GIT下拉项目并启动Tomcat

一、先添加服务器 二、添加视图 点击控制台输出&#xff0c;滑到最下面&#xff0c;出现这个就说明构建成功了&#xff0c;如果没有出现&#xff0c;说明构建有问题&#xff0c;需要解决好问题才能启动哦~