移位寄存器的工作原理,八位循环移位寄存器工作原理

首页 > 经验 > 作者:YD1662022-11-06 07:23:36

结果是 LED 显示从 0 到 255 的二进制计数。

您可以试验代码并操纵一些值并观察对 LED 的影响。尝试将shiftOut 语句中的MSBFIRST参数更改为LSBFIRST,看看会发生什么。

这是理解基本移位寄存器操作的简单方法。

驱动 7 段显示器

74HC575 的另一个用途是驱动 7 段 LED 显示屏。您可以使用它来显示连接到一台显示器的数量,或者您可以级联多个 74HC595 来驱动多台显示器。

7 段 LED 显示屏

典型的 7 段 LED 显示布局如下所示:

移位寄存器的工作原理,八位循环移位寄存器工作原理(17)

请注意,“7 段”显示器中实际上有八个 LED 元件,第八个 LED 用作小数点。在某些显示中,这可以用冒号代替。

LED 显示屏有两种配置:

两种显示类型都使用相同的引脚排列,因此了解您的类型非常重要。一个很好的判断方法(除了参考显示器部件号)是在“二极管测试”功能上使用万用表。当以正确的极性连接时,它可用于点亮 LED 元件。

共阴极显示器更常见,是我们将用于实验的类型。

74HC595 7 段显示器连接

由于共阴极 7 段 LED 显示屏实际上只是将八个 LED 连接到一个公共阴极(负极)端子,因此与我们在第一个实验中使用的八个 LED 没有什么不同。所以我们可以使用完全相同的电路来接线。

移位寄存器的工作原理,八位循环移位寄存器工作原理(18)

使用连接图中的图表将显示引脚连接到降压电阻。COM 引脚(公共阴极)连接到 Arduino 的地。请注意,显示器将有两个 COM 引脚,您只需连接一个。

完成所有连接后,您可以通过运行上一个代码来测试它,该代码应该测试所有 LED 段,包括小数点。

但要真正显示连贯的东西,我们需要不同的代码。

74HC595 7段显示代码

这是我们将用来测试我们的 7 段显示器的代码。

/* 74HC595 Shift Register with 7-segment LED display 74hc595-7segdisplay.ino Count in hex from 0-F and display on 7-segment Common Cathode LED display DroneBot Workshop 2020 https://dronebotworkshop.com */ // Define Connections to 74HC595 // ST_CP pin 12 const int latchPin = 10; // SH_CP pin 11 const int clockPin = 11; // DS pin 14 const int dataPin = 12; // Patterns for characters 0,1,2,3,4,5,6,7,8,9,A,b,C,d,E,F int datArray[16] = {B11111100, B01100000, B11011010, B11110010, B01100110, B10110110, B10111110, B11100000, B11111110, B11110110, B11101110, B00111110, B10011100, B01111010, B10011110, B10001110}; void setup () { // Setup pins as Outputs pinMode(latchPin, OUTPUT); pinMode(clockPin, OUTPUT); pinMode(dataPin, OUTPUT); } void loop() { // Count from 0 to 15 for (int num = 0; num < 16; num ) { // ST_CP LOW to keep LEDs from changing while reading serial data digitalWrite(latchPin, LOW); // Shift out the bits shiftOut(dataPin, clockPin, MSBFIRST, datArray[num]); // ST_CP HIGH change LEDs digitalWrite(latchPin, HIGH); delay(1000); } }

此代码与前一个代码有许多相似之处,当您认为它在同一件事上做得很好时,这并不奇怪。

我们通过定义与 74HC595 的连接重新开始。

然后我们创建一个包含 16 个元素的数组,每个元素代表要在 7 段 LED 上显示的字符模式。

这些元素以二进制形式编写,因此很容易理解它们的工作原理。在二进制字节中,每一位代表一个 LED 段。从 MSB 到 LSB(从左到右),它们代表显示屏中的以下段:

a – b – c – d – e – f – g – DP

当该位设置为“1”时,LED 各段点亮,“0”表示熄灭。

数组是有序的,所以元素 0 是“0”的字符。元素1是“1”等的字符。它是十六进制的,所以元素15是“F”。

查看数组元素,您将看到排列。

再次在设置中,我们将连接设置为输出,然后进入循环。

我们再次使用计数器,只是这次 介于 0 和 15 之间。我们将在 LED 显示屏上以十六进制格式显示这些值。

我们一次遍历数组一个元素,使用shiftOut将数组中的数据发送到移位寄存器。

移位寄存器的工作原理,八位循环移位寄存器工作原理(19)

加载代码并观察显示。如果一切都正确连接,您会看到它从 0 到 F 计数,然后重复。

74HC165 的额外输入端口

现在我们已经了解了如何使用移位寄存器添加输出端口,现在是时候做相反的事情并添加一些输入了。对于这项工作,我们将使用 74HC165。

我们将使用 74HC165 移位寄存器和八个轻触式按钮开关。移位寄存器将从开关中获取 8 个输入,并将它们作为串行数据发送到 Arduino。

Arduino shiftIn() 函数

Arduino 再次具有用于接收串行数据的专用功能。

所述SHIFTIN()函数中的一个字节在一个时间移位串行数据。可以设置为先取 MSB 或 LSB。它通常与 74HC165 或CD4021BE等移位寄存器一起使用。

与其表亲shiftOut函数一样,shiftIn函数也提供时钟信号来同步数据传输。

Arduino & 74HC165 连接

74HC165 的输入需要拉低以防止错误读数,因此除了我们的八个按钮开关之外,我们还需要八个下拉电阻。我使用了 10k 电阻,但从 4.7k 到 27k 的任何值都可以正常工作。

移位寄存器的工作原理,八位循环移位寄存器工作原理(20)

上一页12345下一页

栏目热文

文档排行

本站推荐

Copyright © 2018 - 2021 www.yd166.com., All Rights Reserved.