Multiplexing 7 Segment verschijnt met Arduino en Shift registreert (3 / 5 stap)

Stap 3: Tijd om Code!

Onderhand wellicht hebt u een idee van hoe u uw programma op basis van uw schema zal code.

Om te beginnen u, is hier een eenvoudige schets die 456 met decimaal wilt weergeven in een tijdvertraging manier om aan te tonen multiplexing. Ik heb het ook flexibel om verschillende configuraties hebt. De broncode is ook beschikbaar op de bodem om te downloaden. Zorg ervoor dat de code eerst begrijpen en vervolgens te kopiëren en te plakken in een nieuwe schets. Vervolgens de nodige aanpassingen aan de variabelen en de pin-toewijzingen in uw situatie anders kan zijn. Zodra gedaan, uploaden naar de Arduino.

Één ding die u zou moeten opmerken is de richting van de gegevensstroom. Als u zich mijn schema herinnert, links meest shift register de eerste byte ontvangt, maar die gegevens uit de SER OUT zal dumpen als er een ander byte wordt ontvangen. Zo, als u verzenden 11111111 naar het meest rechtse cijfer wilt, u zou moeten verschuiven uit 11111111 dan 00000000 en ten slotte 00000000. Maak je geen zorgen, dit wordt automatisch afgehandeld door de code.

BEGIN CODE

/*
Code voor interfacing met 7 segment displays
multiplexing methode
en de TPIC6B595 Shift Register (1 per cijfer)
Door K.O.
*/

Pin-toewijzingen (u mag dit wijzigen)
Const int CLK = 9;           Aangesloten op TPIC pin 13: SRCLK (aka klok)
Const int klink = 10;          Aangesloten op TPIC pin 12: RCLK (aka Latch/belasting/CS/SS...)
Const int OE = 11;          Aangesloten op TPIC pin 9: OE (uitvoer inschakelen)
Const int DOUT = 12;          Aangesloten op TPIC pin 3: SER (aka MOSI)

Aantal patronen (0-9)
Riool 0-7 moeten worden verbonden met segmenten A-DP respectievelijk ***
Const byte numTable [] =
{
B11111100,
B01100000,
B11011010,
B11110010,
B01100110,
B10110110,
B10111110,
B11100000,
B11111110,
B11110110
};

Globale variabelen
int numDevices = 1;                       Het aantal x-cijferige display modules u wilt gebruiken
int maxDisplays = 3;                      De maximale beeldschermen die kunnen worden ingepast (zie opmerking 1)
int maxDigits = 3;                        De maximale cijfers die u van plan bent over het weergeven van weergeven module (elke SR kan omgaan met een maximum van 8 cijfers)
int SRData [3] [3];                         De opslagplaats voor de informatie van de cijfers. We moeten een vaste matrix opgeven tijdens het compileren (zie noot 2)
Booleaanse debug = true;                     Op true voor het afdrukken van berichten wijzigen
int delayTime = 1000;                     Optioneel (net voor het aantonen van multiplexing)

/*
Notities
1. het is aanbevolen om het gebruik van een externe voeding te vermijden oversource/zinken de microcontroller
of wilt u hoge netspanning, hoge stroom weergegeven. Deze code zal Hiermee schakelt u alle segmenten in een cijfer voor *** elke *** weergeven.
Dus, als met behulp van 2 x 3-cijferig weergegeven van alle tonen een 8 + DP, het max verbruik zal zijn:
20mA (gewenst voorwaarts lopende) * 8 (segmenten die op) * 2 (displays identiek info tonen) = 320mA
2. de eerste dimensie moet gelijk zijn aan maxDisplays. De tweede dimensie moet gelijk zijn aan het aantal cijfers
*/

VOID Setup
{
Serial.begin(9600);

Set pin modi
pinMode(CLK,OUTPUT);
pinMode(LATCH,OUTPUT);
pinMode (DOUT, uitvoer);
pinMode (OE, uitvoer);

7-segment Display Init
digitalWrite(OE,LOW);        Maakt SR bediening mogelijk
initializeSRData();          SR bereidt en wist u gegevens over een seriële lijn

Test
setDigit(0,0,4,true);
setDigit(0,1,5,true);
setDigit(0,2,6,true);
}

void loop
{
refreshDisplay();            Doorlopen alle displays en cijfers
}

=== BEGIN SR functies ===
VOID initializeSRData()
{
Scanner (Iterates via elke vertoningsmodule) weergeven
digitalWrite(LATCH,LOW);      Alle SRs vertelt dat uController is het verzenden van gegevens

voor (int dispID = 0; dispID < maxDisplays; dispID ++)
{
Cijfer Scanner (Iterates via elke SR (digit) in een weergave-module)
voor (int cijfer = 0; cijfer < maxDigits; cijfer ++)
{
Hiermee wist u alle vuilnis op de seriële lijn
shiftOut(DOUT,CLK,LSBFIRST,0);          Verschuiving uit 0s naar alle beeldschermen
SRData [dispID] [cijfer] = 0;              Slaat dus een 0 voor elk cijfer zijn volledig weg
}
}
digitalWrite(LATCH,HIGH);      Alle SRs vertelt dat uController gebeurt verzenden gegevens
}

VOID printSRData()
{
if(!debug)
terugkeer;

Serial.println ("afdrukken SR Data...");

Scherm Scanner
voor (int dispID = 0; dispID < maxDisplays; dispID ++)
{
Serial.Print ("Toon #");
Serial.println(dispID);

Cijfer Scanner
voor (int cijfer = 0; cijfer < maxDigits; cijfer ++)
{
Serial.Print ("cijfers");
Serial.Print(DIGIT);
Serial.Print(":");
Serial.println(SRData[dispID][Digit],bin);
}
Serial.println();
}
}

VOID setDigit (int dispID, int cijfer, int waarde, Booleaanse dp)
{
Met de parameter checker
Als (dispID < 0 || dispID > = numDevices)
{
Serial.println ("dispID OoB!");         OoB = out of bounds
terugkeer;
}

Als (cijfer < 0 || cijfers > maxDigits)
{
Serial.println ("cijfers OoB!");
terugkeer;
}

Als (waarde < 0 || waarde > 9)
{
Serial.println ("ongeldige waarde!");
terugkeer;
}

waarde = numTable [waarde];

Toggle dp indien nodig
if(DP)
waarde | = B00000001;          Hiermee schakelt u de eerste binary digit (segment) met behulp van een OR-bitmasker

Winkel het cijfer
SRData [dispID] [cijfer] = waarde;

if(debug)
printSRData();
}

VOID setSegments (int dispID, int cijfer, bytewaarde)
{
Met de parameter checker
Als (dispID < 0 || dispID > = numDevices)
{
Serial.println ("dispID OoB!");
terugkeer;
}

Als (cijfer < 0 || cijfers > maxDigits)
{
Serial.println ("cijfers OoB!");
terugkeer;
}

Als (waarde < 0 || waarde > 255)
{
Serial.println ("ongeldige byte!");
terugkeer;
}

Winkel het cijfer
SRData [dispID] [cijfer] = waarde;

if(debug)
printSRData();
}

VOID clearDisplay(int dispID)
{
initializeSRData();
refreshDisplay();
}

VOID refreshDisplay()
{
Cijfer Scanner
voor (int cijfer = 0; cijfer < maxDigits; cijfer ++)
{
Scherm Scanner
digitalWrite(LATCH,LOW);
voor (int dispID = numDevices - 1; dispID > = 0; dispID--)
{
Pre cijfer blanker (verschuivingen uit 0s cijfers corrigeren voordat segmentgegevens naar gewenste cijfer)
voor (int leeg = (maxDigits - 1 - cijfer); spaties > 0; spaties--)
shiftOut(DOUT,CLK,LSBFIRST,0);

shiftOut(DOUT,CLK,LSBFIRST,SRData[dispID][digit]);

Na cijfers blanker (verschuivingen uit 0s tot resterende cijfers)
voor (int leeg = cijfer; spaties > 0; spaties--)
shiftOut(DOUT,CLK,LSBFIRST,0);
}
digitalWrite(LATCH,HIGH);

Toont multiplexing operatie
delay(delayTime);
delayTime-= 10;
Als (delayTime < = 0)
delayTime = 0;
}
}

=== EINDE SR functies ===

EINDE CODE

Gerelateerde Artikelen

Multiplexing van vier 7-segment displays met behulp van Shift registreert Arduino

Multiplexing van vier 7-segment displays met behulp van Shift registreert Arduino

Hallo iedereenIk ontwierp een eenvoudige manier om het multiplexen van vier 7-Segment displays met behulp van Shift registreert en een ArduinoLaten we het 7 segment display multiplexStap 1: Stap-1: laten we ontwerpen Neem vier 7-segment displays en h
Met behulp van een 4-cijferige, 7 segment display, met arduino

Met behulp van een 4-cijferige, 7 segment display, met arduino

In deze tutorial zal ik je laten zien hoe met een 7 segment display met 4 digits met behulp van arduino. Aantal fundamentele dingen die ik zou willen wijzen, is dat dit neemt bijna alle van de digitale pennen op de arduino uno, leonardo, de planken m
Hoe maak je een LED 7-segment display met Arduino

Hoe maak je een LED 7-segment display met Arduino

Ik ga u tonen hoe te maken van een 7 segment display met LED's. Combineren met Arduino aftelproceduretijdopnemers, eenvoudige tekst, en meer te maken. Ik willen maken van de oorspronkelijke projecten. Ik zocht de hele instructables en als dit niet vi
Arduino aangedreven 7 seg LED display met behulp van Shift registreert - ik maakte het op TechShop

Arduino aangedreven 7 seg LED display met behulp van Shift registreert - ik maakte het op TechShop

zeven gesegmenteerde displays zijn groot. Ze zijn vrij eenvoudig, niet veel macht, en hebben een heleboel flexibiliteit als het gaat om het weergeven van nummers. Maar afgezien van 14 pinnen net om het te draaien is zo'n pijn. Als slechts er een mani
Rijden multiplexed 7 segment display

Rijden multiplexed 7 segment display

In deze tutorial zal ik u tonen hoe te rijden multiplexed zeven segment displays met behulp van een Arduino boardStap 1: onderdelen: Arduino board - ik ben met behulp van Arduino Nano maar een bord met meer dan 10 digitale uitgangen moet doenDisplay
Verschillende methoden van het besturen van de 7 Segment LED beeldschermen met Arduino

Verschillende methoden van het besturen van de 7 Segment LED beeldschermen met Arduino

ik zou graag willen tonen een paar verschillende methoden voor het aansluiten van de 7 segment LED displays op een Arduino of Atmega 328 IC. Ze zijn slechts eenvoudig counter codes ofwel automatisch tellen via de code of oplopend / verlaagd via een p
Multiplexing met Arduino en de 74HC595

Multiplexing met Arduino en de 74HC595

de 74HC595 is een makkelijk en goedkoop (op ongeveer 60 cent per stuk) manier om te verhogen van het aantal digitale uitgang pinnen op je Arduino.  In deze tutorial zal ik u tonen hoe te rijden van maximaal 16 LEDs met een 74HC595 met behulp van een
Multiplexing met Arduino - Transistors (ik maakte het op techshop)

Multiplexing met Arduino - Transistors (ik maakte het op techshop)

het doel van dit instructable is om een stap voor stap instructies over het implementeren van multiplex met behulp van transistoren. De eerste paar stappen zal introduceren Multiplexing, Transistors en wanneer ze te gebruiken.Ik was bezig met een pro
Arduino 8 * 8 Matrix Led driver met 2 * 74HC595 shift registers

Arduino 8 * 8 Matrix Led driver met 2 * 74HC595 shift registers

Ik kocht een 8 x 8 Led Matrix met inbegrip van een driver board met een MAX7219CNG chip. Deze chip was helaas niet goed werkt. Dus besloten heb ik om mijn eigen stuurprogramma met behulp van 2 74HC595 shift registers.Mijn oplossing is gebaseerd op de
Kinderen scherm Timer met Arduino

Kinderen scherm Timer met Arduino

Dit apparaat geeft een ouder een echt robuust middel om te controleren van de hoeveelheid scherm-tijd (TV / DVD / console) hun kinderen hebben elke dag. Het werkt door het hebben van een intelligente tijd-switch die het HDMI signaal doorgeven tussen
Controle eenvoudig LED-staafdiagram met Arduino

Controle eenvoudig LED-staafdiagram met Arduino

In deze tutorial ik zal je laten zien hoe u kunt besturen eenvoudige 10 LED staafdiagram matrix w / Arduino of Arduino kloon MCU en MAX7219 (werkt ook met MAX7221) LED controller chip.Hier is video van afgewerkt product in actieOver LED staafdiagram
4-cijferige 7-Segment LED-Display + Arduino

4-cijferige 7-Segment LED-Display + Arduino

ik onlangs kreeg een 4-cijferige 7-Segment LED-Display van Sparkfun, en kon niet wachten om het te gebruiken. Hier, zal ik u tonen hoe het, en sommige voorbeeldprogramma's te gebruiken met het draad!Stap 1: Display infoDit is de manier waarop het sch
KeyChainino - de eerste spel sleutelhanger programmeerbare met Arduino

KeyChainino - de eerste spel sleutelhanger programmeerbare met Arduino

KeyChainino is een vintage spel sleutelhanger programmeerbare met Arduino waar iedereen zijn eigen spel alleen met de Arduino IDE uploaden kunt.Als je echt Arcade Game liefde, is KeyChainino voor jou!Het hoeft niet elke LCDs, maar slechts 30 LEDs gec
4 x 4 x 4 LED kubus upgrade met Shift registreert (74hc595)

4 x 4 x 4 LED kubus upgrade met Shift registreert (74hc595)

dit project begon met een zak van LED's die ik had verwijderd uit zaklampen, converteren naar UV zaklampen. Ik wist dat ik zou vinden iets leuk om te gebruiken met, maar het was maanden voordat ik wat bedacht te doen met hen. Toen ik zag een LED kubu