0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何在您的项目中添加数码管

胖子的逆袭 来源:DevicePlus 作者:DevicePlus 2023-03-23 15:13 次阅读

这篇文章来源于DevicePlus.com英语网站的翻译稿。

在之前的项目中,我们已经展示了如何使用Arduino来控制LED矩阵。但是,如果您的项目只需要显示数字,那么最好使用七段数码管。这些数码管看起来像复古的数字闹钟,只需要七个LED就可以显示出数字。本指南将向您展示如何完成这个工作。

七段LED数码管工作原理

七段数码管是由7个LED组成的阵列,呈8字形,可以分别被点亮以显示不同的数字(在某些情况下显示的是字母)。通常会有第8个LED用作显示小数点。一些模块带有多个七段阵列。例如, 一个4位七段数码管可以用作时钟

为了简单起见,在本指南中,我们只显示一位数字。七段数码管可以采用以下两种形式之一:共阳极和共阴极 。在共阳极配置中,所有LED都连接到电源,可以通过将LED选择性地接地来对其进行控制。在共阴极配置中,情况刚好相反:所有LED都接地,然后通过选择性地连接电源来对LED单独进行控制。

您的数码管的确切配置可能会有所不同,所以请查看模块上的标记并找到规格表,以确认数码管连接的配置,以及哪些引脚对应于哪个LED。在本指南中,我们将使用5611AS,为共阴极配置。

为了成功运行代码,您还需要SevSeg库,可以在Github上找到资源。下载.zip文件后,进入Sketch > Include library > Add .ZIP library然后选择SevSeg库。现在,您就可以将此库导入到您的草图中了。

所需部件

与LED矩阵一样,该项目将需要相当多的布线和电阻器。由于每个LED都需要有自己的电阻器以避免烧坏,所以请确保准备足够的电阻器。对于整个项目,您需要以下部件:

Arduino Uno

poYBAGPy0h-AKVGzAACK9V2MX8I102.png

七段LED数码管

pYYBAGPy0iGAYz05AACjVM2S-RU983.jpg

电线

poYBAGPy0iSARikFAACVaV8CZI0452.png

8x 220 ohm电阻器

pYYBAGPy0ieAJAYkAAB_1g7BEic815.png

面包板

poYBAGPy0iqAXOKlAAFsqBFbUfo719.png

USB数据线

poYBAGPy0iyAC2qFAAA80oFZfRA595.png

Arduino IDE

pYYBAGPy0i-AfIx9AABB1vG6gtU835.png

由于接线会比较繁杂,请确保面包板上有足够的空间放置所需要的所有电线和电阻器。一切准备就绪后,我们开始进入下一环节。

代码

因为我们使用了SevSeg库,所以该项目的代码非常简单。首先,以下是您可以粘贴到IDE并上传的完整代码:

#include “SevSeg.h”
SevSeg digit;

void setup(){
byte numDigits = 1;
byte digitPins[] = {2, 3, 4, 5, 6, 7, 8, 9};
byte segmentPins[] = {6, 5, 2, 3, 4, 7, 8, 9};
bool resistorsOnSegments = true;

byte hardwareConfig = COMMON_CATHODE;
digit.begin(hardwareConfig, numDigits, digitPins, segmentPins, resistorsOnSegments);
digit.setBrightness(90);
}

void loop(){
for (int i = 0;i < 10;i++){
digit.setNumber(i);
digit.refreshDisplay();
delay(1000);
}
}

接下来,我们从前两行开始查看一下代码的各个部分。

#include “SevSeg.h”
SevSeg digit;

此处的第一行用于导入SevSeg.h库,让您可以使用该库中的所有命令。第二个用于创建一个SevSeg类型的对象,在本例中命名为“digit”,将用于控制您的数码管。对于具有多个数字的模块,您可以为每个数字添加一个对象,并分别进行命名。

void setup(){
byte numDigits = 1;
byte digitPins[] = {2, 3, 4, 5, 6, 7, 8, 9};
byte segmentPins[] = {6, 5, 2, 3, 4, 7, 8, 9};
bool resistorsOnSegments = true;

byte hardwareConfig = COMMON_CATHODE;
digit.begin(hardwareConfig, numDigits, digitPins, segmentPins, resistorsOnSegments);
digit.setBrightness(90);
}

在本部分中,我们将对数码管进行设置。这里的大部分工作都是由digit.begin()函数来完成的。根据SevSeg库文档,此命令用于告诉Arduino您的数码管具有哪些特征,例如位数(在本例中为1)、您用于寻址数码管的Arduino引脚(引脚2-9),以及电路中是否有电阻。segmentPins数组指定了哪个Arduino引脚对应于哪个段,包括从A到G以及最后的小数点。请参阅您的数码管文档以确认哪些段与哪些引脚相对应。

在传递给digit.begin函数之前,以上的每个参数都会被分配给一个变量,这有助于在之后对草图进行扩展。最后,digit.setBrightness用来指定点亮LED的亮度。

void loop(){
for (int i = 0;i < 10;i++){
digit.setNumber(i);
digit.refreshDisplay();
delay(1000);
}
}

在loop()部分,我们将通过一个循环来执行显示工作,在该循环中将从0计数到9,然后再重新开始。在每次迭代中,变量i将在用于在digit.setNumber 命令中告诉数码管显示哪个数字。SevSeg库会自动编译这一命令,然后将正确的信号发送到正确的LED段(只要您在上一部分中正确分配了它们)。接下来,调用digit.refreshDisplay来通知数码管更新数字。

最后,我们添加了一个 delay(1000)命令来使每个数字可以显示一秒钟。

接线


连接数码管将会涉及很多的接线工作,不过其实该过程并不像看起来那么复杂。再次说明,我们所使用的型号是5611AS,但如果您使用的是其他型号,请查看您的数码管规格。从数码管的底部(有小数点LED的一侧)开始,从左到右,引脚为1到5。在顶部,从左到右为引脚10到6。您可以将其视为从左下角开始为引脚1,然后沿逆时针绕数码管计数依次到引脚10。

对于该数码管,您需要在Arduino与数码管引脚之间连接8个电路,并且每个电路中间都有一个220欧姆电阻器。每个LED都需要一个电阻器来防止被烧坏。虽然您也可以在公共接地引脚后添加一个更高阻值的电阻器,但是这会导致不同数字显示出不同级别的亮度,而该亮度取决于点亮的段数。

在下面每个连接中,都要使用面包板在Arduino和数码管之间的电路中添加一个电阻器,并且将Arduino上的引脚连接到数码管上相应的引脚:

● 连接Arduino引脚2和数码管引脚 4
● 连接Arduino引脚3和数码管引脚 2
● 连接Arduino引脚4和数码管引脚 1
● 连接Arduino引脚5和数码管引脚 6
● 连接Arduino引脚6和数码管引脚 7
● 连接Arduino引脚7和数码管引脚 9
● 连接Arduino引脚8和数码管引脚 10
● 连接Arduino引脚9和数码管引脚 5

最后,数码管每一侧的两个中间引脚——引脚3和8——应该连接到Arduino上的GND。连接好数码管后,您可以上传代码并将其开启。请尝更改代码以显示不同的数字,然后查看您的显示效果。

pYYBAGPbhjqAbi1JAAAGd6_rQT0867.png

DevicePlus 编辑团队

设备升级版适用于所有热爱电子和机电一体化的人。

审核编辑黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • led
    led
    +关注

    关注

    237

    文章

    22450

    浏览量

    645890
  • 数码管
    +关注

    关注

    31

    文章

    1827

    浏览量

    89950
  • Arduino
    +关注

    关注

    184

    文章

    6428

    浏览量

    184845
收藏 人收藏

    评论

    相关推荐

    数码管 定制,开模,常规数码管生产厂家

    各种颜色可选,质量保证,各种型号的数码管定制,欢迎大家采购和询问蓝,红,白,绿,黄,黄绿,贴片数码管数码管模块一位,两位,三位,四位,数码管灯条也希望广大电子发烧友来询问,广交好友我
    发表于 05-20 11:53

    求一温度测量用数码管显示的程序

    求温度加数码管的程序 求大神
    发表于 10-12 15:43

    请问SHT11测到的温湿度如何在数码管上显示?SHT11的程序用的官方的,如何增加数码管显示?

    请问SHT11测到的温湿度如何在数码管上显示?SHT11的程序用的官方的,如何增加数码管显示?采用四位数码管显示温度,四位数码管显示湿度。
    发表于 05-22 22:44

    何在数码管显示温度的时候,通过一个阈值控制步进电机的运转?

    何在数码管显示温度的时候,通过一个阈值控制步进电机的运转。目前我的问题是,数码管显示温度传感器的同时步进电机再运转就会发生两者都不能正常工作,像 数码管一山一闪的,电机一颤一颤的。求各位大神传教一下啊
    发表于 04-16 14:03

    请问有米字数码管与8段数码管的资料吗?

    我想做一个米字数码管与8段数码管的 Arduino 显示类库,可以用于一些小的LED米字与8段数码管的显示项目中。比如:计时器、日期牌、售
    发表于 06-24 01:49

    数码管显示原理及应用

    单片机学习----数码管显示原理及应用代码规划内容:一、数码管显示原理二、如何用万用表检测数码管的引脚排列三、数码管与单片机的电气连接四、数码管
    发表于 11-17 08:32

    如何实现多位数码管的显示

    按键累加计数,并显示于数码管。实验电路:3 实现四位数码管的动态扫描显示;通过动态扫描的方式让四位数码管分别显示个人学号后4码;写出动态扫描函数的实验代码。原始程序码:、、实训2 数码管
    发表于 11-18 07:16

    数码管介绍与使用

    数码管、LCD液晶屏、等各类显示模块的使用一、 数码管的使用。1. 数码管介绍一、 数码管的使用。1. 数码管介绍
    发表于 11-18 08:44

    矩阵按键数码管移位显示

    单片机中级项目13丨矩阵按键数码管移位显示
    发表于 12-01 08:17

    数码管显示原理是什么

    1数码管显示原理我们先来看几个数码管的图片, 左图为单位数码管、中图为双位数码管、右图为四位数码管, 另外还有右下角不带点的
    发表于 12-08 07:47

    数码管的结构和功能,如何使用数码管

    数码管显示一、实验目的:1、了解数码管的结构和功能;2、学会如何区分三极的三个引脚并正确使用三极;‘3、学会利用“星星点灯”实验原理来控制数码管
    发表于 01-10 07:42

    数码管驱动电路分享

    根据项目需求可以用I/O外部上拉,用来驱动数码管;也可以74HC138(38译码器)+74HC245(8路信号收发器)驱动数码管。本文会以后者为数码管驱动电路,在代码上实现
    发表于 01-24 06:27

    数码管的原理是什么?如何对数码管进行仿真呢

    数码管的原理是什么?如何对数码管进行仿真呢?怎样去设计一种数码管的静态驱动电路呢?
    发表于 01-25 07:44

    什么是数码管?静态数码管的驱动介绍

    目录一,什么是数码管二,静态数码管的驱动三,动态数码管四,动态数码管显示编程实战五,使用38译码器驱动动态数码管一,什么是
    发表于 02-24 06:21

    何在Raspberry Pi项目中添加Siri控制

    目的:本教程旨在教您如何使用SiriControl开源Python框架在RaspberryPi项目中添加Siri功能和控制功能。
    的头像 发表于 02-27 10:27 478次阅读
    如<b class='flag-5'>何在</b>Raspberry Pi<b class='flag-5'>项目中</b><b class='flag-5'>添加</b>Siri控制