//**************************************************************// // 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 // //**************************************************************** // Pino conectado ao ST_CP do 74HC595 int latchPin = 8; // Pino conectado ao SH_CP do 74HC595 int clockPin = 12; // Pino conectado ao DS do 74HC595 int dataPin = 11; void setup() { // configura pinos como saída pois são endereçados no loop() pinMode(latchPin, OUTPUT); } void loop() { // rotina de contagem for (int j = 0; j < 256; j++) { // aterre latchPin e mantenha por todo o tempo de transmissão digitalWrite(latchPin, 0); shiftOut(dataPin, clockPin, j); // retorna o latchPin para HIGH, para sinalizar // que não é preciso mais escutar a linha digitalWrite(latchPin, 1); delay(1000); } } void shiftOut(int myDataPin, int myClockPin, byte myDataOut) { // Esta função desloca 8 bits (bit mais significativo primeiro) // na subida do clock // O clock quando em LOW está pausado // função de configuração interna int i = 0; int pinState; pinMode(myClockPin, OUTPUT); pinMode(myDataPin, OUTPUT); // apaga tudo para preparar o registrador // para os deslocamentos digitalWrite(myDataPin, 0); digitalWrite(myClockPin, 0); // para cada bit no byte myDataOut // VEJA QUE a contagem é REGRESSIVA no nosso laço for // Quer dizer que %00000001 ou "1" vai atravessar o chip // e que o pino Q0 é o que vai acender. for (i=7; i>=0; i--) { digitalWrite(myClockPin, 0); //se o valor passado ao myDataOut e a máscara de bits resultar // verdadeiro então... isto é, se estamos em i=6 e nosso valor é // %11010100, o código compara-o com %01000000 // e segue a atribuir 1 a pinState. if ( myDataOut & (1<<i) ) { pinState= 1; } else { pinState= 0; } // Ajusta pino para HIGH ou LOW dependendo de pinState digitalWrite(myDataPin, pinState); // Registrador desloca os bits na subida do clock digitalWrite(myClockPin, 1); // Zera o pino de dados após deslocar, para prevenir vazamento digitalWrite(myDataPin, 0); } //pare o deslocamento digitalWrite(myClockPin, 0); }