原文地址:https://circuitdigest.com/microcontroller-projects/arduino-uno-shift-register-tutorial
如何在Arduino Uno中使用移位寄存器74HC595
经过**迪利普·拉贾(Dilip Raja)** 2015年8月5日0
在ARDUINO中,我们有20个I / O引脚,因此我们可以对20个UNO引脚进行编程以用作输入或输出。尽管ATMEGA328P控制器上的引脚比UNO上的引脚多,这是因为在设计开发板时,某些引脚是默认的。
现在,对于某些应用程序,我们需要30多个引脚,也就是说,如果我们要设计5x5x5 LED CUBE,那么为此,我们需要5x5 + 5 = 30pins。对于这种情况,我们使用串行到并行转换器芯片或移位寄存器。移位寄存器芯片以串行方式从UNO板上获取数据,并以8位并行配置提供输出。
所需组件
硬件: Arduino uno板,连接引脚,220Ω电阻,LED(八个),74HC595 IC,面包板。
**Sofware:**每晚的Arduino
电路图和工作说明
在这里,我们将通过单个通道将八位数据发送到移位寄存器。移位寄存器串行获取数据并将该数据存储在其存储器中。控制器发送完数据后,我们将发送一个命令到移位寄存器以在输出处显示数据,通过此命令,移位寄存器可以并行输出数据。
该输出由连接在输出处的八个LED表示。
对于移位寄存器连接的Arduino UNO我们需要做两件事情:
pinMode();
shiftOut(dataPin, clockPin, data);
首先,我们需要将UNO的任意三个引脚设置为输出。然后,我们需要将数字引脚,时钟引脚和闩锁引脚连接到这三个输出引脚。之后,我们需要告诉UNO哪个芯片引脚连接到UNO板引脚。这可以通过简单地在命令“ shiftOut(dataPin, clockPin, data);
”中编写来完成。此处的数据可以是二进制,十进制或十六进制。代替“数据”,写入需要发送的八位信息。
发送的数据按以下方式完成:
**禁用锁存器(Disable latch),这告诉芯片暂时不显示输出。
我们将连续八次发送带有时钟的数据,因此时钟高,数据低,时钟低,依此类推。
使能锁存器,这告诉芯片显示八位数据。
在下面给出的C代码中逐步说明了ARDUINO与SHIFT REGISTER的工作:
代码
// The setup function runs once when you press reset or power the board
volatile int i = 0;
void setup()
{
pinMode(2, OUTPUT); // sets the pin2 as output
pinMode(1, OUTPUT); // sets the pin1 as output
pinMode(0, OUTPUT); // sets the pin0 as output
}
void loop()
{
for (int i = 0; i < 255; i++) //if binary count is less than 255
{
digitalWrite(2, HIGH);
shiftOut(0, 1, 2, i); //send eight bit data serially for each time there is a increment
digitalWrite(2, LOW);
delay(500); //wait for half a second
}
}