Hjärta i dina händer LED låda (7 / 9 steg)
Steg 7: Programmera MCU
Följande är ett exempel på en LED ljusstyrka kontrollerna i huvudprogrammet ögla. Första är "riktning" checed. En 1 innebär ökande ljusstyrka; en 0 betyder avtagande ljusstyrka. Nivån är nästa, ökade/minskade på en kurs baserad på dess nuvarande nivå. För att hålla lampan på en dimmer tillstånd längre (det är mycket ljus under större delen av den verksamhet) sin nivå ändras långsamt i början. När det blir ljusare staterna, ändras nivån snabbare. Vill du ljusdioderna till beter sig annorlunda, är detta platsen att göra ändringar.
if(stat_flag & DIRECTION0) {/ / om LED 0 bör öka i ljusstyrkaom (brightness0 < 25) brightness0 ++; Öka långsamt under dim stater
annars om (brightness0 < 40) brightness0 += 5. Öka något snabbare
annars om (brightness0 < 100) + brightness0 = 10; Öka snabbt
annat CLEAR_BIT (stat_flag, DIRECTION0); Dags att byta riktning
}
annat {/ / om LED 0 bör minska på ljusstyrkan
om (brightness0 > 40) brightness0-= 10. Minska snabbt
annars om (brightness0 > 25) brightness0-= 5. Minskade något långsammare
annars om (brightness0 > 1) brightness0--; Minska långsamt under dim stater
annat SET_BIT (stat_flag, DIRECTION0); Dags att byta riktning
}
Nästa exempel är del av 100ns avbrottet som tänds lysdioderna och släcks. En räknare för varje LED räknar till 100, då det tänds lysdioden och återställer räknaren. Om räknaren inte vid 100, är det kontrolleras för att se om det har nått nuvarande ljusstyrkan. Vid den här tiden LED är avstängd och förblir avstängd tills räknaren når 100. Detta kallas PWM (pulse bredd modulering) och den styr effektivt ljusstyrkan på LED.
om (++ cnt0 == 100) {/ / 100 * 100ns = 10 MS (100Hz)
LED_ON(0); Slå på LED 0
cnt0 = 0; Återställ räknaren
}
annat if (cnt0 == brightness0) LED_OFF(0); Om nått önskad ljusstyrka, Stäng av LED 0
Jag har bifogat den huvudsakliga arkivera (valentine.c) samt nödvändiga makefile för användning med WinAVR. Hex filen finns även om du bara vill programmera chip och inte ändrar det alls. Ingår också i denna zip-fil är schematiskt för användning i Cadsoft Eagle.