Obsah:

AVR Assembler Tutorial 9: 7 Steps
AVR Assembler Tutorial 9: 7 Steps

Video: AVR Assembler Tutorial 9: 7 Steps

Video: AVR Assembler Tutorial 9: 7 Steps
Video: AVR Assembly Tutorial: Part 1 (Basic Commands) 2024, Listopad
Anonim
AVR Assembler Tutorial 9
AVR Assembler Tutorial 9

Vítejte v tutoriálu 9.

Dnes si ukážeme, jak ovládat 7segmentový i 4místný displej pomocí našeho kódu montážního jazyka ATmega328P a AVR. V průběhu toho se budeme muset odchýlit od toho, jak pomocí zásobníku snížit počet registrů, které potřebujeme spojit. Přidáme pár kondenzátorů (nízkoprůchodové filtry), abychom se pokusili snížit šum na naší klávesnici. Z několika tranzistorů vytvoříme napěťový zesilovač, aby náš přerušovací spínač INT0 fungoval lépe pro tlačítka nižšího napětí ve spodní řadě klávesnice. A budeme trochu bouchat hlavami o zeď a budeme se snažit získat správné odpory, aby věc správně fungovala.

Naši klávesnici budeme používat z výukového programu 7

K provedení tohoto kurzu budete kromě standardních věcí potřebovat:

  1. 7segmentový displej

    www.sparkfun.com/products/8546

  2. 4místný displej

    www.sparkfun.com/products/11407

  3. Tlačítko

    www.sparkfun.com/products/97

  4. Datové listy pro displej, které lze stáhnout z příslušných stránek, na které je odkazováno výše.
  5. Keramický kondenzátor 68 pf, pár 104 kondenzátorů, svazek odporů, dva tranzistory 2N3904 NPN.

Zde je odkaz na kompletní sbírku mých návodů k assembleru AVR:

Krok 1: Zapojení displeje 7 seg

Zapojení 7segového displeje
Zapojení 7segového displeje
Zapojení 7segového displeje
Zapojení 7segového displeje
Zapojení 7segového displeje
Zapojení 7segového displeje

K ovládání 7segmentového displeje použijeme stejný kód, jaký jsme použili v kurzu 7 pro klávesnici. Budete si tedy muset udělat kopii a my ji upravíme.

Segmenty namapujeme na piny našeho mikrokontroléru následovně:

(dp, g, f, e, d, c, b, a) = (PD7, PD6, PB5, PB4, PB3, PB2, PB1, PB0)

kde písmena segmentů jsou na obrázku zobrazena společně s vývodem odpovídajícím společným 5V a každým ze segmentů LED včetně desetinné čárky (dp) v pravém dolním rohu displeje. Důvodem je to, že můžeme zadat celé číslo do jednoho registru a výstup, který se registruje na porty B a D, rozsvítí segmenty. Jak vidíte, bity jsou číslovány postupně od 0 do 7, a tak se budou mapovat na správné piny, aniž byste museli nastavovat a mazat jednotlivé bity.

Jak vidíte na kódu, který jsme připojili v dalším kroku, přesunuli jsme naši zobrazovací rutinu do makra a uvolnili jsme piny SDA a SCL pro budoucí použití v dalším kurzu.

Měl bych dodat, že mezi společnou anodu displeje a kolejnici 5V je třeba vložit odpor. Jako obvykle jsem zvolil odpor 330 ohmů, ale pokud chcete, můžete vypočítat minimální odpor potřebný k získání maximálního jasu z displeje, aniž byste jej smažili. Zde je postup, jak to udělat:

Nejprve se podívejte na datový list a všimněte si, že na první stránce poskytuje různé vlastnosti zobrazení. Důležitými veličinami jsou „dopředný proud“(I_f = 20 mA) a „dopředné napětí“(V_f = 2,2 V). Ty říkají, že chcete, aby pokles napětí na displeji byl, pokud se proud rovná dopřednému proudu. Toto je maximální proud, který displej zabere bez smažení. V důsledku toho je to také maximální jas, který můžete ze segmentů dostat.

Použijme tedy Ohmův zákon a Kirchoffovo smyčkové pravidlo, abychom zjistili, jaký minimální odpor bychom museli klást do série s displejem, abychom získali maximální jas. Kirchoffovo pravidlo říká, že součet změn napětí kolem uzavřené smyčky v obvodu se rovná nule a Ohmův zákon říká, že úbytek napětí na rezistoru odporu R je: V = I R kde I je proud protékající rezistorem.

Takže vzhledem ke zdrojovému napětí V a procházení našeho obvodu máme:

V - V_f - I R = 0

což znamená (V - V_f)/I = R. Takže odpor potřebný k získání maximálního jasu (a pravděpodobně smažení segmentů) bude:

R = (V - V_f)/I_f = (5,0 V - 2,2 V)/0,02 A = 140 ohmů

Takže pokud byste chtěli, můžete bez obav použít 150 ohmů. Myslím si však, že 140 ohmů je podle mého názoru příliš jasné, a proto používám 330 ohmů (což je můj osobní odpor Zlatovláska pro LED diody)

Krok 2: Kód sestavy a video

Připojil jsem montážní kód a video ukazující činnost klávesnice s displejem. Jak vidíte, jednoduše jsme namapovali klíč opakování volby na „r“, klíč blesku na „F“, hvězdičku na „A“a znak hash na „H“. Ty by mohly být mapovány na různé operace, jako je backspace, enter a co ne, pokud jste chtěli i nadále používat klávesnici pro psaní čísel na LCD displejích nebo 4místných displejích. Tentokrát neprojdu kód řádek po řádku, protože je velmi podobný tomu, co jsme již udělali v předchozích tutoriálech. Rozdíly jsou hlavně jen ve stejných věcech, které už víme, jako dělat přerušení a vyhledávací tabulky. Měli byste prostě projít kódem a podívat se na nové věci, které jsme přidali, a na věci, které jsme změnili, a přijít na to odtamtud. V dalším tutoriálu se vrátíme k analýze řádek po řádku, když představíme nové aspekty kódování jazyka sestavení na mikrokontrolérech AVR.

Podívejme se nyní na 4místný displej.

Krok 3: Zapojení 4místného displeje

Zapojení 4místného displeje
Zapojení 4místného displeje
Zapojení 4místného displeje
Zapojení 4místného displeje

Podle datového listu má 4místný displej dopředný proud 60 mA a dopředné napětí 2,2 voltů. Takže podle stejného výpočtu jako dříve bych mohl použít odpor 47 ohmů, kdybych chtěl. Místo toho použiji … hrm.. nechám se podívat … jak asi 330 ohmů.

Čtyřmístný displej je zapojen tak, že existují 4 anody, jedna pro každou z číslic a další piny určují, který segment se v každé z nich objeví. Můžete zobrazit 4 číslice současně, protože jsou multiplexované. Jinými slovy, stejně jako u dvojice kostek, jednoduše cyklujeme energii postupně každou z anod a postupně je bude blikat jedna za druhou. Udělá to tak rychle, že naše oči nevidí blikání a bude to vypadat, že jsou zapnuty všechny čtyři číslice. Pro jistotu však budeme kódovat tak, že nastavíme všechny čtyři číslice, potom cyklujeme anody, než nastavujeme, přesouváme, nastavujeme, přesouváme atd. Tímto způsobem můžeme získat přesné načasování mezi rozsvícením každé číslice.

Prozatím vyzkoušíme, zda všechny segmenty fungují.

Umístěte odpor 330 ohmů mezi kladnou kolejnici prkénka a první anodu na displeji. Datový list nám říká, že piny jsou očíslovány od 1 do 16 proti směru hodinových ručiček počínaje vlevo dole (když se díváte na displej normálně.. s desetinnými čárkami dole) a uvádí, že anody jsou čísla pinů 6, 8, 9 a 12.

Takže připojíme kolík 6 na 5V a poté odebereme záporný vodič z vaší GND lišty a zasuneme jej do všech ostatních pinů a uvidíme, že všechny segmenty se rozsvítí na číslici, které odpovídá (což je vlastně druhá číslice z právo). Ujistěte se, že svítí všech 7 segmentů a desetinná tečka.

Nyní vložte svůj GND vodič do jednoho z kolíků, aby se rozsvítil jeden ze segmentů, a tentokrát přesuňte odpor kolem dalších 3 anod a uvidíte, že stejný segment se rozsvítí v každé z dalších číslic.

Něco neobvyklého?

Ukazuje se, že pinout v datovém listu je špatný. Důvodem je údajový list a vývod pro 12pinový, 4místný displej. Tj. jeden bez dvojtečky nebo horní desetinné čárky. Displej, který jsem dostal při objednávce, je 16pinový, 4místný displej. Ve skutečnosti jsou na mém segmentové anody na pinech 1, 2, 6 a 8. Tlustá anoda je pin 4 (katodový pin 12) a horní dp anoda je pin 10 (katoda je pin 9)

Cvičení 1: Pomocí rezistoru a uzemňovacího vodiče zmapujte, který pin odpovídá kterému segmentu a desetinné čárce na displeji, abychom při kódování rozsvítili správné segmenty.

Způsob, jakým chceme kódovat segmentovou mapu, je přesně stejný jako u výše uvedeného jednomístného 7segmentového displeje-v kódu nemusíme nic měnit, jediné, co měníme, je způsob připojení vodičů na palubě. Jednoduše připojte správný portový kolík na mikrokontroléru k odpovídajícímu kolíku na 4místném displeji, takže například PB0 stále jde na pin odpovídající segmentu a, PB1 jde do segmentu B atd.

Jediným rozdílem je, že nyní potřebujeme 4 další piny pro anody, protože už nemůžeme jednoduše přejít na kolej 5V. Potřebujeme mikrokontrolér, abychom rozhodli, která číslice dostane šťávu.

K ovládání anod 4 číslic tedy použijeme PC1, PC2, PC3 a PD4.

Můžete také pokračovat a zapojit dráty. (nezapomeňte na 330 ohmové odpory na anodových vodičích!)

Krok 4: Kódování 4místného displeje

Kódování 4místného displeje
Kódování 4místného displeje

Zamysleme se nad tím, jak chceme tento displej kódovat.

Chtěli bychom, aby uživatel mačkal tlačítka na klávesnici a čísla se postupně zobrazovala na displeji při každém stisknutí tlačítka. Pokud tedy stisknu 1 následovanou 2, zobrazí se na displeji jako 12. Také bych chtěl tuto hodnotu 12 uložit pro interní použití, ale k tomu se dostaneme o něco později. Prozatím chci jen napsat nové makro, které vezme vaše stisknutí kláves a zobrazí je. Protože však máme pouze 4 číslice, chci se ujistit, že vám to umožní zadat pouze čtyři čísla.

Dalším problémem je, že multiplexovaný 4místný displej funguje tak, že cykluje anody tak, aby každá číslice byla zapnutá pouze na zlomek sekundy, než se zobrazí další a pak další a nakonec zpět na první, atd. potřebujete způsob, jak to kódovat.

Chceme také, aby při zadávání další číslice přesunul „kurzor“doprava o mezeru. Takže když chci napsat například 1234, po zadání 1 se kurzor přesune tak, že další číslice, kterou napíšu, se objeví na dalším 7segmentovém displeji atd. Po celou dobu, co se to děje, chci stále vidět, co jsem zadal, takže stále musí procházet číslicemi a zobrazovat je.

Zní to jako vysoký řád?

Věci jsou ve skutečnosti ještě horší. Potřebujeme další 4 obecné registry, které můžeme použít k ukládání aktuálních hodnot 4 číslic, které chceme zobrazit (pokud jimi budeme procházet, musíme je někde uložit) a problém s tím je, že máme používá bláznivé registry pro obecné účely a pokud nebudeme dávat pozor, žádný nám nezbyde. Je tedy pravděpodobně dobré řešit tento problém dříve než později a ukázat vám, jak uvolnit registry pomocí zásobníku.

Začněme tedy tím, že věci trochu zjednodušíme, použijeme zásobník a uvolníme některé registry a poté se pokusíme splnit úkol čtení a zobrazování našich čísel na 4místném displeji.

Krok 5: Push 'n Pop

Push 'n Pop
Push 'n Pop

K dispozici máme jen několik „registrů pro obecné účely“a jakmile jsou použity, již neexistují. Je tedy dobrou programovací praxí použít je pouze pro několik proměnných, které se používají jako dočasné úložiště, které potřebujete ke čtení a zápisu do portů a SRAM s, nebo jinými porty, které budete potřebovat v podprogramech všude, takže vyjmenuj je. Takže to, co jsem udělal, teď, když jsme inicializovali a učíme se používat Stack, je projít kódem a najít pojmenované obecné registry, které se používají pouze uvnitř jednoho podprogramu nebo přerušení a nikde jinde v kódu a nahradit s jedním z našich dočasných registrů a push a pop do zásobníku. Ve skutečnosti, když se podíváte na kód napsaný pro menší mikrokontroléry, nebo se vrátíte v čase, kdy byly všechny čipy menší, uvidíte jen pár registrů pro obecné účely, které bylo nutné použít pro všechno, takže jste nemohli stačí tam uložit hodnotu a nechat to na pokoji, protože jste si byli jisti, že tento registr budete potřebovat pro jiné věci. V kódu tedy budete všude tlačit a vyskakovat. Možná jsem měl pojmenovat naše dočasné obecné registry AX a BX jako uctivé uznání těchto zašlých dnů.

Příklad to pomůže objasnit.

Všimněte si, že v našem úplném přerušení převodu analogově na digitální ADC_int používáme obecný registr, který jsme pojmenovali buttonH, který jsme použili k načtení hodnoty ADCH a porovnání s naší vyhledávací tabulkou převodů analogových na stisknutí tlačítka. Tento registr buttonH používáme pouze v podprogramu ADC_int a nikde jinde. Místo toho tedy použijeme naši proměnnou temp2, kterou použijeme jako dočasnou proměnnou, kterou můžeme použít v rámci jakéhokoli daného podprogramu a jeho hodnota neovlivní nic mimo tento podprogram (tj. Hodnota, kterou mu dáme v ADC_int, nebude nikde použita jiný).

Další příklad je v našem makru zpoždění. Máme registr, který jsme pojmenovali „milisekundy“, který obsahuje naši dobu zpoždění v milisekundách. V tomto případě je to v makru a připomínáme, že způsob práce makra spočívá v tom, že assembler umístí celý kód makra na místo programu, kde je volán. V tomto případě bychom se chtěli zbavit proměnné „milisekund“a nahradit ji jednou z našich dočasných proměnných. V tomto případě to udělám trochu jinak, abych vám ukázal, jak i když bude hodnota proměnné potřeba jinde, stále ji můžeme použít pomocí zásobníku. Takže místo milisekund použijeme „temp“a abychom nezkazili další věci, které také používají hodnotu temp, jednoduše spustíme makro „delay“„tlačením“temp na zásobník, pak ho použijeme místo milisekund a poté na konci makra „vyskočíme“jeho předchozí hodnotu zpět ze zásobníku.

Čistým výsledkem je, že jsme si „vypůjčili“temp a temp2 na dočasné použití a poté je obnovili na jejich předchozí hodnoty, až skončíme.

Zde je rutina přerušení ADC_int po provedení této změny:

ADC_int:

push temp; uložte teplotu, protože ji zde upravujeme, stiskněte temp2; uložit temp2 lds temp2, ADCH; načíst stisknutí klávesy ldi ZH, vysoká (2*čísla) ldi ZL, nízká (2*čísla) cpi temp2, 0 breq návrat; pokud se spouště šumu nezmění 7segnumber setkey: lpm temp, Z+; zatížení z tabulky a přírůstek clc cp temp2, temp; porovnat stisknutí klávesy s tabulkou brlo PC+4; pokud je ADCH nižší, zkuste to znovu lpm 7segnumber, Z; jinak načíst tabulku hodnoty klíče včetně číslice; zvýší návrat číslice rjmp; a vrátit adiw ZH: ZL, 1; přírůstek Z rjmp setkey; a vrátit se nahoru návrat: pop temp2; obnovit temp2 pop temp; obnovit teplotu reti

Všimněte si toho, že zásobník funguje tak, že první zapnuto je poslední vypnuto. Stejně jako hromada papírů. Vidíte, že v našich prvních dvou řádcích posuneme hodnotu temp na zásobník, poté na temp vložíme temp2, pak je použijeme v podprogramu pro jiné věci a nakonec je znovu obnovíme na předchozí hodnoty nejprve vypnout temp2 (protože to bylo poslední, co se na něj tlačilo, je v horní části zásobníku a bude to první, které vyskočíme) a pak popping temp.

Takže od této chvíle budeme vždy používat tuto metodu. Jediný okamžik, kdy skutečně určíme registr pro něco jiného než dočasnou proměnnou, je, když to budeme potřebovat všude. Například registr s názvem „přetečení“je ten, který používáme na několika různých místech programu, a proto bychom mu chtěli dát název. Samozřejmě bychom to mohli stále používat tak, jak jsme to udělali s temp a temp2, protože bychom po obnovení obnovili jeho hodnotu. Ale to by věci příliš spaghettifikovalo. Jsou pojmenovány z nějakého důvodu a my pro tuto práci již máme určené temp a temp2.

Krok 6: Nízkoprůchodové filtry a zesilovač napětí

Nízkoprůchodové filtry a zesilovač napětí
Nízkoprůchodové filtry a zesilovač napětí
Nízkoprůchodové filtry a zesilovač napětí
Nízkoprůchodové filtry a zesilovač napětí

Abychom trochu vyčistili hluk a lépe fungovali naše klávesnice, chceme přidat několik nízkoprůchodových filtrů. Ty filtrují vysokofrekvenční šum a umožňují průchod nízkofrekvenčního signálu. V zásadě je možné jednoduše přidat kondenzátor 68 pf mezi náš analogový vstup a zem a také kondenzátor 0,1 mikrofarad (tj. 104) mezi naše přerušení PD4 (INT0) a zem. Pokud si s nimi budete hrát a mačkat tlačítka na klávesnici, uvidíte, co dělají.

Dále chceme vyrobit zesilovač napětí. Ukázalo se, že spodní řada kláves na klávesnici (stejně jako klíč pro opakovanou volbu) vydává příliš nízké napětí, aby se aktivovalo přerušení INT0. Analogový port je dostatečně citlivý na čtení nízkých napětí z těchto klíčů, ale náš přerušovací kolík nedostává dostatečně dobrou stoupající hranu, aby mohl přerušit, když tyto klávesy stiskneme. Proto bychom chtěli nějaký způsob, jak zajistit, aby stoupající hrana pěkného napětí zasáhla PD4, ale stejné nízké napětí zasáhlo ADC0. To je docela vysoká objednávka, protože oba signály přicházejí ze stejného výstupního vodiče naší klávesnice. Existuje řada důmyslných způsobů, jak toho dosáhnout, ale po tomto tutoriálu již nebudeme používat naši klávesnici, pojďme tedy jednoduše spojit metodu, která funguje (sotva).

Nejprve byste měli připojit externí tlačítko, které nahradí přerušení INT0, a ovládat displej podržením klávesy na klávesnici a kliknutím na tlačítko. To má méně problémů s klávesnicí a umožní vám být si jisti, že vaše napětí je v tabulce vyhledávání klávesnice správně nastaveno. Jakmile zjistíte, že je klávesnice správně zapojena, zbavte se tlačítka a vraťte přerušení INT0 zpět. Klávesnici tímto způsobem ovládají vážné problémy s hlukem a napětím, takže je dobré vědět, že vše funguje tak, že budoucí problémy lze izolovat pomocí klávesy INT0.

Když zapojíte klávesnici a zesilovač napětí, je velmi pravděpodobné, že stejné hodnoty odporu, které jsem použil, nebudou fungovat. Abyste získali hodnoty, které pro vás fungují, budete muset provést nějaké experimentování.

Když se podíváte na diagram, který jsem připojil k tomuto kroku, uvidíte, jak bude zesilovač napětí fungovat. Používáme některé odpory a dva tranzistory. Fungování tranzistorů (viz datové listy!) Spočívá v tom, že je na vstupním kolíku na tranzistoru (středním pinu) vloženo minimální napětí, které jej nasytí a umožní tok proudu mezi kolektorovým kolíkem a emitorem kolík. V případě tranzistoru 2N3904, který zde používáme, je napětí 0,65V. Nyní odebíráme toto napětí z našeho výstupu z klávesnice a nechceme tento výstup měnit, takže mezi výstup z klávesnice a základnu prvního tranzistoru vložíme velký odpor (použil jsem 1Mohm). V diagramu jsem to označil jako R_1. Potom chceme nastavit dělič napětí tak, aby základna tranzistoru byla „téměř“již na 0,65 voltu a jen malý malinkatý kousek ho zatlačil přes vrchol a nasytil. Ten malý maličký bit bude pocházet z výstupu klávesnice, když stiskneme tlačítko. Protože spodní klávesy na klávesnici vydávají pouze malé napětí, musíme být již velmi blízko k nasycení, aby jich bylo dost. Rezistory děliče napětí jsou na schématu označeny R_a a R_b. Použil jsem R_a = 1Mohm a R_b = 560Kohm, ale je téměř jisté, že si s těmito čísly budete muset pohrát, abyste je správně nastavili. Možná budete chtít mít poblíž zeď, do které si budete bít hlavu, a po ruce dvě nebo tři sklenice skotské (doporučil bych Laphroaig - drahé, ale stojí za to, pokud máte rádi kouř. Pokud se věci opravdu zblázní, pak si pořiďte džbán BV a usadit se na noc)

Nyní se podívejme na to, jak nám tranzistory přivedou pěknou stoupající hranu do klíče INT0 a vygenerují naše přerušení stisknutí klávesy. Nejprve se podívejme na to, co se stane, když nestisknu klávesu. V takovém případě je první tranzistor (na obrázku označený T1) vypnutý. Mezi kolíky kolektoru a emitoru tedy neteče žádný proud. Takže základna druhého tranzistoru (označeného T2) bude vytažena vysoko, a tak bude saturovat, aby proud protékal mezi jeho piny. To znamená, že emitor T2 bude stažen nízko, protože je připojen ke kolektoru, který je sám spojen se zemí. Takže výstup, který jde na náš pin přerušení stisknutí klávesy INT0 (PD4), bude nízký a nedojde k žádnému přerušení.

Co se teď stane, když stisknu klávesu? Pak základna T1 překročí 0,65 V (v případě dolních klíčů se jen stěží dostane nad!) A pak bude moci proudit, což vytáhne základnu T2 na nízké napětí a to vypne T2. Ale vidíme, že když je T2 vypnutý, pak je výstup vytažen vysoko, a proto dostaneme signál 5V směřující na náš pin INT0 a způsobí to přerušení.

Zde si všimněte, jaký je čistý výsledek. Pokud stiskneme klávesu 1, dostaneme 5V na PD4, aniž bychom výrazně změnili výstup na ADC0, a co je důležitější, i když stiskneme Asterisk, 0, Hash nebo Redial, dostaneme také signál 5V na INT0 a také způsobit přerušení! To je důležité, protože pokud bychom přešli přímo z výstupu klávesnice na pin INT0, tyto klíče nevytvářejí téměř žádné napětí a nebudou stačit ke spuštění tohoto přerušovacího pinu. Náš napěťový zesilovač tento problém vyřešil.

Krok 7: 4místný kód zobrazení a video

To je vše pro tutoriál 9! Připojil jsem kód a video ukazující operaci.

Toto bude naposledy, co použijeme analogovou klávesnici (díky bohu). Bylo těžké to použít, ale bylo to také velmi užitečné, aby nám to pomohlo dozvědět se o převodu z analogového na digitální, analogových portech, přerušení, multiplexování, šumových filtrech, napěťových zesilovačích a mnoha aspektech kódování sestav od vyhledávacích tabulek po časovač/čítače atd. Proto jsme se rozhodli toho využít. (a navíc je zábavné věci uklízet).

Nyní se znovu podíváme na komunikaci a přimíme naše 7segmentové a 4místné displeje, aby přečetly naše kostky z našeho kostkového válce stejným způsobem, jako jsme to udělali s naším analyzátorem registrů. Tentokrát použijeme spíše dvouvodičové rozhraní než naši hacknutou metodu Morseova kódu.

Jakmile bude komunikace fungovat a role se objeví na displejích, můžeme konečně vyrobit první kus našeho finálního produktu. Všimněte si, že bez všech věcí z analogových portů bude náš kód výrazně kratší a pravděpodobně lépe čitelný.

Pro ty z vás, kteří jsou ambiciózní. Tady je „projekt“, který byste si mohli vyzkoušet a na který v tuto chvíli určitě máte znalosti, pokud jste do tohoto bodu prošli všemi těmito výukovými programy:

Projekt: Vyrobte si kalkulačku! Použijte náš 4místný displej a naši klávesnici a přidejte externí tlačítko, které bude fungovat jako klávesa „Enter“. Namapujte hvězdičku na „časy“, hash „rozdělte“opakovanou volbu na „plus“a blesk na „mínus“a napište rutinní kalkulačku, která funguje jako jedna z těch starých kalkulaček „reverzního leštění“HP, které měli všichni inženýři zpět ve dne. Tj. fungují tak, že zadáte číslo a stisknete „Enter“. Tím se toto číslo posune na hromádku, poté zadáte druhé číslo a stisknete „Enter“, čímž se druhé číslo posune do zásobníku. Nakonec stisknete jednu z operací, jako je X, /, + nebo - a tato operace se použije na první dvě čísla v zásobníku, zobrazí se výsledek a výsledek se vloží do zásobníku, abyste jej mohli znovu použít, pokud jako. Například pro přidání 2+3 byste udělali: 2, „enter“, 3, „enter“, „+“a na displeji by se pak zobrazilo 5. Víte, jak používat zásobník, displej, klávesnici a vy většina kódu pozadí již byla napsána. Stačí přidat klávesu Enter a podprogramy potřebné pro kalkulačku. Je to trochu složitější, než byste si na první pohled mysleli, ale je to zábavné a proveditelné.

Uvidíme se příště!

Doporučuje: