Fórum témák
» Több friss téma |
Cikkek » Winamp vezérlő soros portra Winamp vezérlő soros portra
Szerző: pixels, idő: Márc 18, 2008, Olvasva: 33688, Oldal olvasási idő: kb. 3 perc
A firmware forráskód szerkezeti áttekintése: A programot pic assembly nyelven írtam meg. A PIC RAM-jában sok segédregiszter van, ezek az lcd függvényeknek, a bcd átalakításnak, a delay függvénynek vannak létrehozva. A lista végén vannak a "hasznos" adatok tárolására szolgáló regiszterek. Itt tárolom a lista hosszát, pozícióját, a zeneszám hosszát, pozícióját, a szám címének hosszát, kijelzés pozíciót, görgetést, és lejátszó állapotát. A bank0 végén 0x70 címtől is van néhány regiszter. Ezeket bármely bankból elérhetővé kellett tenni, ezért vannak a 0x70-es címen, külön a többi változótól. A zeneszám címét a belső EEPROM-ban tárolom, hiszen az indirekt címezhető, és 128 karakter befogadására képes. Ez tapasztalataim szerint bőségesen elég. A forráskódban láthatunk még néhány állandót, ezek az adatküldés parancskódjai, a lejátszó állapotához rendelt értékek, valamint a bankváltásokhoz, lcd-hez előre definiált állandók. A programban megszakításokat is használunk, mégpedig a TIMER0 modul, és az USART modul megszakítását. A megszakítások a 0x0004-es címről kezdődnek, ez előtti négy programszó valósítja meg az inicializálást, az LCD speciális karakterek feltöltését, és a főciklusba ugrást. A TIMER0 megszakításban a kijelzést vezéreljük az LCD_DISPLAY, és LCD_CLEAR bittel, valamint a gombok állapotát kérjük le, és ha van változás rögtön ki is küldjük az adatokat a PC felé az USART-on. Itt térnék ki a 4 portra, ami kimenetként és bemenetként is funkcionál. Amikor az LCD-re adatot írunk, akkor az LCD_BUSY bit értéke 1, ilyenkor a portról nem szabad adatot olvasni, hiszen az LCD használja azt. A TIMER0 megszakításban először ezt ellenőrizzük. Ha az LCD felé nincs adatátvitel, akkor a portról beolvassuk a gombok állapotát. Ha az LCD felé éppen adatátvitel van folyamatban, akkor kiugrunk a megszakításból, és nem kérjük be a gombok állapotát. Ez nem okoz problémát, hiszen a gombok állapotát sűrűn ellenőrzi a firmware, viszont az LCD-t elég ritkán használja, így a reakcióidő nem csökken észrevehetően. Az USART megszakítása meglehetősen bonyolult, itt nem részletezem annyira. Az adatok mindig parancsbájttal kezdődnek. A megszakításban ellenőrizzük a parancs kódját, és a parancs függvényében a megfelelő helyre mentjük el az adatokat. A megszakítások után van a főciklus, ahol az LCD frissítése történik. A főciklus után vannak elhelyezve a függvények:
A forráskódról felépítéséről ennyi szerintem elég. Aki kíváncsi még valamire, ajánlom átnézni a forráskódot, mert fel van kommentezve. Kijelzés testreszabása: Ha nem sikerül 1*16-os kijelzőt szerezni, vagy több adatot akarunk megjeleníteni egy nagyobb kijelzőn, akkor meg van rá a lehetőség, hogy a kód minimális változtatásával lehet beállítani a kijelzést:
Alapértelmezésben a szám címe 8 karakter szélességben, az eltelt idő, és a lejátszó állapot van kiíratva egy 1*16-os kijelzőn. Egy példa, hogy az alapbeállításokkal hogy nézhet ki az LCD kijelző:
A cikk még nem ért véget, lapozz! Értékeléshez bejelentkezés szükséges! |
Bejelentkezés
Hirdetés |