0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何使用移位寄存器

454398 来源:网络整理 作者:网络整理 2019-12-02 16:54 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

今天,我将尝试教您一些有关移位寄存器的知识。这些是Arduino编程中相当重要的部分,基本上是因为它们扩展了您可以使用的输出数量,以换取3个控制引脚。您还可以将菊花链移位寄存器在一起以获取更多的输出。

这与以前的教程相比有很大的困难,我强烈建议您对以前的材料有个很好的了解。 (本文末尾的链接),以及了解我上次编写的二进制的基本知识。

什么是移位寄存器?

技术上是输出移位寄存器换句话说,串行接收数据并并行输出。实际上,这意味着我们可以快速向芯片发送一堆输出命令,告诉它激活,然后将输出发送到相关的引脚。无需遍历每个引脚,我们只需一次将所需的输出作为单个字节或更多信息发送到所有引脚。

如果可以帮助您理解,您可以考虑一下移位寄存器作为数字输出的“数组”,但是我们可以跳过常规的digitalWrite命令,而只需发送一系列位以将其打开或关闭即可。

它如何工作?

我们将使用的移位寄存器-Oomlout入门套件中包含的74HC595N-仅需要3个控制引脚。第一个是时钟-您无需担心太多,因为Arduino串行库对其进行了控制-但时钟基本上只是一个开/关电脉冲,用于设置数据信号的速度。

锁存器引脚用于告知移位寄存器何时应根据我们刚发送的位打开或关闭输出,即将它们锁存到位。

最后,数据引脚位于此处我们用位发送了实际的串行数据,以确定移位寄存器输出的开/关状态。

整个过程可以用4个步骤来描述:

设置移位寄存器上第一个输出引脚的数据引脚为高电平或低电平。

脉冲时钟以将数据“移位”到寄存器。

继续设置数据并向脉冲输出脉冲。时钟,直到为所有输出引脚设置了所需的状态为止。

对闩锁引脚进行脉冲以激活输出序列。

实现

您需要此产品的以下组件oject:

7HC595N移位寄存器芯片

8个LED和适当的电阻,或者您想要输出到任何东西的

通常的面包板,连接器和基本的Arduino

如果您有Oomlout入门套件,则可以从此处下载面包板布局。

以下是汇编视频:

电路板布局:

如何使用移位寄存器

和我的组装版本:

I已修改了Ooolmout提供的原始代码,但如果您想尝试使用该代码,则可以在此处完整下载。包括了代码的说明,因此,请从下面复制或粘贴整个内容,或使用pastebin读取代码的说明。

/* ---------------------------------------------------------

* | Shift Register Tutorial, based on |

* | Arduino Experimentation Kit CIRC-05 |

* | 。: 8 More LEDs :。 (74HC595 Shift Register) |

* ---------------------------------------------------------

* | Modified by James @ MakeUseOf.com |

* ---------------------------------------------------------

*/

//Pin Definitions

// 7HC595N has three pins

int data = 2; // where we send the bits to control outputs

int clock = 3; // keeps the data in sync

int latch = 4; // tells the shift register when to activate the output sequence

void setup()

{

// set the three control pins to output

pinMode(data, OUTPUT);

pinMode(clock, OUTPUT);

pinMode(latch, OUTPUT);

Serial.begin(9600); // so we can send debug messages to serial monitor

}

void loop(){

outputBytes(); // our basic output which writes 8-bits to show how a shift register works.

//outputIntegers(); // sends an integer value as data instead of bytes, effectively counting in binary.

}

void outputIntegers(){

for (int i=0;i《256;i++){

digitalWrite(latch, LOW);

Serial.println(i); // Debug, sending output to the serial monitor

shiftOut(data, clock, MSBFIRST, i);

digitalWrite(latch, HIGH);

delay(100);

}

}

void outputBytes(){

/* Bytes, or 8-bits, are represented by a B followed by 8 0 or 1s.

In this instance, consider this to be like an array that we‘ll use to control

the 8 LEDs. Here I’ve started the byte value as 00000001

*/

byte dataValues = B00000001; // change this to adjust the starting pattern

/* In the for loop, we begin by pulling the latch low,

using the shiftOut Arduino function to talk to the shift register,

sending it our byte of dataValues representing the state of the LEDs

then pull the latch high to lock those into place.

Finally, we shift the bits one place to the left, meaning the next iteration

will turn on the next LED in the series.

To see the exact binary value being sent, check the serial monitor.

*/

for (int i=0;i《8;i++){

digitalWrite(latch, LOW);

Serial.println(dataValues, BIN); // Debug, sending output to the serial monitor

shiftOut(data, clock, MSBFIRST, dataValues);

digitalWrite(latch, HIGH);

dataValues = dataValues 《《 1; // Shift the bits one place to the left - change to 》》 to adjust direction

delay(100);

}

}

位移位(OutputBytes函数)

在第一个循环示例– outputBytes()–代码使用8位序列(一个字节),然后在for循环的每次迭代中向左移。重要的是要注意,如果您进行的移位超出了可能,则只会丢失该位。

使用《《或》》加上要移位的位数来完成移位。/p》

查看以下示例,并确保您了解发生了什么:

byte val = B00011010

val = val 《《 3 // B11010000

val = val 《《 2 // B01000000, we lost those other bits!

val = val 》》 5 // B00000010

发送整数而不是(OutputIntegers函数)

数字到移位寄存器而不是字节,它将简单地将数字转换为二进制字节序列。在此函数中(取消注释并上载以查看效果),我们有一个for循环,其计数范围是0-255(可以用一个字节表示的最大整数),然后发送该循环。它基本上是二进制的,因此除非您的LED排成一排,否则该序列似乎有点随机。

例如,如果您阅读二进制的说明文章,就会知道数字44将表示为00101100,因此LED 3、5、6将在序列中的该点点亮。

菊花链超过一个移位寄存器

移位寄存器的显着之处在于,如果它们获得的信息多于8位(或者其注册表很大),它们将再次移出其他位。这意味着您可以将它们中的一系列连接在一起,推入一个较长的位链,然后将其分别分配到每个寄存器,而无需您进行额外的编码。

尽管我们不会在这里详细说明过程或原理图,如果您有多个移位寄存器,则可以从此处的Arduino官方网站尝试该项目。

该系列中的其他文章:

什么是Arduino?您可以使用它做什么?

什么是Arduino入门工具包?它包含什么?

您可以通过入门工具包购买更多更酷的组件

开始使用Arduino入门套件?安装驱动程序并设置电路板和端口

Fritzing,这是一个免费的电路图绘制工具

仔细查看Arduino应用程序和示例闪烁程序的结构

Arduino Xmas树灯项目(又是关于数组的学习)

什么是Binary?

到目前为止,我们将使用移位寄存器,我认为我们涵盖了很多。一如既往,我鼓励您使用和调整代码,并随时询问您在注释中可能遇到的任何问题,甚至共享指向基于出色移位寄存器的项目的链接。
责任编辑:wv

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 移位寄存器
    +关注

    关注

    4

    文章

    352

    浏览量

    23417
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    74AHC594:8位移位寄存器的详细解析与应用

    74AHC594:8位移位寄存器的详细解析与应用 在电子设计领域,移位寄存器是一种常见且重要的数字电路元件,它能够实现数据的串行输入、串行输出或并行输出。今天,我们就来深入了解一下SGMICRO公司
    的头像 发表于 03-26 09:10 444次阅读

    74AHC595Q:汽车级8位移位寄存器的深度解析

    74AHC595Q:汽车级8位移位寄存器的深度解析 在电子设计领域,移位寄存器是一种常见且关键的器件,它在数据传输和处理中发挥着重要作用。今天,我们要深入了解的是SGMICRO推出
    的头像 发表于 03-16 10:50 237次阅读

    74HC595 8位移位寄存器:设计与应用全解析

    74HC595 8位移位寄存器:设计与应用全解析 在电子工程师的工具箱中,移位寄存器是一个非常实用的组件。今天,我们就来深入了解一下SG Micro Corp的74HC595 8位串行输入/串行输出
    的头像 发表于 03-16 10:35 351次阅读

    74LV595A:8位移位寄存器的全方位解析

    74LV595A:8位移位寄存器的全方位解析 在电子设计领域,移位寄存器是一种常用的逻辑元件,能实现数据的串行输入和并行输出。今天我们要深入探讨SGMICRO的74LV595A,一款功能强大的8位
    的头像 发表于 03-16 10:35 262次阅读

    深入剖析74HCT595:8位移位寄存器的卓越之选

    深入剖析74HCT595:8位移位寄存器的卓越之选 作为电子工程师,在设计电路时,经常会遇到需要扩展IO口或者进行数据串行传输的情况。这时,一款性能出色的移位寄存器就显得尤为重要。今天,我们就来深入
    的头像 发表于 03-16 10:25 692次阅读

    74AHCT595F:8位移位寄存器的特性与应用解析

    74AHCT595F:8位移位寄存器的特性与应用解析 在电子设计领域,移位寄存器是一种常用的数字电路元件,它能够实现数据的串行输入、串行输出或并行输出。SGMICRO的74AHCT595F就是这样
    的头像 发表于 03-16 10:25 525次阅读

    74LV164:8位串行输入并行输出移位寄存器的深度剖析

    74LV164:8位串行输入并行输出移位寄存器的深度剖析 在电子设计领域,移位寄存器是一种常见且重要的数字电路元件,它能实现数据的串行 - 并行转换。今天,我们就来深入了解 SGMICRO 公司
    的头像 发表于 03-13 14:45 246次阅读

    74HC164:8位串行输入并行输出移位寄存器的详细解析

    74HC164:8位串行输入并行输出移位寄存器的详细解析 在电子设计领域,移位寄存器是一种常见且实用的器件,今天我们就来深入探讨SGMICRO的74HC164 8位串行输入并行输出移位寄存器。 文件
    的头像 发表于 03-13 14:05 499次阅读

    深入解析STPIC6D595:8位移位寄存器的卓越性能与应用

    深入解析STPIC6D595:8位移位寄存器的卓越性能与应用 在电子设计领域,对于需要相对适中负载功率的系统,如LED驱动等,一款合适的移位寄存器至关重要。今天,我们就来深入探讨STPIC6D595
    的头像 发表于 01-26 17:40 850次阅读

    STP08CP05:低电压、低电流8位移位寄存器的性能与设计解析

    STP08CP05:低电压、低电流8位移位寄存器的性能与设计解析 在LED面板显示领域,一款合适的移位寄存器能够显著提升系统的性能和可靠性。今天我们要详细探讨的是STP08CP05,一款专为LED
    的头像 发表于 01-26 17:30 888次阅读

    SN74HCT165 8位并行输入移位寄存器技术解析

    Texas Instruments SN74HCT165/SN74HCT165-Q1并联负载移位寄存器是一款并联或串联输入、串联输出8位移位寄存器。借助八个独立的直接数据 (A-H) 输入并行访问
    的头像 发表于 09-19 14:39 1640次阅读
    SN74HCT165 8位并行输入<b class='flag-5'>移位寄存器</b>技术解析

    ‌SN74HCT595 8位移位寄存器技术解析与应用指南

    Texas Instruments SN74HCT595/SN74HCT595-Q1 8位移位寄存器包含8位串进并出移位寄存器,向8位D类存储寄存器馈送信号。存储寄存器具有并行 3 状
    的头像 发表于 09-19 14:31 1203次阅读
    ‌SN74HCT595 8位<b class='flag-5'>移位寄存器</b>技术解析与应用指南

    TPIC6595 8位功率移位寄存器技术文档摘要

    该TPIC6595是一款单片、高压、大电流功率的8位移位寄存器,设计用于需要相对较高负载功率的系统。该器件在输出端包含一个内置电压钳位,用于电感瞬态保护。功率驱动应用包括继电器、螺线管和其他中电流
    的头像 发表于 09-09 11:10 1041次阅读
    TPIC6595 8位功率<b class='flag-5'>移位寄存器</b>技术文档摘要

    ‌TPIC6B595 8位功率移位寄存器技术文档总结

    TPIC6B595器件是一款单片、高压、中电流功率8位移位寄存器,设计用于需要相对高负载功率的系统。该器件在输出端包含一个内置电压钳位,用于电感瞬态保护。功率驱动应用包括继电器、螺线管和其他中电流
    的头像 发表于 09-09 10:16 1161次阅读
    ‌TPIC6B595 8位功率<b class='flag-5'>移位寄存器</b>技术文档总结

    Texas Instruments SN74LV8T594/SN74LV8T594-Q1移位寄存器特性/应用/框图

    Texas Instruments SN74LV8T594/SN74LV8T594-Q1 8通道移位寄存器包含一个8位串进并出移位寄存器移位寄存器的每个并行输出均通过存储寄存器馈送,
    的头像 发表于 08-03 10:56 1249次阅读
    Texas Instruments SN74LV8T594/SN74LV8T594-Q1<b class='flag-5'>移位寄存器</b>特性/应用/框图