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

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

    关注

    3

    文章

    258

    浏览量

    22273
收藏 人收藏

    评论

    相关推荐

    移位寄存器的工作原理和类型

    移位寄存器是计算机中常用的一种寄存器类型,它能够按位进行数据的左移或右移操作。作为数字电路中的基本元件,移位寄存器由多个触发构成,每个触发
    的头像 发表于 08-02 18:11 2930次阅读
    <b class='flag-5'>移位寄存器</b>的工作原理和类型

    移位寄存器的工作原理、类型及应用

    移位寄存器是一种电子设备,用于存储和操作数据。它由一系列存储单元组成,每个存储单元可以存储一位二进制数字。移位寄存器的主要功能是将数据从一个存储单元移动到另一个存储单元,从而实现数据的存储和传输
    的头像 发表于 07-12 10:22 1954次阅读

    移位寄存器中使用的储存单元是什么

    移位寄存器是一种常见的数字电路组件,用于存储和传输数字信号。在移位寄存器中,存储单元是其核心组成部分,负责存储数字信号的每一位。本文将介绍移位寄存器中使用的存储单元。 移位寄存器概述
    的头像 发表于 07-12 10:21 436次阅读

    移位寄存器中Dsr有什么用

    移位寄存器(Shift Register)是一种数字电路,用于存储和传输数字信号。在数字电子学中,它广泛应用于数据存储、信号处理和时序控制等领域。DSR(Data Shift Register
    的头像 发表于 07-12 10:15 609次阅读

    移位寄存器右移是怎么移位

    移位寄存器是一种在数字电路和计算机科学中广泛使用的存储设备,它可以用来存储和传输数据。在移位寄存器中,数据可以通过移位操作来实现数据的传输和处理。移位寄存器
    的头像 发表于 07-12 10:14 1442次阅读

    PLC移位寄存器指令的工作过程

    在工业自动化领域,可编程序控制(PLC)的应用日益广泛。作为工业控制的核心设备,PLC不仅具备强大的数据处理能力,还拥有丰富的指令系统,以满足各种复杂的控制需求。其中,移位寄存器指令是PLC
    的头像 发表于 06-15 17:37 1767次阅读

    8位移位寄存器工作原理是什么?

    在数字化浪潮席卷全球的今天,数字电子系统已成为我们生活中不可或缺的一部分。而在这些系统中,有一个看似微小但至关重要的组件——8位移位寄存器,它如同一个周密的齿轮,在数据的传输与处理中发挥着至关重要
    的头像 发表于 06-04 16:20 1338次阅读

    SN74HCS16507-Q1移位寄存器数据表

    电子发烧友网站提供《SN74HCS16507-Q1移位寄存器数据表.pdf》资料免费下载
    发表于 06-04 11:04 0次下载
    SN74HCS16507-Q1<b class='flag-5'>移位寄存器</b>数据表

    移位寄存器的工作原理与作用

    在数字电路和计算机系统中,移位寄存器(Shift Register)是一个至关重要的元件。它不仅能够存储数据,还能在时钟信号的控制下,使数据按照一定的规律进行移位操作。这种独特的功能使移位寄存器在数
    的头像 发表于 05-30 17:17 3309次阅读

    双向移位寄存器的工作原理、特点及应用

    双向移位寄存器,作为一种特殊的数字电路元件,在数字信号处理和计算机体系结构中扮演着重要的角色。其独特之处在于能够根据控制信号实现数据的双向移位,即既可以向左移位,也可以向右移位。这种灵
    的头像 发表于 05-24 16:52 2446次阅读

    移位寄存器的功能是什么 移位寄存器的工作原理

    移位寄存器(Shift Register)是一种在数字电路中经常使用的重要元件,其功能是接受和存储数据,并以有序的方式将数据位进行移位操作。移位寄存器可以用来完成数据的平移、移位、串行
    的头像 发表于 02-03 16:43 6278次阅读

    线性反馈移位寄存器输出序列怎么算

    线性反馈移位寄存器(Linear Feedback Shift Register, LFSR)是一种重要的序列发生,广泛应用于密码学、通信和数值计算领域。在本文中,我们将详细介绍线性反馈移位寄存器
    的头像 发表于 02-03 11:09 2499次阅读

    移位寄存器可降低LED设计的尺寸和成本

    在使用 LED 的设计中,移位寄存器非常有用。例如,如果系统包括七段显示、单个指示或形成网格或面板的 LED 阵列,则可以使用标准 8 位移位寄存器来允许低引脚数微控制
    发表于 01-30 15:14 643次阅读
    <b class='flag-5'>移位寄存器</b>可降低LED设计的尺寸和成本

    移位寄存器的工作原理 移位寄存器左移和右移怎么算

    移位寄存器是一种用于在数字电路中实现数据移位操作的基本电路元件。它由多个触发以及相关控制电路组成,具有存储、接受和移动数据的功能。移位寄存器可以分为两种类型:串行
    的头像 发表于 01-18 10:52 8551次阅读

    labview移位寄存器如何清零

    LabVIEW中的移位寄存器(Shift Register)是一种用于存储和移动数据的功能性块。它类似于传统计算机中的寄存器,可以用于在循环中保留变量的状态。但与传统寄存器不同的是,移位寄存器
    的头像 发表于 01-05 13:49 3229次阅读