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

目录

数码管是什么?

一位数码管的引脚定义

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

数码管的原理图解析

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


今天开始学习数码管,它比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.mzph.cn/news/656992.shtml

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

相关文章

如何获取到小程序appId

一、申请测试号 直接访问这个链接微信扫一下 微信公众平台 然后再去微信公众平台登录,账号的选择中就会多一个微信小程序测试号 选择登录即可获取到appid 二、注册一个微信小程序 第二种方式,去微信公众平台注册一个小程序。 注册完成后,…

ARM汇编 4.GNU伪指令、内联汇编

汇编伪指令格式 标号symbol(label) 注释符号: 整行注释:# 语句分离:; 立即数前缀:# 或 $ 分段:.section伪操作,用于自定义新的段 .text:代码段.data&am…

MP4格式视频怎么提取gif?一招教你在线做

MP4是一种常见的数字多媒体容器格式,它是一种使用最广泛的视频文件格式之一。MP4文件可以包含音频、视频和字幕等多种媒体数据,并且可以通过各种播放器和设备进行播放和共享。它是一种压缩格式,可以在保持相对较小文件大小的同时提供较高的视…

Java 的 Map 與 List

通過重新new 一個ArrayList 轉化 resTask.setList(new ArrayList<Group>(custMap.values())); 无序的Map List 有序的数据放到Map&#xff0c;就变成无序。 List排序 按照code 的字母进行排序A-Z resTask.getListData().sort(Comparator.comparing(Gmer::getCode));…

spring框架(一)

1、Spring框架&#xff1a;IoC和AOP 服务端三层开发&#xff1a;表现层、业务层、持久层 ssm, springboot, springcloud(微服务&#xff0c;治理组件) Spring框架是一个流行的Java应用程序框架&#xff0c;它提供了许多功能来简化企业级应用程序的开发。其中&#xff0c;控制反…

云服务之PaaS:它有几种类型,有什么区别?

PaaS种类繁多&#xff0c;包括公共PaaS、私有PaaS和混合PaaS&#xff0c;可以根据IT人员要求的方式提供所需工具&#xff0c;以实现更快地应用交付。 新兴科技的发展、移动端的深入应用&#xff0c;让人们对应用设备的需求不断增长&#xff0c;但在需求增长的同时&#xff0c;…

大数据-Spark-关于Json数据格式的数据的处理与练习

上一篇&#xff1a; 大数据-MapReduce-关于Json数据格式的数据的处理与练习-CSDN博客 16.7 Json在Spark中的引用 依旧利用上篇的数据去获取每部电影的平均分 {"mid":1,"rate":6,"uid":"u001","ts":15632433243} {"m…

【DC-DC】AP5165B 高端电流采样 36V/1A 高调光比LED恒流驱动IC SOT89-5

产品应用原理图 5-36V耐压 3W射灯应用线路图 产品描述 AP5165B 是一款外围电路简单的连续电流模式的降压型 LED 恒流驱动芯片。在输入电压高于LED 电压时&#xff0c;可以有效地用于驱动一颗或者多颗串联 LED。输出电流可调&#xff0c;可达 1A。适用于3-36V 电压范围的非隔离…

初始化爱情的构造之旅

初始化爱情的构造之旅 The Constructive Journey of Initializing Love 在一个名为“编程之城”的奇幻世界里&#xff0c;住着两位年轻的程序员——林浩然和杨凌芸。林浩然是Java王国中的首席对象设计师&#xff0c;擅长用代码构建复杂而精巧的对象&#xff1b;而杨凌芸则是数据…

探索云性能测试的各项功能有哪些?

云性能测试作为现代软件开发和部署过程中不可或缺的一环&#xff0c;为确保系统在各种条件下的高效运行提供了关键支持。本文将介绍云性能测试的各项功能&#xff0c;帮助您更好地了解其在软件开发生命周期中的重要性。 1. 负载测试 云性能测试的首要功能之一是负载测试。通过模…

Windows Server 2003 FTP服务器搭建

系列文章目录 目录 系列文章目录 文章目录 前言 一、FTP服务器是什么&#xff1f; 二、配置服务器 1.实验环境搭建 6)再次测试网络连通性 2.服务器搭建 1)控制面板中找到增加或删除程序打开 2)点击增加程序 3)安装FTP服务器 6)找到刚自己设定的路径下的文件夹,上传…

C语言——文件操作(看这一篇就够了)

1、为什么使用文件&#xff1f; 我们前面学习结构体&#xff0c;在写通讯录的时候会发现一个问题&#xff0c;我们向通讯录里面录入数据&#xff0c;当程序退出的时候&#xff0c;记录的数据也随之没有了&#xff0c;等下次我们在再调用通讯录时&#xff0c;又得重新录入数据&…

Java基于SpringBoot的学科竞赛系统,附源码,文档

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…

ctfshow web71

开启环境&#xff1a; c?><?php $anew DirectoryIterator("glob:///*"); foreach($a as $f) {echo($f->__toString(). );} exit(0); ?> cinclude("/flagc.txt");exit();

网络和Linux网络_15(IO多路转接)reactor编程_服务器+相关笔试题

目录 1. reactor的服务器 1.1 Sock.hpp 1.2 加协议分割报文 1.3 序列化和反序列化 Protocol.hpp main.cc Epoll.hpp TcpServer.hpp 2. 相关笔试题 答案及解析 本篇完。 1. reactor的服务器 Log.hpp和以前一样&#xff0c;因为下面要写ET模式所以Sock.hpp加了一个把…

solr的原理是什么

1 Java程序里如果有无限for循环的代码导致CPU负载超高&#xff0c;如何排查&#xff1f; 排查Java程序中由于无限循环导致的CPU负载过高的问题&#xff0c;可以按照以下步骤进行&#xff1a; 资源监控&#xff1a; 使用系统命令行工具&#xff08;如Linux上的top或htop&#xf…

二、防御保护---防火墙基础知识篇

二、防御保护---防火墙基础知识篇 一、什么是防火墙二、防火墙的发展史1.包过滤防火墙(一个严格的规则表)2.应用代理防火墙(每个应用添加代理)3.状态检测防火墙(首次检查建立会话表)3.入侵检测系统(IDS)-----网络摄像头4.入侵防御系统(IPS)-----抵御2-7层已知威胁5.防病毒网关(…

Python---网络编程知识详解(学习笔记)基础部分

目录 一、IP地址 1.引入IP地址 2.ip地址的分类 2.1 IPv4的5种类别以及共有IP和私有IP 2.1.1 按照基本格式划分 2.1.2 按照功能用途来划分 2.1.2 特殊的P地址 一、IP地址 1.引入IP地址 特点&#xff1a;在逻辑上标记一台电脑&#xff08;唯一标记&#xff09; 作用&…

【Midjourney】如何自定义一套参数

使用Midjourney有时候会遇到需要调整某些参数的时候&#xff0c;例如宽高之类的&#xff1a; --hd --ar 7:4 而Midjourney中提供了一条指令用于自定义一套参数方便重复使用。 以下指令创建一个名为“mine”的选项&#xff0c;翻译过来就是 --hd --ar 7:4: 创建成功后会有类似…

【C++版】排序算法详解

目录 直接插入排序 希尔排序 选择排序 冒泡排序 堆排序 快速排序 hoare法 挖坑法 前后指针法 非递归版本 快速排序中的优化 归并排序 递归版本 非递归版本 计数排序 总结 直接插入排序 直接插入排序的思想是&#xff1a;把待排序的记录按其关键码值的大小逐个插入…