shiftOut()

描述

以 byte 为单位将资料送出,一次一个 bit。可以从最高或者最低有效位元开始送出资料;每一个 bit 会被输出到一个资料 pin 脚上,再经过时脉 pin 脚上的高 / 低电位变化边缘让接收端判读该 bit 是否有效。

注意:如果你使用的装置是属于正缘触发的类型,你需要确定时脉 pin 脚在呼叫 shiftOut() 之前是处于低电位的状态,例:可以呼叫 digitalWrite(clockPin, LOW) 将 pin 脚设定为低电位

这个函式是以软体模拟方式实作的,可以参考 SPI 函式库,它提供了一个高效的硬体实作方式,但只能作用在某些固定的 pin 脚上。

语法


shiftOut(dataPin, clockPin, bitOrder, value)

参数

dataPin: 要输出 bit 的 pin 脚 (int)
clockPin: 要输出时脉的 pin 脚 (int)

bitOrder: 送出 bit 的顺序,不是 MSBFIRST 就是 LSBFIRST (从最高或最低有效位元开始送出)

value: 要送出的资料 (byte)

回传

无回传值

注意

一定要先以 pinMode() 去设定 dataPin 以及 clockPin 这两个脚位。

shiftOut 一次只能输出一个 byte,所以要输出数值大于 255 的资料时必须要分作两次进行。

// 把资料从最高有效位元开始送出
int data = 500;
// 先送出资料的高位 byte (bit 8 ~ 15)
shiftOut(dataPin, clock, MSBFIRST, (data >> 8));  
// 再送出资料的低位 byte (bit 0 ~ 7)
shiftOut(dataPin, clock, MSBFIRST, data);

// 把资料换成从最低有效位元开始送出
data = 500;
// 先送出资料的低位 byte (bit 0 ~ 7)
shiftOut(dataPin, clock, LSBFIRST, data);  
// 再送出资料的高位 byte (bit 8 ~ 15)
shiftOut(dataPin, clock, LSBFIRST, (data >> 8)); 

范例

有关 74HC595 位移暂存器的资料可以参考 Arduino 教学手册

//**************************************************************//
//  Name    : shiftOut 程式码, Hello World                      //
//  Author  : Carlyn Maw,Tom Igoe                               //
//  Date    : 25 Oct, 2006                                      //
//  Version : 1.0                                               //
//  Notes   : 使用 74HC595 来计数 0 到 255                      //
//****************************************************************

// pin 脚接到 74HC595 上的 ST_CP 
int latchPin = 8;
// pin 脚接到 74HC595 上的 SH_CP 
int clockPin = 12;
//// pin 脚接到 74HC595 上的 DS 
int dataPin = 11;

void setup() {
  // 将 latchPin,clockPin,dataPin 设定为输出
  pinMode(latchPin, OUTPUT);
  pinMode(clockPin, OUTPUT);
  pinMode(dataPin, OUTPUT);
}

void loop() {
  // 从 0 计数到 255
  for (int j = 0; j < 256; j++) {
    // 送资料前要先把 latchPin 设定成低电位
    digitalWrite(latchPin, LOW);
    // 使用 shiftOut() 送出资料
    shiftOut(dataPin, clockPin, LSBFIRST, j);   
    // 送完资料后要把 latchPin 设定回成高电位
    digitalWrite(latchPin, HIGH);
    // 隔 1 秒后换下一个数字
    delay(1000);
  }
} 

See also

shiftIn()
SPI


语法参考主页面

本页由热血青年 LBU 译自英文版。

The text of the 86Duino reference is a modification of the Arduino reference, and is licensed under a Creative Commons Attribution-ShareAlike 3.0 License. Code samples in the reference are released into the public domain.