这篇文章来源于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
七段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 编辑团队
设备升级版适用于所有热爱电子和机电一体化的人。
BM0351HV百力微120V-恒压转换控制器
测试发现下一代VoLTE智能手机电池寿命显著提升
ROS系统的MoveIt模块介绍
新能源汽车飞速发展,动力电池市场规模将进一步扩大
Harmonic高性能行星齿轮减速机应用分析
如何在您的项目中添加数码管
组态王与S7-1200PLC之间 Profinet无线以太网通信
新建许多的8英寸及12英寸晶圆厂,强劲带动半导体产业资本支出扩张
Melexis推出相对压力传感器MLX90821
未上市就已深度适配 OPPO R15带来当前全面屏最佳设计方案
Maxim:行业首款高集成度USB-C Buck充电器,尺寸减小30%
小米首发峰米快门式3D眼镜,120Hz快速刷新率,1080P高清画面,售价139元
Linux容器技术的原理是怎么样的应该如何使用
NVIDIA助力理想汽车发布全新一代理想ONE理想L8
电容的类别和符号
Matlab optimtool优化阵列天线的幅相激励
FPC表面电镀知识你了解的有哪一些
集成化和轻简化将成为BLDC电机的两大发展趋势
简易声控电路
IPTV质量监测系统技术