Rikta behandlingen av LCD med generell IO (10 / 12 steg)
Steg 10: Firmware - main-v1.0
Som nämnts, den första versionen av koden läses skala LCD-skärmen och sedan skriva data till en lokal LCD-skärm. Detta är bara ett bevis av koncept... skriva om data från en skärm till en annan är ganska meningslöst! Jag tror jag har kommenterat källkoden bra nog för dig att förstå vad som händer om du är alls insatt i AVR kod, men jag kommer att gå över några av de finare punkterna.
Några filer är inkluderade:
- modules/avr.h - jag inkludera detta i varje AVR projekt jag arbetar på
- modules/lcd/SerLCD_2x16.h - funktionen prototyper och makron för att skriva till lokal LCD-skärmen
- definitions.h - alla våra viktigaste makron och definitioner
- util/delay.h - enkel dröjsmål rutiner
Hårdvarumoduler konfigureras i funktionen initialize_AVR() som finns på rad 486.
Analoga komparator
Den analoga motsvarigheten utlöses på stigande kanten av COM 1. Det kan sedan Timer 0 som simulerar COM 1 fallande kant och de andra 3 COM linjerna.
Timer 0
Timer 0 är inställd för att utlösa en ISR varje 0.2ms. En räknare inom ISR kommer att orsaka händelser skall ske efter så lång tid (nämligen någonsin 4ms), och en switch-sats för att utföra olika åtgärder för varje aktiv simuleras COM linje. Tillståndet för LCD stiften registreras för varje COM-rad, och i slutet av cykeln, Timer 0 inaktiveras.
LCD-behandlingen
Läs provcykeln startas av funktionen readLCD() på linje 311. Här funktionen enkel kan den analoga kontrollapparat och sitter i ett tag loop tills Läs cykeln har slutförts. Funktionen decodeDigit() som finns på linje 321 faktiskt förvandlas alla pin statusdata till numeriska siffror för varje LCD siffror.
LCD-skrift
LCD-skriva rutiner hittade börjar på linje 407 var skriven av mig ett tag sedan. De finns också i mappen moduler/lcd, men jag kopierade bara de funktioner jag ville använda till den huvudsakliga arkivera så jag inte var sammanställa filer från flera platser. Jag tycker de är ganska självförklarande.
Main
I funktionen Main, AVR enheten har initierats och sedan går in en för alltid slinga. Inuti denna loop, LCD-skärmen är läsa, och att data avkodas och skrivs ut till lokal LCD-skärmen för att testa. Siffran 4 hoppas över, och jag oroa dig inte om klockans läge av skalan eftersom jag inte övervakning AM/PM LCD-pin segmenten.
I en tidigare version av kretsen, var jag övervaka alla LCD stift, därav min förmåga att skriva ut klocka läge data; dock kan inte presenteras firmware göra detta. Också märka "&" symbolen i siffrorna på grund av seriell överföra raden används för att skriva ut på denna LCD-skärm stoppa mig från att läsa en viss skala LCD-pin.