Dokumentace Casio 549 W-71

download

Zadání:

Cílem mého zápočtového programu bylo naprogramovat konkrétní digitální hodinový stroj, vypátrat jeho přesné funkce a ty implementovat v programu. Mnou vybraný stroj lze zařadit do střední kategorie dnešních hodinek, nabízející funkce jako jsou budík, stopky, nebo odpočet (podrobně níže).

Rozbor přístroje

Jak již bylo zmíněno, přístroj nabízí několik funkcí, jenž je možné rozdělit do několika módů - již od počátku se hodí rozdělení podle zobrazovaných dat.

  1. Funkce hodinky (ti): Hlavní funkcí hodinek je zobrazovat a měřit čas. Čas v sobě zahrnuje zobrazení dne v týdnu v závislosti na roce (lze nahlédnout, že hodinky zřejmě obsahují tabulky s přestupnými dny). Rok lze nastavit v rozsahu 1985 - 2029 (zřejmě předpokládaná životnost), ale jinak se v zobrazení nijak neprojevuje. Dále se zobrazuje a nastavuje datum (opět den nelze nastavit libovolně - závisí na měsíci a roce), čas je poté zobrazován včetně vteřin.

  2. Funkce alarm (al): Funkce nabízí nastavení času, zapnutí budíku a to včetně dne a měsíce (při nastavení pouze dne - zvoní každý měsíc v nastavený den a naopak), krom toho umožňuje zapnutí a vypnutí budíku tzv. "natvrdo" a zapnutí či vypnutí pípnutí v celou hodinu (indikátory v levém horním rohu). Při nastavování se vždy automaticky zapne "natvrdo budík". Budík při vyzvánění vyzvání dobu dlouhou v závislosti na stavu baterie (v programu nezahrnuto), nový přístroj "budil" 60s, nyní již 30 - 40s (v programu 30s). Buzení lze přerušit stiskem libovolného tlačítka.

  3. Funkce druhý čas (dt): Zobrazuje v hodinkách uložený druhý čas (napíříklad zimní, či jiné časové pásmo). Nastavit lze pouze hodiny a minuty (vteřiny se řídí podle ti). Krom toho funkce dt zobrazuje v pravém horním rohu ti

  4. Funkce odpočet (tr): Úlohou této funkce je umožnit nastavení času, který se má odpočítávat. Na konci tohoto procesu je dvacetivteřinové pípání, které lze opět přeruši stiskem libovolného tlačítka. Funkce mimo jiné zobrazuje v pravém horním rohu ti

  5. Funkce stopky (st): Klasické stopky zobrazující hodiny, minuty, vteřiny a desetiny. Při přetečení hodin (23) stopky běží dál od 0. Ovládání je start/stop - stopnutí a spuštění stopek, a reset. Reset má dvě funkce v závislosti na stavu stopek (běží neběží). V případě že běží, přepíná mezi stavy, kdy je zobrazována aktuální změna a kdy je zobrazována hodnota v okamžiku stisknutí resetu. V případě že stopky neběží, jsou vymazány (pokud byl zobrazen finální čas), nebo je zobrazen finální čas místo pozastaveného.

Implementace a datové struktury

Při implementaci jsem se snažil co nejvíce držet rozdělení na "viditelné" funkce (či módy), ovšm tento postup nebyl zcela optimální.

Finální verze obsahuje dvě datové struktury:

Mimo nich byla ještě naprogramována unita pro práci s prvky diplaye. Jelikož display obsahuje přes 100 prvků, které se zobrazují více méně nezávisle na sobě, bylo třeba je rozdělit do několika částí. Viz níže.
V programu jsou navíc využity unity crt - pro práci se vstupem (funkce ReadKey ...), dos pouze pro funkci GetTime, graph - pro grafický výstup.

Funkce a procedury programu

V programu není využito příliš mnoho funkci ani procedur. Možná na úkor čitelnosti programu avšak procedury vždy řeší úlohy, které spolu, byť někdy nepřímo, souvisí. Procedury lze rozdělit na dvě velké skupiny: ovládání výstupu (tedy prvků displaye) a ty ostatní - zvyšování, nastavování, zjišťování dne v týdnu apod.

Práce s displayem: Hlavní nosnou funkcí pro nastavování displaye je procedura nastav_display, ta se stará o uložení správných hodnot do proměnné new typu display. Druhou důležitou procedurou je zobraz_display, která porovná zobrazení old a new (uloženo v proměnných typu display) a obnoví na výstupu pouze co je potřeba. K tomu využívá procedury nastav_zvonek, nastav_id, nastav_číslo a nastav_doplněk.

Ostatní procedury a funkce: Zde by bylo namístě uvolnit jednu kapitolu pro funkci den_týdne, nicméně tato procedura pouze určuje den v týdnu, v závislosti na datu. Byla však získána z mých dřívějších zápisků a dnes o ni mohu říci pouze, že funguje tak jak má. Krom ní je ještě v této skupině procedura vstupní_data a increase, tato procedura zajišťuje zvyšování a snižování hodnot v proměnných, blikání některých prvků displaye a celý chod programu - reakce na vstup.

Unit x-dis: Jak již bylo řečeno výše display hodinek je složen z 101 částí, ty jsem rozdělil na cifry, id, zvonek a doplňky a jejich správu vložil do procedur disp_c, disp_id, disp_z a disp_d. Mimo ně x-dis obsahuje ještě PowerOff - těchto 5 procedur se stará o vykreslování. Disp_c navíc využívá procedury cifra, která podle vstupních parametrů (pořadové číslo cifry) zobrazuje jednotlivé pozice pro čísla na display. Ještě je třeba zmínit, že všechny tyto zobrazující procedury dostávají jako parametr barvu (černá/bíla) jakou se mají prvky vykreslit a pole part_d : boolean; obashující stavy všech prvků (on/off). Tyto stavy jsou nastavovány v procedurách programu nastav_*.

Rozdíly přístroje a programu

Jak již bylo zmíněno, některé vlastnosti přístroje jsou v přístroji implementovány jinak než v programu. Program totiž neřeší problémy jako omezená prostorová velikost nebo napájení. V programu tak vznikly rozdíly. Ovšem nejen z těchto důvodů, ale také díky programátorově lenosti a snaze odstranit některé nedostatky přístroje (či zbytečné funkce).
Rozdíly o kterých vím

Další rozdíly nebyly zaznamenány.

Ovládání programu - uživatelská část

Hodinky mají čtyři tlačítka, na hodinkách označená adjust, mode, light a start*stop/rem, v programu fungující pod tlačítky 1,2,3,4. Program se ukončuje stiskem 'q' a libovolné klávesy. Ovládání jednotlivých funkcí, stejně jako u hodinek, si uživatel musí osahat sám.