Hide minor edits - Show changes to markup
// Name : shiftOutCode, Hello World // // Author : Carlyn Maw,Tom Igoe, David A. Mellis // // Date : 25 Oct, 2006 // // Version : 1.0 //
// Name : shiftOutCode, Hello World // Author : Carlyn Maw,Tom Igoe, David A. Mellis // Date : 25 Oct, 2006 // Modified: 23 Mar 2010 // Version : 2.0
// : to count from 0 to 255 //
// : to count from 0 to 255
//set pins to output because they are addressed in the main loop
//set pins to output so you can control the shift register
//count up routine
// count from 0 to 255 and display the number
// on the LEDs
//ground latchPin and hold low for as long as you are transmitting
// take the latchPin low so
// the LEDs don't change while you're sending in bits:
shiftOut(dataPin, clockPin, MSBFIRST, numberToDisplay);
//return the latch pin high to signal chip that it
//no longer needs to listen for information
// shift out the bits:
shiftOut(dataPin, clockPin, MSBFIRST, numberToDisplay);
//take the latch pin high so the LEDs will light up:
// pause before next value:
for (int j = 0; j < 256; j++) {
for (int numberToDisplay = 0; numberToDisplay < 256; numberToDisplay++) {
shiftOut(dataPin, clockPin, MSBFIRST, j);
shiftOut(dataPin, clockPin, MSBFIRST, numberToDisplay);
delay(1000);
delay(500);
@]
@]
// Author : Carlyn Maw,Tom Igoe //
// Author : Carlyn Maw,Tom Igoe, David A. Mellis //
pinMode(clockPin, OUTPUT); pinMode(dataPin, OUTPUT);
digitalWrite(latchPin, 0);
shiftOut(dataPin, clockPin, j);
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST, j);
digitalWrite(latchPin, 1);
digitalWrite(latchPin, HIGH);
void shiftOut(int myDataPin, int myClockPin, byte myDataOut) {
// This shifts 8 bits out MSB first, //on the rising edge of the clock, //clock idles low
//internal function setup int i=0; int pinState; pinMode(myClockPin, OUTPUT); pinMode(myDataPin, OUTPUT);
//clear everything out just in case to //prepare shift register for bit shifting digitalWrite(myDataPin, 0); digitalWrite(myClockPin, 0);
//for each bit in the byte myDataOut…
//NOTICE THAT WE ARE COUNTING DOWN in our for loop
//This means that %00000001 or "1" will go through such
//that it will be pin Q0 that lights.
for (i=7; i>=0; i--) {
digitalWrite(myClockPin, 0);
//if the value passed to myDataOut and a bitmask result
// true then... so if we are at i=6 and our value is
// %11010100 it would the code compares it to %01000000
// and proceeds to set pinState to 1.
if ( myDataOut & (1<<i) ) {
pinState= 1;
}
else {
pinState= 0;
}
//Sets the pin to HIGH or LOW depending on pinState
digitalWrite(myDataPin, pinState);
//register shifts bits on upstroke of clock pin
digitalWrite(myClockPin, 1);
//zero the data pin after shift to prevent bleed through
digitalWrite(myDataPin, 0);
}
//stop shifting digitalWrite(myClockPin, 0);
}
..//internal function setup
//internal function setup
. //clear everything out just in case to . //prepare shift register for bit shifting
//clear everything out just in case to //prepare shift register for bit shifting
@]
@]
[@
@]
//**************************************************************// // Name : shiftOutCode, Hello World // // Author : Carlyn Maw,Tom Igoe // // Date : 25 Oct, 2006 // // Version : 1.0 // // Notes : Code for using a 74HC595 Shift Register // // : to count from 0 to 255 // //****************************************************************
//Pin connected to ST_CP of 74HC595 int latchPin = 8; //Pin connected to SH_CP of 74HC595 int clockPin = 12; ////Pin connected to DS of 74HC595 int dataPin = 11;
void setup() {
//set pins to output because they are addressed in the main loop pinMode(latchPin, OUTPUT);
}
void loop() {
//count up routine
for (int j = 0; j < 256; j++) {
//ground latchPin and hold low for as long as you are transmitting
digitalWrite(latchPin, 0);
shiftOut(dataPin, clockPin, j);
//return the latch pin high to signal chip that it
//no longer needs to listen for information
digitalWrite(latchPin, 1);
delay(1000);
}
}
void shiftOut(int myDataPin, int myClockPin, byte myDataOut) {
// This shifts 8 bits out MSB first, //on the rising edge of the clock, //clock idles low
..//internal function setup
int i=0; int pinState; pinMode(myClockPin, OUTPUT); pinMode(myDataPin, OUTPUT);
. //clear everything out just in case to . //prepare shift register for bit shifting
digitalWrite(myDataPin, 0); digitalWrite(myClockPin, 0);
//for each bit in the byte myDataOut…
//NOTICE THAT WE ARE COUNTING DOWN in our for loop
//This means that %00000001 or "1" will go through such
//that it will be pin Q0 that lights.
for (i=7; i>=0; i--) {
digitalWrite(myClockPin, 0);
//if the value passed to myDataOut and a bitmask result
// true then... so if we are at i=6 and our value is
// %11010100 it would the code compares it to %01000000
// and proceeds to set pinState to 1.
if ( myDataOut & (1<<i) ) {
pinState= 1;
}
else {
pinState= 0;
}
//Sets the pin to HIGH or LOW depending on pinState
digitalWrite(myDataPin, pinState);
//register shifts bits on upstroke of clock pin
digitalWrite(myClockPin, 1);
//zero the data pin after shift to prevent bleed through
digitalWrite(myDataPin, 0);
}
//stop shifting digitalWrite(myClockPin, 0);
}