hc595

***********************************************************************************

  • GND (pin 8) to ground,

  • Vcc (pin 16) to 5V

  • OE (pin 13) to ground

  • MR (pin 10) to 5Vgb

DS (pin 14) to Ardunio DigitalPin 11 (blue wire)

SH_CP (pin 11) to to Ardunio DigitalPin 12 (yellow wire)

ST_CP (pin 12) to Ardunio DigitalPin 8 (green wire)

Casella di testo

//**************************************************************//

// Name : shiftOutCode, Dual Binary Counters //

// 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() {

//Start Serial for debuging purposes

Serial.begin(9600);

//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);

//count up on GREEN LEDs

shiftOut(dataPin, clockPin, j);

//count down on RED LEDs

shiftOut(dataPin, clockPin, 255-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);

}

Casella di testo

//**************************************************************//

// Name : shiftOutCode, Dual Binary Counters //

// 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 //

//**************************************************************//

int j=1;

//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;

int a=100;

void setup() {

//Start Serial for debuging purposes

Serial.begin(9600);

//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 < 6; j++) {

//ground latchPin and hold low for as long as you are transmitting

digitalWrite(latchPin, 0);

//count up on GREEN LEDs

shiftOut(dataPin, clockPin, 0b1);

//count down on RED LEDs

//shiftOut(dataPin, clockPin, 255-j);

//return the latch pin high to signal chip that it

//no longer needs to listen for information

digitalWrite(latchPin, 1);

delay(a);

digitalWrite(latchPin, 0);

shiftOut(dataPin, clockPin, 0b1);

digitalWrite(latchPin, 1);

delay(a);

digitalWrite(latchPin, 0);

shiftOut(dataPin, clockPin, 0b10);

digitalWrite(latchPin, 1);

delay(a);

digitalWrite(latchPin, 0);

shiftOut(dataPin, clockPin, 0b100);

digitalWrite(latchPin, 1);

delay(a);

digitalWrite(latchPin, 0);

shiftOut(dataPin, clockPin, 0b1000);

digitalWrite(latchPin, 1);

delay(a);

digitalWrite(latchPin, 0);

shiftOut(dataPin, clockPin, 0b10000);

digitalWrite(latchPin, 1);

delay(a);

digitalWrite(latchPin, 0);

shiftOut(dataPin, clockPin, 0b100000);

digitalWrite(latchPin, 1);

delay(a);

digitalWrite(latchPin, 0);

shiftOut(dataPin, clockPin, 0b1000000);

digitalWrite(latchPin, 1);

delay(a);

digitalWrite(latchPin, 0);

shiftOut(dataPin, clockPin, 0b10000000);

digitalWrite(latchPin, 1);

delay(a);

digitalWrite(latchPin, 0);

shiftOut(dataPin, clockPin, 0b100000000);

digitalWrite(latchPin, 1);

delay(a);

//}

}

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);

}