再一次问好,
我正在考虑如何用 Arduino Uno 控制 20 多个 led,因为 Arduino Uno 只有 13 个数字引脚。那么怎么可能呢?这就是我带移位寄存器 74hc595 的原因。我们只需要 3 个 Arduino 数字引脚来使用 74hc595 移位寄存器控制 LED。移位寄存器教程有 3 个部分。
控制 8 个 LED。控制 LED 亮度。控制 2 shiftRegister 与 LED 效果。我也会解释编码。
1. Arduino Uno 到控制移位寄存器。
2. 两个移位寄存器 74hc595 用于控制 LED。
3. 16 个 LED 作为输出。
4. 16个保护LED的电阻。
5. 用于在其上构建电路的面包板。
6. 用于连接的跳线。
如果您想了解移位寄存器的工作原理?点击这个链接
引脚连接:
让我们构建 LED 追逐者。
首先,拿起面包板并将面包板的两侧与用于为移位寄存器供电的跳线连接。
之后,一个接一个地连接 LED,并确保 LED GND 引脚连接到面包板的接地侧,并且不要忘记添加一个 220 欧姆电阻以保护 LED 免受大电流的影响。
现在将移位寄存器连接到面包板上。
接下来,将移位寄存器引脚 16 连接到 5v。
接下来,将移位寄存器引脚 8 连接到 GND。
接下来,将移位寄存器引脚 10 连接到 5v。
接下来,将移位寄存器引脚 13 连接到 GND。
现在我们必须将 shiftRegister 连接到 Arduino,因此将 shiftRegister 引脚 11 连接到 Arduino 数字引脚 2。
将 shiftRegister 引脚 12 连接到 Arduino 数字引脚 3。
将 shiftRegister 引脚 14 连接到 Arduino 数字引脚 4。
之后,将 shiftRegister 的输出引脚连接到 LED。
将 ShiftRegister 引脚 15 连接到 LED 1。
将 ShiftRegister 引脚 1 连接到 LED 2。
将所有 LED 一个一个连接到 ShiftRegister 引脚 7。
之后,将面包板的正极连接到 Arduino 5v 引脚。
接下来,将面包板的负极连接到 Arduino GND 引脚。
现在电路完成了,让我们跳到编码部分。
打开 Arduino IDE。
将您的 Arduino 插入计算机并上传代码。
int clockPin = 2;
int latchPin = 3;
int dataPin = 4;
byte leds = 0;
void setup() {
pinMode(latchPin, OUTPUT);
pinMode(dataPin, OUTPUT);
pinMode(clockPin, OUTPUT);
}
void loop() {
leds = 0;
updateShiftRegisterR();
delay(100);
for (int i = 0; i < 8; i++){
bitSet(leds, i);
updateShiftRegisterR();
delay(100);
}
leds = 0;
updateShiftRegisterL();
delay(100);
for (int i = 0; i < 8; i++){
bitSet(leds, i);
updateShiftRegisterL();
delay(100);
}
}
void updateShiftRegisterL(){
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST, leds);
digitalWrite(latchPin, HIGH);
}
void updateShiftRegisterR(){
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, LSBFIRST, leds);
digitalWrite(latchPin, HIGH);
}
首先,我们必须定义 shiftRegister 的控制器引脚。
时钟引脚连接到 Arduino 引脚 2。
闩锁连接到 Arduino 引脚 3。
数据引脚连接到 Arduino 引脚 4。
字节 LED = 0; 它保持led的位置被打开或关闭。
在 void setup() 现在将 shiftRegister 的所有引脚设置为 OUTPUT
在 void loop() LEDs = 0 中表示所有 LED 均已关闭。
updateShiftRegisterR(); 该函数用于更新我们在下面定义的 shiftRegister。
首先,我们必须将锁存器引脚设置为低电平意味着没有更新。
调用之后,Arduino 函数 shiftOut()。
在时钟引脚从高电平变为低电平并且 LED 位存储在 shiftRegister 中后,将 LED 的一个字节一次一位地移出到串行数据引脚。
设置位的顺序 LSB FIRST(最低有效位)意味着我们要从正确的方向开始打开 LED。MSBFIRST(最高有效位)意味着我们要从左侧开始打开 LED。
现在我们有了一个 LED 打开的位置,因此将锁存引脚设置为高电平意味着更新输出。
等待半秒钟。for 循环从 0 计数到 7。
位集();它的 Arduino 功能可以在我太高的位置设置一些特定的 LED。
现在更新 ShiftRegister 并等待半秒。
这个过程在重复,一个一个的led被打开。
现在上传代码。
LED 开始从右向左打开。
有一种方法可以控制 LED 的亮度。
我们可以通过 Arduino PWM 引脚将 PWM 信号发送到移位寄存器 OE 引脚。
从移位寄存器引脚 13 上移除跳线并将 shiftRegister 引脚 13 连接到 Arduino PWM 引脚 5。
int clockPin = 13;
int latchPin = 12;
int dataPin = 10;
int outputEnablePin = 11;
byte leds = 0;
void setup()
{
pinMode(latchPin, OUTPUT);
pinMode(dataPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(outputEnablePin, OUTPUT);
}
void loop()
{
leds = 0B1111111111111111;
updateShiftRegister();
delay(500);
for (byte b = 255; b > 0; b--){
analogWrite(outputEnablePin, b);
delay(10);
}
}
void updateShiftRegister()
{
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, LSBFIRST, leds);
digitalWrite(latchPin, HIGH);
}
代码有点相同。
定义 OE 引脚连接到 Arduino 引脚 5。
在 void setup() 现在将 OE 引脚设置为 OUTPUT。
在 void loop() 中将所有 LED 设置为高电平或打开。
更新 shiftRegister 并等待半秒。
在 for 循环计数从 255 到 0
模拟写入()函数用于将 PWM 信号发送到 OE 以控制 LED 亮度。
上传代码现在您会看到 LED 亮度正在增加。
所有连接都与更改之前相同,只是我们使用了两个移位寄存器。
将电源连接连接到其他面包板。添加额外的 8 个 LED 和 220 欧姆的电阻器。现在附加一个 shiftRegister 并连接与第一个相同的电源连接。
接下来,将 shiftRegister 引脚 14 连接到引脚 9。
将 shiftRegister 引脚 13 连接到 13。
将 shiftRegister 引脚 12 连接到 12。
将 shiftRegister 引脚 11 连接到 11。
之后,将 Arduino 连接到 shiftRegister。
Arduino 引脚 2 连接到 shiftRegister 引脚 11。
Arduino 引脚 3 连接到 shiftRegister 引脚 12。
Arduino 引脚 4 连接到 shiftRegister 引脚 14。
Arduino 引脚 5 连接到 shiftRegister 引脚 13。
现在,通过 Arduino 将 5v 电压传送到面包板。
接下来将输出引脚连接到 LED
将您的 arduino 连接到计算机并上传代码。
现在享受效果。
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
全部0条评论
快来发表一下你的评论吧 !