这篇文章来源于DevicePlus.com英语网站的翻译稿。
在之前的项目中,我们已经展示了如何使用Arduino来控制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 |
七段LED数码管 |
电线 |
8x 220 ohm电阻器 |
面包板 |
USB数据线 |
Arduino IDE |
由于接线会比较繁杂,请确保面包板上有足够的空间放置所需要的所有电线和电阻器。一切准备就绪后,我们开始进入下一环节。
代码
因为我们使用了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。连接好数码管后,您可以上传代码并将其开启。请尝更改代码以显示不同的数字,然后查看您的显示效果。
DevicePlus 编辑团队
设备升级版适用于所有热爱电子和机电一体化的人。
审核编辑黄宇
-
led
+关注
关注
242文章
23252浏览量
660543 -
数码管
+关注
关注
32文章
1882浏览量
91060 -
Arduino
+关注
关注
188文章
6468浏览量
186946
发布评论请先 登录
相关推荐
评论