Arduino 中的 shiftIn() 和 shiftOut()
shiftIn()和shiftOut()Arduino中的命令,非常松散地说,是SPI的软件实现。当然,SPI要快得多,但SPI只能在Arduino的某些特定引脚上工作。shiftIn()并且shiftOut()可以使用Arduino的任意两个GPIO(不是某些特定的引脚,如SPI)。
二者shiftIn()并shiftOut()需要两个数字引脚,一个dataPin和一个clockPin.ThedataPin将在移位或在一个时间移出数据的一个字节(8个比特),1比特。该clockPin同步数据传输。它通常保持低电平,并且对于每个位传输,它变为高电平,然后返回低电平。上升沿(从低到高)是位传输发生的时间。
语法
shiftOut的语法是-
shiftOut(dataPin, clockPin, bitOrder, value)
其中dataPin和clockPin表示用于移位操作的两个引脚。bitOrder可以是MSBFIRST或LSBFIRST,指示从哪里开始传输。该值是需要移出的字节(8位)数据。
同样,shiftIn的语法是-
byte incoming = shiftIn(dataPin, clockPin, bitOrder)
在这里,我们正在阅读,而不是发送。因此,它只接受3个参数,并输出一个字节。
请注意,必须将dataPin定义为OUTPUTforshiftOut()和INPUTforshiftIn()。在这两种情况下,clockPin都必须定义为OUTPUT。与由上升沿提供时钟的设备连接时,请确保digitalWrite(clockPin,LOW)在调用之前时钟引脚为低电平()shiftOut()。
应用
如上所述,shiftIn()和shiftOut()像SPI的软件实现。它们有助于减少用于数据传输的引脚数量。不是通过8条线并行发送8位,而是通过一条线一个一个地串行发送位,操作由时钟线同步。
一种流行的应用是与74HC595移位电阻的接口,用于串行到并行转换。一个很好的例子可以在这里找到。