Binär klocka i 7-segment LED-skärm (3 / 4 steg)
Steg 3: Hur det fungerar
Huvudprincipen i detta projekt os Binärt tal.
För varje antal timmar, minuter och sekunder måste du konvertera dem från basen 10 (decimal) base-2 (binära) och dem till koden dem i segment från "A till G" på displayen.
Men det är mycket lätt att använda Arduino programmering.
Alla heltal inom spänna av timmar (00 till 23), minuter och sekunder (00 till 59) är lägre än 64 och så de kan vara ordnat in 7 segmenten.
Ta en titt på detta:
A
// ------
// | |
// F | | B
// | G |
// ------
// | |
// E | | C
// | D |
// ------
0
// ------
// | |
16 || 1
// | 32 |
// ------
// | |
// 8 | | 2
// | 4 |
// ------
Du kan se den perfekta corresponce mellan: segment -> >--binär (bas-2)
G = 32 / F = 16 / E = 8 / D = 4 / C = 2 / B = 1 / A = 0
32 16 8 4 2 1 0
G F E D C B A
Men hey! Det finns ett trick här!
Kom ihåg att bas-2 startar från 1 (2 power 0) och inte noll!
Noll innebär i detta fall att det motsvarande segmentet display sätts till Off och jag vill att det första segmentet måste vara inställd på.
Hur kan vi göra detta?
Ta en titt efter uttalanden av programmering:
om (mm == 0) {
shiftOut (dataPin, clockPin, MSBFIRST, 1);
}
annat {
shiftOut (dataPin, clockPin, MSBFIRST, mm << 1);
}
Jag kontrollera först om den variablle mm (minuter) är noll. Om ja, tvinga jag LED att vara inställd på.
För alla nummer högre än noll, jag skifta vänster en position av binärt tal ska motsvara det rätta segment som jag behöver med kommandot hh << 1.
Exempel:
Minuter = 0 då binära är 00000000 och den kommer bli sätta till 00000001
Minuter = 5 då binära är 00000101 och det blir SKIFT vänster en position till 00001010