Olika metoder för att köra 7 Segment LED visar med Arduino (4 / 5 steg)
Steg 4:
4 - multiplexed Via skiftregister från Arduino / Atmega 328 / tryckknapp counter
Knapparna öka och minska en räknare mellan noll och åtta
Koden
7-segment LED counter, multiplexering med 74HC595 8-bitars SKIFT register, steg counter noll till åtta noll via tryckknapp växlar
Koden sargade tillsammans från dessa källor - tack grabbar
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 ansluten till Pin 12 i 74HC595 (spärr)
CONST int dataPin = 6; PIN ansluten till Pin 14 i 74HC595 (Data)
CONST int clockPin = 7. PIN ansluten till Pin 11 i 74HC595 (klocka)
int Uppi = 12. tryckknapp ansluten till stift 12
int downPin = 13. tryckknapp ansluten till stift 12
int currUpState = 1; initiera currUpState så hög
int currDownState = 1; initiera currDownState så hög
int prevUpState = 0;
int prevDownState = 0;
int counter = 0; initialisera counter som noll
CONST byte nummer [10] = / / beskriva varje siffra i form av skärm segment 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
{
B11111100,
B01100000,
B11011010,
B11110010,
B01100110,
B10110110,
B10111110,
B11100000,
B11111110,
B11100110,
};
void setup()
{
pinMode (latchPin, produktionen); ställa in SR pins till utgång
pinMode (clockPin, produktionen);
pinMode (dataPin, produktionen);
pinMode (Uppi, indata); uppsättningar pin 12 som tryckknapp INPUT
pinMode (downPin, ingång); uppsättningar stift 13 som tryckknapp INPUT
}
void loop()
{
currUpState = digitalRead(upPin);
om (prevUpState! = currUpState) / / har staten ändrats från
{/ / HÖG till låg eller tvärtom
prevUpState = currUpState;
om (currUpState == hög) / / om knappen trycktes
räknaren ++; ökas räknaren med ett
Delay(1);
}
IF(Counter > 8)
räknaren-= 1;
Show(Numbers[Counter]); Visa den aktuella siffran
currDownState = digitalRead(downPin);
om (prevDownState! = currDownState) / / har staten ändrats från
{/ / HÖG till låg eller tvärtom
prevDownState = currDownState;
om (currDownState == hög) / / om knappen trycktes
räknaren-= 1; dekrement räknaren av en
Delay(1);
}
IF(Counter < 0)
räknaren ++;
Show(Numbers[Counter]); Visa den aktuella siffran
}
void Visa (byte nummer)
{
Använda en slinga och en bitvis AND för att flytta över varje bit som gör upp
de sju segment display (från vänster till höger, A = > G), och kolla
om det ska vara på eller inte
för (int j = 0; j < = 7; j ++)
{
byte toWrite = antal & (B10000000 >> j);
IF(!toWrite) {
fortsätta;
} / / Om alla bitar är 0 då ingen mening med att skriva det till skiftregister, så bryter ut och gå vidare till nästa segment.
shiftIt(toWrite); Annars skifta det in i registret
}
}
void shiftIt (byte data)
{
digitalWrite (latchPin, låg); Ange latchPin låg vid klockning dessa 8 bitar till registret
för (int k = 0; k < = 7; k ++)
{
digitalWrite (clockPin, låg); clockPin låg innan du skickar lite
om (data & (1 << k))
{
digitalWrite (dataPin, hög); slå "På"
}
annat
{
digitalWrite (dataPin, låg); Inaktivera ""
}
digitalWrite (clockPin, hög); och klockan lite i
}
digitalWrite (clockPin, låg); sluta att flytta ut data
digitalWrite (latchPin, hög); latchPin har angetts till hög att låsa och skicka data
}