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

目录

数码管是什么?

一位数码管的引脚定义

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

数码管的原理图解析

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


今天开始学习数码管,它比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”,说明程序没有问题!

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

交叉编译opencv运行平台rk3588

opencv版本:4.8.0 opencv_contrib版本:4.8.0 在源码目录下建build目录,进入该目录配置编译选项生成makefile cmake 配置参数: cmake -DCMAKE_MAKE_PROGRAM:PATH/usr/bin/make -DCMAKE_INSTALL_PREFIX/home/rog/my_file/other_L…

「工业遥测」图表控件LightningChart在化工精炼领域中的应用

LightningChart.NET完全由GPU加速,并且性能经过优化,可用于实时显示海量数据-超过10亿个数据点。 LightningChart包括广泛的2D,高级3D,Polar,Smith,3D饼/甜甜圈,地理地图和GIS图表以及适用于科学…

再谈启动一个Activity大致时序图

太多了,笔者不想写, 读者可通过PlantUML插件查看如下PUML文件生成的时序图。 补充说明下,Android31版本。 startuml https://plantuml.com/sequence-diagram skinparam dpi 800 scale 15000 width scale 5000 heightautonumber Launcher La…

搭建 prometheus + grafana + springboot3 监控

下载安装包 下载prometheus:https://github.com/prometheus/prometheus/releases/download/v2.42.0/prometheus-2.42.0.windows-amd64.zip 下载grafana: https://dl.grafana.com/enterprise/release/grafana-enterprise-9.4.1.windows-amd64.zip Spr…

未来时尚:数字化管理引领服装企业商品计划的创新浪潮

时尚产业正经历着一场数字化的浪潮,数字化管理正成为引领服装企业商品计划的不可忽视的创新力量。这一变革不仅影响了企业内部的运营方式,更深刻地塑造了未来时尚的面貌。本文将深入探讨数字化管理如何领导着服装企业商品计划进入创新浪潮,重…

数字图像处理(实践篇)三十八 OpenCV-Python实现ORB特征检测实践

​ 目录 一 涉及的函数 二 实践 ​ ORB(Oriented FAST and Rotated BRIEF)是一种特征点检测和描述算法,它结合了FAST关键点检测和BRIEF描述子。ORB算法具有以下优势: ①实时性:能够在实时应用中进行快速的特征点检测和描述。

DevExpress WinForms中文教程 - 如何创建可访问的WinForms应用?(一)

为用户创建易访问的Windows Forms应用程序不仅是最佳实践的体现,还是对包容性和以用户为中心的设计承诺。在应用程序开发生命周期的早期考虑与可访问性相关的需求可以节省长期运行的时间(因为它将决定设计决策和代码实现)。 一个可访问的WinForms应用程序提供了各种…

一个基于 .NET 7 + Vue.js 的前后端分离的通用后台管理系统框架 - DncZeus

前言 今天给大家推荐一个基于.NET 7 Vue.js(iview-admin) 的前后端分离的通用后台权限(页面访问、操作按钮控制)管理系统框架:DncZeus。 官方项目简介 DncZeus是一个基于 .NET 7 Vue.js 的前后端分离的通用后台管理系统框架。后端使用.NET 7 Entity Framework…

2023年黄金市场行业分析(电商数据查询软件):年销售额激增104%,黄金消费持续走热

近日,社交平台上不少年轻人将实物金条在黄金加工店加工成黄金首饰的帖子爆火,不少人也在评论区表示要跟随。可以看到,黄金的热潮还在持续。 根据世界黄金协会《2022年中国金饰市场趋势洞察》报告显示,黄金市场被认为是销售大头的…

每日一题 2808. 使循环数组所有元素相等的最少秒数(中等)

可以看成一个感染过程,如果目标值为 k 的话,那么第一秒就是 nums 中所有值为 k 的地方向左右两边扩散一位通过一个字典我们可以把 nums 中出现的每一个的值的下标以 list 的形式存储处理每一个值的下标,对于值 k 来说,如果以 k 为…

【数据结构】链表(单链表实现+测试+原码)

1.链表 1.1 链表的概念及结构 概念:链表是一种物理存储结构上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表 中的指针链接次序实现的 。 现实中:链表就像是一列动车,一节连着一节 数据结构中的链表 注意: 1.从上图可看出…

关于Spring Boot和MyBatis常见的十道面试题

拦截器和过滤器有什么区别? 拦截器(Interceptor)和过滤器(Filter)都是用于在请求道道目标资源的之前或之后进行处理的组件。主要区别有以下几点: 依赖对象不同:过滤器是来时Servlet&#xff0…

蓝桥杯---加法变乘法

我们都知道:123 ….. 491225,现在要求你把其中两个不相邻的加号变成乘号,使得结果为2015 比如:123 ... 10*1112 ... 27*2829 ... 492015 就是符合要求的答案. 请你寻找另外一个可能的答案,并把位置靠前的那个乘号左边的数字提交(对于示例,就是 提交10)…

http和https的区别是什么?https有什么优缺点?

HTTP(Hypertext Transfer Protocol,超文本传输协议)是一个简单的请求-响应协议,它通常运行在TCP之上。它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。这个简单模型是早期Web成功的有功之臣,因为它…

Walrus 0.5发布:重构交互流程,打造开箱即用的部署体验

开源应用管理平台 Walrus 0.5 已于近日正式发布! Walrus 0.4 引入了全新应用模型,极大程度减少了重复的配置工作,并为研发团队屏蔽了云原生及基础设施的复杂度。Walrus 0.5 在这一基础上,通过重构交互流程、增强抽象能力&#xff…

零基础也能学会平面图绘制?跟着大厂设计师一起学习吧!

绘制平面图是一种审美,“美”的感觉本身是主观的,我们很难定义“美”的具体标准,但绘制平面图的观众是人,人们对事物的感情有一个普遍的规则,人们普遍认为观众可以欣赏的平面图是一个很好的设计。因此,在绘…

Web前端开发工具总结

一、nvm,node,npm之间的区别 nodejs:在项目开发时的所需要的代码库。相当于JDK npm:nodejs 包管理工具,npm 可以管理 nodejs 的第三方插件。在安装的 nodejs 的时候,npm 也会跟着一起安装。相当于Maven。 …

led护眼灯真的能护眼吗安全吗?护眼又安全的LED灯推荐

近些年来,中国患近视的孩子越来越多,为了让孩子在家写作业时眼睛少受损伤,很多家长专门准备了LED台灯。但不合格LED灯反而加剧孩子们视力疲劳,甚至出现近视。其中重要一个原因是某些LED灯存在着严重的频闪,长期在这样的…

那些年与指针的情仇(二)---二级指针指针与数组的那点事函数指针

关注小庄 顿顿解馋(。・∀・)ノ゙ 欢迎回到我们的大型纪录片《那些年与指针的爱恨情仇》,在本篇博客中我们将继续了解指针的小秘密:二级指针,指针与数组的关系以及函数指针。请放心食用&a…

c# textbox 提示文字

1. 定义提示文字内容 private readonly string RemarkText "最多输入100字"; // 提示文字 2. 添加textbox 焦点事件, 初始化textbox提示文字和字体颜色 public UserControl(){InitializeComponent();tb_Remark.Text RemarkText;tb_Remark.ForeColor…