Hodiny na orientačný beh
Zo stránky SensorWiki
- Záverečný projekt
- Vypracovali:
- Bc. Andrej Berčák
- Bc. Juraj Harmata
- Študijný odbor: Aplikovaná mechatronika
- Ročník: 2. Ing.
- Úloha:
- Veľkoplošný 7-segmentový LED displej treba pripojiť k mikroprocesoru a naprogramovať tak, aby po zapnutí odpočítaval minúty nasledujúce po štarte, pričom posledných 5 sekúnd pred každou celou minútou odpípa. Posledné pípnutie bude dlhšie a bude sprevádzané inkrementovaním čísla na displeji. Pred časom 00 bude displej zobrazovať pripravenosť symbolmi --.
K zapojeniu treba vypracovať dokumentáciu, popis programu, schému zapojenia displeja a riadiacej jednotky.
- Vypracovanie:
- Schéma zapojenia:
Sedem segmentový displej slúži na zobrazovanie desatinných čísel a obmedzený počet znakov abecedy. Často sa vyskytuje v displejoch vo vreckových kalkulačkách, VHS a DVD prehrávačoch, digitálnych hodinkách, audio záznamníkoch atď.
V našom prípade jednotlivé segmenty sú aktívne v nule. Zobrazený znak je riadený z registra D. Najnižší bit zodpovedá segmentu A, posledný bit je desatinná bodka.
Polohu znaku môžeme určiť portom B. Určíme ho otváraním jednotlivých tranzistorov, kde znaku na poslednom mieste zodpovedá PB.0 a takto ďalej až ku PB.3 . Vysvietenie všetkých štyroch znakov naraz je možné riešiť rýchlim prepínaním medzi nimi.
Príkaz na určenie polohy:
PORTB = ~(1<<place) & 0b11011111;
Výpis znakov:
Jednotlivé znaky vypisujeme pomocou funkcie „znak“
void znak(int number, unsigned char place)
{
PORTB = ~(1<<place) & 0b11011111; // nastavenie miesta displeja ktorý chceme zobraziť
if (number==10) //prázdny znak { PORTD = 0b11111111; }
if (number==11) // pomlčka { PORTD = 0b10111111; } if (number==0) //0 { PORTD = 0b11000000; }
if (number==1) //1 { PORTD = 0b11111001; }
if (number==2) //2 { PORTD = 0b10100100; }
if (number==3) //3 { PORTD = 0b10110000; }
if (number==4) //4 { PORTD = 0b10011001; }
if (number==5) //5 { PORTD = 0b10010010; }
if (number==6) //6 { PORTD = 0b10000010; }
if (number==7) //7 { PORTD = 0b11111000; }
if (number==8) //8 { PORTD = 0b10000000; }
if (number==9) //9 { PORTD = 0b10010000; }
if (number==0) //0 { PORTD = 0b11000000; }
void znakmin(int number, unsigned char place)
{
PORTB = ~(1<<place) & 0b11011111;