原文地址:https://circuitdigest.com/microcontroller-projects/7-segment-display-interfacing-with-arduino
Arduino与7段显示器连接
经过**迪利普·拉贾(Dilip Raja)** 2015年6月6日8
在本教程中,我们将把一个七段显示器连接到ARDUINO UNO。显示屏从0-9开始计数,并将自身重置为零。在继续之前,让我们首先讨论七个分段显示。
七段显示器的得名是因为它具有七个照明段。这些段中的每一个都有一个LED(发光二极管),因此可以发光。LED的制造方式使得每个LED的照明都包含在自己的部分中。这里要注意的重要一点是,任何七段显示器中的LED都以共阳极模式(共正)或共阴极模式(共负)排列。
上图显示了共阴极和共阳极中LED的电路连接。在这里,可以观察到,在CC中,每个LED的负极都连接在一起,并作为GND引出。在CA中,每个LED的正极连接在一起并作为VCC输出。这些CC和CA在将多个单元复用在一起时非常方便。
所需组件
硬件: ARDUINO UNO,电源(5v),HDSP5503七段显示器(两块)(任何公共阴极都可以),47uF电容器(跨电源连接)。
软体: arduino IDE(Arduino每晚)
电路图和工作说明
7段显示的连接如下所示:
ARDUINO UNO的PIN1或E至PIN 6
PIN2或D到PIN 5
PIN4或C至PIN 4
PIN5或H或DP到PIN 9 ///不需要,因为我们不使用小数点
PIN6或B到PIN 3
PIN7或A至PIN 2
PIN9或F至PIN 7
PIN10或G到PIN 8
PIN3或PIN8或CC通过100Ω电阻接地。
现在,要了解其工作原理,请考虑将七段显示器连接到端口,因此,我们已经将“显示器的一部分连接到PIN0”,“显示器的B部分连接到PIN1”,“显示器的一部分连接到PIN3”,“显示到PIN4的一段”,“显示到PIN5的一段”,“显示到PIN6的一段”。并为普通接地型,如图所示。
在这里,公共接地必须连接到地面,显示器才能正常工作。可以使用二极管模式的万用表检查显示的每个部分。每个段均不得使用大于4v的电压供电,否则显示屏将被永久损坏。为了避免这种情况,可以在公共端子上提供一个公共电阻,如电路图所示。
现在,如果我们要在该显示中显示“ 0”,如下图所示。
我们需要打开“ A,B,C,D,EF”段的LED,因此需要给PIN0,PIN1,PIN2,PIN3,PIN4和PIN5供电。因此,每当我们需要一个“ 0”时,就需要给所有提到的引脚供电。
现在,如果我们想显示“ 1”
我们需要为网段“ B,C”供电,要使网段B,C开启,我们需要给PIN1,PIN2供电。当两个引脚都为高电平时,显示为“ 1”。因此,如上所示,我们将为与要在显示屏上显示的数字相对应的引脚供电。
在这里,我们将编写一个程序来打开和关闭每个段,计数为0-9。最好在下面的C代码中逐步解释0-9计数器的工作 :
代码
#define segA 2//connecting segment A to PIN2
#define segB 3// connecting segment B to PIN3
#define segC 4// connecting segment C to PIN4
#define segD 5// connecting segment D to PIN5
#define segE 6// connecting segment E to PIN6
#define segF 7// connecting segment F to PIN7
#define segG 8// connecting segment G to PIN8
int COUNT = 0; //count integer for 0-9 increment
void setup()
{
for (int i = 2; i < 9; i++)
{
pinMode(i, OUTPUT);// taking all pins from 2-8 as output
}
}
void loop()
{
switch (COUNT)
{
case 0://when count value is zero show”0” on disp
digitalWrite(segA, HIGH);
digitalWrite(segB, HIGH);
digitalWrite(segC, HIGH);
digitalWrite(segD, HIGH);
digitalWrite(segE, HIGH);
digitalWrite(segF, HIGH);
digitalWrite(segG, LOW);
break;
case 1:// when count value is 1 show”1” on disp
digitalWrite(segA, LOW);
digitalWrite(segB, HIGH);
digitalWrite(segC, HIGH);
digitalWrite(segD, LOW);
digitalWrite(segE, LOW);
digitalWrite(segF, LOW);
digitalWrite(segG, LOW);
break;
case 2:// when count value is 2 show”2” on disp
digitalWrite(segA, HIGH);
digitalWrite(segB, HIGH);
digitalWrite(segC, LOW);
digitalWrite(segD, HIGH);
digitalWrite(segE, HIGH);
digitalWrite(segF, LOW);
digitalWrite(segG, HIGH);
break;
case 3:// when count value is 3 show”3” on disp
digitalWrite(segA, HIGH);
digitalWrite(segB, HIGH);
digitalWrite(segC, HIGH);
digitalWrite(segD, HIGH);
digitalWrite(segE, LOW);
digitalWrite(segF, LOW);
digitalWrite(segG, HIGH);
break;
case 4:// when count value is 4 show”4” on disp
digitalWrite(segA, LOW);
digitalWrite(segB, HIGH);
digitalWrite(segC, HIGH);
digitalWrite(segD, LOW);
digitalWrite(segE, LOW);
digitalWrite(segF, HIGH);
digitalWrite(segG, HIGH);
break;
case 5:// when count value is 5 show”5” on disp
digitalWrite(segA, HIGH);
digitalWrite(segB, LOW);
digitalWrite(segC, HIGH);
digitalWrite(segD, HIGH);
digitalWrite(segE, LOW);
digitalWrite(segF, HIGH);
digitalWrite(segG, HIGH);
break;
case 6:// when count value is 6 show”6” on disp
digitalWrite(segA, HIGH);
digitalWrite(segB, LOW);
digitalWrite(segC, HIGH);
digitalWrite(segD, HIGH);
digitalWrite(segE, HIGH);
digitalWrite(segF, HIGH);
digitalWrite(segG, HIGH);
break;
case 7:// when count value is 7 show”7” on disp
digitalWrite(segA, HIGH);
digitalWrite(segB, HIGH);
digitalWrite(segC, HIGH);
digitalWrite(segD, LOW);
digitalWrite(segE, LOW);
digitalWrite(segF, LOW);
digitalWrite(segG, LOW);
break;
case 8:// when count value is 8 show”8” on disp
digitalWrite(segA, HIGH);
digitalWrite(segB, HIGH);
digitalWrite(segC, HIGH);
digitalWrite(segD, HIGH);
digitalWrite(segE, HIGH);
digitalWrite(segF, HIGH);
digitalWrite(segG, HIGH);
break;
case 9:// when count value is 9 show”9” on disp
digitalWrite(segA, HIGH);
digitalWrite(segB, HIGH);
digitalWrite(segC, HIGH);
digitalWrite(segD, HIGH);
digitalWrite(segE, LOW);
digitalWrite(segF, HIGH);
digitalWrite(segG, HIGH);
break;
break;
}
if (COUNT < 10)
{
COUNT++;
delay(1000);///increment count integer for every second
}
if (COUNT == 10)
{
COUNT = 0; // if count integer value is equal to 10, reset it to zero.
delay(1000);
}
}