Stap 4:
4 - multiplexed Via shift register van Arduino / Atmega 328 / drukknop teller
Drukknoppen verhogen en verlagen van een teller tussen nul en acht
Code
7-segment LED teller, multiplexing met behulp van 74HC595 8-bit shift register, increment tegen nul acht tot nul via drukknop schakelaars
Code gemangeld samen uit deze bronnen - Bedankt jongens
http://www.sweeting.org/Mark/blog/2011/11/27/Arduino-74hc595-shift-register-and-a-7-segment-LED-display
http://thecustomgeek.com/2011/06/29/multiplexing-for-a-7-year-old/
Const int latchPin = 5; Pin verbonden met Pin 12 van 74HC595 (Latch)
Const int dataPin = 6; Pin verbonden met Pin 14 van 74HC595 (gegevens)
Const int clockPin = 7; PIN aangesloten op Pin 11 van 74HC595 (klok)
int upPin = 12; drukknop verbonden met pin 12
int downPin = 13; drukknop verbonden met pin 12
int currUpState = 1; initialiseren van de currUpState zo hoog
int currDownState = 1; initialiseren van de currDownState zo hoog
int prevUpState = 0;
int prevDownState = 0;
int counter = 0; initialiseren van de teller als nul
Const byte nummers [10] = / / beschrijven elk cijfer in termen van display segmenten 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
{
B11111100,
B01100000,
B11011010,
B11110010,
B01100110,
B10110110,
B10111110,
B11100000,
B11111110,
B11100110,
};
VOID Setup
{
pinMode (latchPin, OUTPUT); SR pennen voor uitvoer instellen
pinMode (clockPin, OUTPUT);
pinMode (dataPin, OUTPUT);
pinMode (upPin, INPUT); sets pin 12 als drukknop INPUT
pinMode (downPin, INPUT); sets pin 13 als drukknop INPUT
}
void loop
{
currUpState = digitalRead(upPin);
Als (prevUpState! = currUpState) / / veranderd de status van
{/ / HOOG naar laag of vice versa
prevUpState = currUpState;
Als (currUpState == HIGH) / / als de knop is ingedrukt
teller ++; de teller verhogen met één
delay(1);
}
if(Counter > 8)
teller-= 1;
show(numbers[Counter]); het huidige cijfer weergeven
currDownState = digitalRead(downPin);
Als (prevDownState! = currDownState) / / veranderd de status van
{/ / HOOG naar laag of vice versa
prevDownState = currDownState;
Als (currDownState == HIGH) / / als de knop is ingedrukt
teller-= 1; Decrement de teller door een
delay(1);
}
if(counter < 0)
teller ++;
show(numbers[Counter]); het huidige cijfer weergeven
}
VOID Toon (byte nummer)
{
Gebruik van een lus en een bitsgewijze AND om te verplaatsen over elke bit die maakt
de zeven segment display (van links naar rechts, A = > G), en controleer
om te zien als het op of niet worden moet
for (int j = 0; j < = 7; j ++)
{
byte toWrite = nummer & (B10000000 >> j);
if(!toWrite) {}
blijven;
} / / Als alle bits 0 dan geen punt die het schrijven naar het register van de verschuiving, zo uit te breken en gaan naar het volgende segment.
shiftIt(toWrite); Het anders verschuiving in het register
}
}
VOID shiftIt (bytegegevens)
{
digitalWrite (latchPin, laag); LatchPin laag terwijl de kloksnelheid van deze 8 bits in het register instellen
voor (int k = 0; k < = 7; k ++)
{
digitalWrite (clockPin, laag); clockPin lage voorafgaand aan het verzenden van een beetje
Als (gegevens & (1 << k))
{
digitalWrite (dataPin, hoge); inschakelen ""
}
anders
{
digitalWrite (dataPin, laag); uitschakelen ""
}
digitalWrite (clockPin, hoge); en de bits klok
}
digitalWrite (clockPin, laag); stoppen met het verschuiven van gegevens
digitalWrite (latchPin, hoge); latchPin ingesteld op hoog om te vergrendelen en gegevens verzenden
}