Hej Danni,
Ok, start med 75HC595:
/OE (Output Enable) skal være LOW
/MR (Reset) skal være HIGH
SHCP (shift clock) og STCP (storage clock) skal være LOW, når du starter.
int SHCP = 13;
int STCP = 12;
int DS = 11;
void setup() {
// initialize the digital pin as an output.
pinMode(SHCP, OUTPUT);
pinMode(STCP, OUTPUT);
pinMode(DS, OUTPUT);
digitalWrite(SHCP, LOW); // start with SHCP low
digitalWrite(STCP, LOW); // start with SHCP low
}
Du ønsker at have 01000011 på udgangen Q7,Q6,Q5..Q0.
Skriv 01000011 i en variabel.
int temp = 0b01000011; // binary ... or ...
//int temp = 0x43; // hexadecimal .. or ..
//int temp = 67; // decimal
Du skal starte med Q7. Q7 er den venstre bit og er 0. Med:
du kan teste, hvis bit 7 er "1"
Det kode skrive bit 7 af temp på shift register:
if (temp & 0b10000000)
digitalWrite(DS, HIGH); // Q7 is set, so write a HIGH to the DS pin
else
digitalWrite(DS, LOW); // Q7 is NOT set, so write a LOW to the DS pin
digitalWrite(SHCP, HIGH); // Take the DS into the shift register
digitalWrite(SHCP, LOW);
Nu skal du gøre det med Q6, Q5, Q4 ...
Det er lettest, hvis du "shift" alle bits til venstre. (Q6 -> Q7, Q5 -> Q6 ..):
Nu kan du gentage det med Q7.
Gør det 8 gange for alle 8 bit:
int i;
for (i=0; i<8; i++) {
if (temp & 0b10000000)
digitalWrite(DS, HIGH); // Q7 is set, so write a HIGH to the DS pin
else
digitalWrite(DS, LOW); // Q7 is NOT set, so write a LOW to the DS pin
digitalWrite(SHCP, HIGH); // Take the DS into the shift register
digitalWrite(SHCP, LOW);
temp = temp << 1;
}
Nu skal du generere en puls for at kopiere den til udgangen:
digitalWrite(STCP, HIGH); // Take the date of the shift register to the 8 outputs
digitalWrite(STCP, LOW);
Du har 2 BCD 4511 og du ønsker at have nummeret 42.
Din shift register 74HC595 har 8 udgange. Q7 .. Q4 til BCD1 og Q3 .. Q0 til BCD2.
Med:
du har nummer 4 på Q7..Q4 og nummer 2 på Q3..Q0.
Her er hele koden (jeg har ikke prøvet det):
int SHCP = 13;
int STCP = 12;
int DS = 11;
void setup() {
// initialize the digital pin as an output.
pinMode(SHCP, OUTPUT);
pinMode(STCP, OUTPUT);
pinMode(DS, OUTPUT);
digitalWrite(SHCP, LOW); // start with SHCP low
digitalWrite(STCP, LOW); // start with SHCP low
}
// Write 2 4-bit BCD values to the 8-bit shift register.
void setBCD(int bcd1, int bcd2) {
int temp;
int i;
temp = bcd1 << 4 | bcd2;
for (i=0; i<8; i++) {
if (temp & 0b10000000)
digitalWrite(DS, HIGH); // Q7 is set, so write a HIGH to the DS pin
else
digitalWrite(DS, LOW); // Q7 is NOT set, so write a LOW to the DS pin
digitalWrite(SHCP, HIGH); // Take the DS into the shift register
digitalWrite(SHCP, LOW);
temp = temp << 1;
}
digitalWrite(STCP, HIGH); // Take the date of the shift register to the 8 outputs
digitalWrite(STCP, LOW);
}
void loop() {
setBCD(4,2); // Write a 42 to Dannis display
delay(1000); // wait for a second
}
gerd