当前位置:网站首页>Arduino点亮数码管

Arduino点亮数码管

2022-08-02 03:29:00 WENJIE科技

前言

在本教程中,我们将把一个七段显示器连接到 ARDUINO UNO。显示屏从 0 到 9 计数并将自身重置为零。在继续之前,让我们先讨论一下七段显示器。您还可以查看有关将arduino 与七段显示器连接的详细教程。

七段显示器的名字来源于它有七个照明段。这些部分中的每一个都有一个 LED(发光二极管),因此是照明。LED 的制造方式使得每个 LED 的照明都包含在其自己的段中。这里需要注意的重要一点是,任何七段显示器中的 LED 均以共阳极模式(共正极)或共阴极模式(共负极)排列。
在这里插入图片描述共阴共阳LED的电路连接如上图所示。在这里可以观察到,在 CC 中,每个 LED 的负极端子连接在一起并引出为 GND。在 CA 中,每个 LED 的正极连接在一起并作为 VCC 引出。这些 CC 和 CA 在将多个单元多路复用在一起时非常方便。

所需组件

硬件: ARDUINO UNO,电源(5v),HDSP5503七段显示器(两块)(任何共阴极都可以),47uF电容(跨接电源)。

软件: arduino IDE

电路图及工作说明

在这里插入图片描述为 7 段显示器完成的连接如下所示:

PIN1 或 E 到 ARDUINO UNO 的 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Ω 电阻接地。

现在要了解工作原理,考虑一个七段显示器连接到一个端口,假设我们已经连接了“A段显示器到PIN0”,“B段显示器到PIN1”,“A段显示器到PIN3”,“一段显示转PIN4”、“一段显示转PIN5”、“一段显示转PIN6”。如图所示为共地型。

共阴极7段显示器

在这里,公共地线必须接地才能使显示器工作。可以在二极管模式下使用万用表检查显示的每一段。各段电源不宜大于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。0-9 计数器的工作 最好在下面给出的 C 代码中逐步解释:

代码

#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);


                }


}
原网站

版权声明
本文为[WENJIE科技]所创,转载请带上原文链接,感谢
https://blog.csdn.net/m0_46509684/article/details/126006820