Stap 4: Microcontroller Code
Uitleg van de code:
Tijdwaarneming:
De magische verhouding tot reguliere speeltijd omzetten in nieuwe aarde tijd is 0,25 NET minuten per 1 seconde (of 1 netto minuut voor elke 4 seconden verstreken tijd). Dit wordt berekend met de verhoudingen 360 netto Deg per 24 uur en 60 NET minuten per NET graad.
Graaf NET, gebruikt de code de foto's ingebouwde Timer1-module (TMR1) met een externe 32.768kHz kristal voor de tijdwaarneming. Om te bereiken de magische verhouding van 1 NET Min per 4 seconden, kunnen we het 16-bits TMR1 register gebruiken met een prescaler van 1:2. (De 16-bits TMR1 loopt over op 65536 graven, crystal prestatiestatus 32768 tellingen per seconde. 65536/32768 = overloop elke 2 seconden. Voeg in de 1:2 prescaler en voila! Onderbreken van elke 4 seconden!)
Display:
De foto zelf draait op de interne 4MHz oscillator. De vijf 7-segment LED displays worden gescand met een vaste interval bestuurd door Timer0 (TMR0). Elke keer TMR0 doorloopt, zal de PIC overschakelen naar het volgende scherm (voor tijd division multiplexing). De sleutel tot tijd division multiplexing displays is om te scannen ze zo snel mogelijk en met een regelmatig interval. Anders zal uw oog waarnemen flikkeren in het display.
Tijd instelling/knoppen:
Tijdinstelling wordt uitgevoerd door twee knoppen - één knop stappen NET graden en minuten met een NET. De knoppen worden voortdurend gecontroleerd door de PIC in het hoofdprogramma lus. Als u wilt opslaan I/O pinnen, zijn de knoppen verbonden met wat normaal gesproken een uitgang Pins is. Wanneer de PIC de status van de knop controleert, het dat I/O pin wordt overgeschakeld naar een input en neemt een lezing.
Wanneer een druk op de knop wordt gedetecteerd, wordt het programma gaat naar een tijd instelling functie specifiek voor elke knop. Deze functie wordt de variabele het bijhouden van tijd, net als de TMR1 interrupt verhoogd. Een enkele druk zal de klok één stap, terwijl die de knop in continu voorschot resulteren zal verhogen. Er is een vertraging-functie in de code om te debounce de eerste pers en de timing voor de continue advance.