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.