当前位置:网站首页>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”。如图所示为共地型。
在这里,公共地线必须接地才能使显示器工作。可以在二极管模式下使用万用表检查显示的每一段。各段电源不宜大于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);
}
}
边栏推荐
猜你喜欢
随机推荐
win10内存占用很高,关闭所有应用程序依然降不下来(win11)
Scala 中的集合(二):集合性能比较
从Attention到Self-Attention和Multi-Head Attention
18张图,直观理解神经网络、流形和拓扑
cmd控制台窗体大小设置
Go 程序太大了,能要个延迟初始化不?
修复APP的BUG,热修复的知识点和大厂的相关资料汇总
OpenCore 黑苹果安装教程
完全背包问题(动态规划)
挖矿是什么意思?矿工都做了什么?
【一句话攻略】彻底理解JS中的回调(Callback)函数
蓝桥杯:国二选手经验贴 附蓝桥杯历年真题
Transformer结构解析及常见问题
管理node版本的工具volta
Laravel随笔记录
如何在正则表达式里表达可能存在也可能不存在的内容?
关于我的大创、论文~
kotlin语法总结(一)
《scala 编程(第3版)》学习笔记2
研发过程中的文档管理与工具