Sisukord:

AVR Assembleri õpetus 9: 7 sammu
AVR Assembleri õpetus 9: 7 sammu

Video: AVR Assembleri õpetus 9: 7 sammu

Video: AVR Assembleri õpetus 9: 7 sammu
Video: Программирование AVR на языке Ассемблер, часть 5 1"Бегущие огни" 2024, Juuli
Anonim
AVR Assembleri õpetus 9
AVR Assembleri õpetus 9

Tere tulemast juhendisse 9.

Täna näitame, kuidas juhtida nii 7-segmendilist kui ka neljakohalist ekraani, kasutades meie ATmega328P ja AVR koostamise keelekoodi. Seda tehes peame muutma, kuidas virna kasutada, et vähendada siduvate registrite arvu. Lisame paar kondensaatorit (madalpääsfiltrit), et proovida klahvistiku müra vähendada. Loome paarist transistorist pingevõimendi, et meie INT0 katkestuslüliti toimiks paremini klaviatuuri alumisel real asuvate madalama pinge nuppude jaoks. Ja me lööme oma pead natuke vastu seina, püüdes saada õiged takistid, et asi korralikult töötaks.

Kasutame oma juhendaja 7 klahvistikku

Selle õpetuse tegemiseks vajate lisaks standardsetele asjadele:

  1. 7-segmendiline ekraan

    www.sparkfun.com/products/8546

  2. 4-kohaline ekraan

    www.sparkfun.com/products/11407

  3. Nupp

    www.sparkfun.com/products/97

  4. Ekraani andmelehed, mida saab alla laadida vastavatelt ülaltoodud linkidelt.
  5. 68 pf keraamiline kondensaator, paar 104 kondensaatorit, hunnik takisteid, kaks 2N3904 NPN transistorit.

Siin on link minu AVR-i komplekteerija õpetuste kogu kogumikule:

Samm: 7-segmendilise ekraani ühendamine

7-segmendilise ekraani juhtmestik
7-segmendilise ekraani juhtmestik
7-segmendilise ekraani juhtmestik
7-segmendilise ekraani juhtmestik
7-segmendilise ekraani juhtmestik
7-segmendilise ekraani juhtmestik

Kasutame sama koodi, mida kasutasime 7-segmendilise ekraani juhtimiseks klaviatuuri jaoks. Nii et peate sellest koopia tegema ja me muudame seda.

Me kaardistame segmendid meie mikrokontrolleri tihvtidele järgmiselt:

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

kus joonisel on näidatud segmentide tähed koos tavalisele 5 V pinupostile ja igale LED -segmendile, sealhulgas koma (dp) ekraani paremas alanurgas. Selle põhjuseks on asjaolu, et saame kogu numbri sisestada ühte registrisse ja väljastada, mis registreerib sadamadesse B ja D, et valgustada segmente. Nagu näete, on bitid nummerdatud järjestikku vahemikus 0 kuni 7 ja seega kaardistatakse need õigete tihvtidena, ilma et oleks vaja eraldi bitte seadistada ja kustutada.

Nagu näete järgmises etapis lisatud koodist, oleme kolinud oma kuvamisrutiini makrosse ja vabastanud SDA- ja SCL -tihvtid edaspidiseks kasutamiseks järgmises juhendis.

Peaksin lisama, et peate ekraani ühise anoodi ja 5V rööpa vahele asetama takisti. Valisin tavapäraselt 330 oomi takisti, kuid kui soovite, võite arvutada minimaalse takistuse, mis on vajalik ekraani maksimaalse heleduse saamiseks ilma seda praadimata. Siin on, kuidas seda teha.

Vaadake esmalt andmelehte ja pange tähele, et esimesel lehel annab see ekraani erinevaid omadusi. Olulised suurused on "Edasivool" (I_f = 20mA) ja "Edasipinge" (V_f = 2,2V). Need ütlevad, et soovite, et pingelangus ekraanil oleks, kui vool on võrdne edasivooluga. See on maksimaalne vool, mida ekraan võtab ilma praadimiseta. Järelikult on see ka maksimaalne heledus, mille saate segmentidest välja tuua.

Nii et kasutame Ohmi seadust ja Kirchoffi silmusreeglit, et välja selgitada, millist minimaalset takistust peaksime ekraaniga järjestikku panema, et saada maksimaalne heledus. Kirchoffi reegel ütleb, et ahela suletud ahela ümber olevate pingete muutuste summa on null ja Ohmi seadus ütleb, et pingelangus takistuse R takistil on: V = I R, kus I on takisti läbiv vool.

Arvestades allika pinget V ja meie ahela ümber käies, on meil:

V - V_f - I R = 0

mis tähendab (V - V_f)/I = R. Seega oleks maksimaalse heleduse (ja tõenäoliselt segmentide praadimise) saavutamiseks vajalik takistus järgmine:

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

Nii et kui soovite, võite muretult kasutada 150 oomi. Kuid ma arvan, et 140 oomi muudab selle minu jaoks liiga heledaks ja seetõttu kasutan 330 oomi (mis on omamoodi minu isiklik LED -lampide kullakindluse takistus)

Samm: kokkupanekukood ja video

Lisasin kokkupanekukoodi ja video, mis näitavad ekraaniga klaviatuuri tööd. Nagu näete, oleme lihtsalt valinud kordusvalimise klahvi "r", välkklahv "F", tärn "A" ja räsimärk "H". Neid saab kaardistada erinevateks toiminguteks, nagu tagasilükkeklahv, sisestusklahv ja mida mitte, kui soovite jätkata klaviatuuri kasutamist numbrite sisestamiseks LCD-ekraanile või neljakohalisele ekraanile. Seekord ma koodi rida-realt läbi ei vaata, kuna see on väga sarnane sellele, mida oleme juba eelmistes õpetustes teinud. Erinevused on peamiselt lihtsalt samad asjad, mida me juba teame, nagu katkestused ja otsingulauad. Peaksite lihtsalt koodi läbi vaatama ja vaatama uusi asju, mida oleme lisanud ja asju, mida oleme muutnud, ja leidma selle sealt välja. Järgmises õpetuses naaseme rida-realt analüüsi juurde, kui tutvustame AVR-i mikrokontrollerite koostamiskeele kodeerimise uusi aspekte.

Vaatame nüüd neljakohalist ekraani.

Samm: 4-kohalise ekraani ühendamine

4-kohalise ekraani juhtmestik
4-kohalise ekraani juhtmestik
4-kohalise ekraani juhtmestik
4-kohalise ekraani juhtmestik

Andmelehe kohaselt on neljakohalise ekraani suunavool 60 mA ja edasipinge 2,2 volti. Niisiis, sama arvutuse järgi nagu varem, saaksin soovi korral kasutada 47 oomi takistit. Selle asemel kasutan… hrm.. las ma vaatan… kuidas oleks umbes 330 oomi.

Neljakohalise ekraani juhtmestik seisneb selles, et seal on 4 anoodi, üks iga numbri jaoks ja teised tihvtid kontrollivad, milline segment igasse sisse lülitatakse. Saate korraga kuvada 4 numbrit, kuna need on multipleksitud. Teisisõnu, täpselt nagu täringupaari puhul, lülitame võimsuse kordamööda läbi iga anoodi ja see vilgutab neid üksteise järel. See teeb seda nii kiiresti, et meie silmad ei näe vilkumist ja tundub, et kõik neli numbrit on peal. Kuid selleks, et olla kindel, kodeerime nii, et seame kõik neli numbrit ja seejärel tsükeldame anoodid, mitte ei seadista, liiguta, seadista, liiguta jne. Nii saame iga numbri süttimise vahel täpse aja.

Praegu testime, kas kõik segmendid töötavad.

Asetage oma 330 oomi takisti leivalaua positiivse rööpa ja ekraani esimese anoodi vahele. Andmeleht ütleb meile, et tihvtid on nummerdatud 1 kuni 16 vastupäeva, alustades vasakust allservast (kui vaatate kuvarit tavaliselt.. ja kümnendkohad allosas) ning seal on kirjas, et anoodid on tihvtid 6, 8, 9 ja 12.

Nii et me ühendame tihvti 6 kuni 5 V ja võtame seejärel teie GND rööbastelt negatiivse juhtme ja pistame selle kõigi teiste tihvtidega ja näeme, et kõik segmendid süttivad sellele vastavale numbrile (mis on tegelikult teine number õigus). Veenduge, et kõik 7 segmenti ja kümnendkoht süttivad.

Nüüd kleepige oma GND traat ühte tihvti, et süttib üks segmentidest, ja seekord viige takisti ümber kolmele teisele anoodile ja vaadake, et sama segment süttib igal teisel numbril.

Midagi ebatavalist?

Selgub, et andmelehe pinout on vale. Selle põhjuseks on asjaolu, et see on 12-pin, 4-kohalise ekraani andmeleht ja pinout. S.t. üks ilma käärsoole või ülemise kümnendkohata. Ekraan, mille sain tellimisel, on 16-pin, 4-kohaline ekraan. Tegelikult on minu segmendi anoodid tihvtidel 1, 2, 6 ja 8. Käärsooleanood on tihvt 4 (katooditihvt 12) ja ülemine dp -anood on tihvt 10 (katood on tihvt 9).

Harjutus 1: kasutage oma takistit ja maandusjuhet, et kaardistada, milline tihvt vastab kuval olevale segmendile ja kümnendkohale, nii et saame kodeerimisel õiged segmendid.

Segmendikaardi kodeerimise viis on täpselt selline, nagu ülaltoodud ühekohalise 7-segmendilise kuvariga-me ei pea koodis midagi muutma, muudame vaid juhtmete ühendamise viisi tahvlil. Lihtsalt ühendage mikrokontrolleri õige pordi tihvt 4-kohalise ekraani vastava tihvtiga, nii et näiteks PB0 läheb ikkagi segmendile a vastavale tihvtile, PB1 segmendile B jne.

Ainus erinevus on see, et nüüd vajame anoodide jaoks 4 lisatihvti, kuna me ei saa enam lihtsalt 5 V rööpale minna. Vajame mikrokontrollerit, et otsustada, milline number mahla saab.

Seega kasutame nelja numbri anoodide juhtimiseks PC1, PC2, PC3 ja PD4.

Samuti võite minna ja ühendada juhtmed. (ärge unustage anoodjuhtmete 330 oomi takistit!)

Samm: neljakohalise ekraani kodeerimine

4-kohalise ekraani kodeerimine
4-kohalise ekraani kodeerimine

Mõelgem sellele, kuidas me tahame seda ekraani kodeerida.

Soovime, et kasutaja vajutaks klahvistiku nuppe ja numbrid ilmuksid ekraanile järjest, kui nad iga nuppu vajutavad. Nii et kui vajutan 1, millele järgneb 2, kuvatakse see ekraanil numbrina 12. Samuti sooviksin selle väärtuse 12 salvestada sisekasutuseks, kuid jõuame selleni veidi hiljem. Praegu tahan lihtsalt kirjutada uue makro, mis võtab teie klahvivajutused ja kuvab need. Kuna meil on ainult 4 numbrit, tahan veenduda, et see võimaldab teil sisestada ainult neli numbrit.

Teine probleem on see, et multipleksitud 4-kohaline kuva töötab anoodide tsükliga, nii et iga number on sisse lülitatud vaid sekundi murdosa, enne kui see kuvab järgmise ja seejärel järgmise ning lõpuks uuesti esimese juurde jne. vaja seda koodi kodeerida.

Samuti soovime, et järgmise numbri sisestamisel liigutaks kursor paremale tühiku. Nii et kui ma tahan näiteks sisestada numbri 1234, siis pärast 1 sisestamist liigub kursor üle, nii et järgmine 7-segmendilisele ekraanile ilmub järgmine tüüp, mida ma sisestan ja nii edasi. Kogu selle aja vältel tahan ikkagi näha, mida olen tippinud, nii et see peab ikkagi olema numbrite jalgrattasõit ja nende kuvamine.

Kõlab nagu kõrge tellimus?

Asjad on tegelikult veel hullemad. Vajame nelja üldisemat registrit, mida saaksime kasutada kuvatavate nelja numbri praeguste väärtuste salvestamiseks (kui kavatseme need läbi vaadata, peame need kuskil hoidma) ja probleem on selles, et meil on kasutanud hullupööra üldotstarbelisi registreid ja kui me ei hooli sellest, siis pole meil enam midagi. Seega on ilmselt hea mõte selle probleemiga varem või hiljem tegeleda ja näidata, kuidas registreid virna abil vabastada.

Alustame siis asjade lihtsustamisega veidi, kasutame virna ja vabastame mõned registrid ning proovime siis täita ülesande lugeda ja kuvada oma numbrid 4-kohalisel ekraanil.

Samm 5: Push 'n Pop

Push 'n Pop
Push 'n Pop

Meie käsutuses on vaid mõned üldotstarbelised registrid ja kui neid on kasutatud, pole neid enam. Seega on hea programmeerimistava kasutada neid ainult paari muutuja jaoks, mida kasutatakse ajutise salvestusruumina, mida vajate portidest ja SRAM -ist lugemiseks ja nendesse kirjutamiseks või nendega, mida vajate alamprogrammides kõikjal ja nii nimetage neid. Nüüd, kui oleme initsialiseerinud ja õpime pinu kasutama, olen ma teinud koodi läbi ja leidnud nimega üldotstarbelised registrid, mida kasutatakse ainult ühe alamprogrammi sees või katkestatakse ja kusagil mujal koodis ei asendata. neid ühe meie ajutise registriga ning tõuke ja popiga virna. Tegelikult, kui vaatate väiksematele mikrokontrolleritele kirjutatud koodi või kui lähete ajas tagasi, kui kõik kiibid olid väiksemad, näete ainult paari üldotstarbelist registrit, mida tuli kasutada kõige jaoks, nii et te ei saanud seda teha lihtsalt salvestage sinna väärtus ja jätke see rahule, kuna teil oli seda registrit kindlasti vaja muude asjade jaoks. Nii näete koodis kõikjal tõukamist ja hüppamist. Võib -olla oleksin pidanud nimetama meie ajutisi üldotstarbelisi registreid AX ja BX nende lugupidavateks tunnustusteks neile möödunud päevadele.

Näide aitab seda selgemaks teha.

Pange tähele, et meie analoog -digitaalse konversiooni täielikul katkestamisel ADC_int kasutame üldotstarbelist registrit nimega buttonH, mida kasutasime ADCH väärtuse laadimiseks ja võrdlemiseks analoog -nupuvajutuste konversioonitabeli abil. Kasutame seda nuppuH registrit ainult alamprogrammis ADC_int ja mitte kusagil mujal. Nii et selle asemel kasutame oma muutujat temp2, mida kasutame ajutise muutujana, mida saame kasutada mis tahes antud alamprogrammis ja selle väärtus ei mõjuta midagi väljaspool seda alamprogrammi (st väärtust, mille me sellele ADC_int'is anname, ei kasutata kusagil muidu).

Teine näide on meie viivitusmakro. Meil on register, mille oleme nimetanud "millisekundiks", mis sisaldab meie viivitusaega millisekundites. Sel juhul on see makro ja me tuletame meelde, et makro töö on see, et monteerija paigutab kogu makrokoodi programmi kohta, kus seda kutsutakse. Sel juhul soovime vabaneda muutujast "millisekundid" ja asendada see mõne meie ajutise muutujaga. Sel juhul teen seda natuke teisiti, et näidata teile, kuidas isegi siis, kui muutuja väärtust on mujal vaja, saame seda virna kasutades siiski kasutada. Nii et millisekundite asemel kasutame "temp" ja selleks, et me ei keeraks muid asju, mis kasutavad ka temp väärtust, alustame lihtsalt "delay" makroga, lükates temp virnale, seejärel kasutame seda millisekundite asemel ja siis makro lõpus "poputame" selle eelmise väärtuse virnast tagasi.

Tulemuseks on see, et oleme ajutiseks kasutamiseks "laenanud" temp ja temp2 ning taastanud need, kui oleme lõpetanud.

Siin on ADC_int katkestusrutiin pärast selle muudatuse tegemist:

ADC_int:

survetemperatuur; salvestage temp, kuna muudame seda siin, vajutage temp2; salvesta temp2 lds temp2, ADCH; laadige klahvivajutus ldi ZH, kõrge (2*numbrit) ldi ZL, madal (2*numbrit) cpi temp2, 0 breq return; kui müra vallandajad ei muutu 7 -numbriline seadistusklahv: lpm temp, Z+; laadimine lauast ja postituse juurdekasv clc cp temp2, temp; võrrelda klahvivajutust lauaga brlo PC+4; kui ADCH on madalam, proovige uuesti lpm 7segnumber, Z; muidu laadige võtmeväärtuste tabel koos numbriga; juurdekasvu numbri number rjmp return; ja tagasipöördumine ZH: ZL, 1; juurdekasv Z rjmp setkey; ja mine tagasi algusesse tagasi: pop temp2; taastada temp2 pop temp; taastada temp pension

Pange tähele, et virna töötab nii, et esimene sisselülitamine on viimane. Täpselt nagu paberipakk. Näete, et meie kahes esimeses reas lükkame tempile väärtuse virnale, seejärel lükkame temp2 virnale, seejärel kasutame neid alamprogrammis muudeks asjadeks ja lõpuks taastame need uuesti nende endistele väärtustele. esmalt temp2 väljalülitamine (kuna see oli viimane, millele see lükati, on virna ülaosas ja see on esimene, mille me tagasi tõmbame) ja seejärel temp.

Nii et edaspidi kasutame seda meetodit alati. Ainus kord, kui me tegelikult määrame registri millegi muu kui temp muutuja jaoks, on see, kui me vajame seda kõikjal. Näiteks registrit nimega "ülevoolud" kasutame programmis mitmes erinevas kohas ja seega tahaksime sellele nime anda. Muidugi saaksime seda siiski kasutada nii nagu temp ja temp2, kuna taastasime selle väärtuse pärast seda, kui oleme lõpetanud. Kuid see teeks asju liiga palju. Neid nimetatakse põhjusel ja meil on selle töö jaoks juba määratud temp ja temp2.

6. samm: madalpääsfiltrid ja pingevõimendi

Madalpääsfiltrid ja pingevõimendi
Madalpääsfiltrid ja pingevõimendi
Madalpääsfiltrid ja pingevõimendi
Madalpääsfiltrid ja pingevõimendi

Müra pisut puhastamiseks ja klahvistiku paremaks toimimiseks soovime lisada paar madalpääsfiltrit. Need filtreerivad välja kõrgsagedusliku müra ja lasevad läbi madala sagedusega signaali. Põhimõtteliselt on selleks vaja lihtsalt lisada 68 pf kondensaator meie analoogsisendi ja maanduse vahele ning ka 0,1 mikrofarad (st 104) kondensaator meie PD4 (INT0) katkestuse ja maanduse vahele. Kui mängite nendega klahvistiku nuppe vajutades ringi, näete, mida nad teevad.

Järgmisena tahame teha pingevõimendi. Selgub, et klahvistiku alumine rida (ja ka kordusvalimisklahv) annavad INT0 katkestuse käivitamiseks liiga madala pinge. Analoogport on piisavalt tundlik, et lugeda nende klahvide madalaid pingeid, kuid meie katkestusnupp ei saa nende klahvide vajutamisel katkestamiseks piisavalt head tõusvat serva. Seetõttu soovime mingil viisil veenduda, et kena pinge tõusvas serv tabab PD4, kuid sama madalpinge tabab ADC0. See on üsna pikk tellimus, kuna mõlemad signaalid pärinevad meie klaviatuuri samast väljundjuhtmest. Selleks on mitmeid keerukaid viise, kuid pärast seda õpetust ei kasuta me enam oma klahvistikku, seega ühendagem kokku meetod, mis töötab (vaevalt).

Esmalt peaksite ühendama välise nupu, et asendada INT0 katkestus ja juhtida ekraani, hoides klahvistikul klahvi ja klõpsates nuppu. Sellel on vähem klaviatuuriprobleeme ja see võimaldab teil olla kindel, et pinge on klahvistiku tabelis õigesti seadistatud. Kui teate, et klaviatuur on õigesti ühendatud, vabanege nupust ja pange INT0 katkestus tagasi. Klaviatuuri sel viisil juhtides on tõsiseid müra- ja pingeprobleeme, nii et on hea teada, et kõik toimib nii, et tulevased probleemid saab eraldada INT0 -klahviga.

Klaviatuuri ja pingevõimendi ühendamisel on väga tõenäoline, et samad takisti väärtused, mida olen kasutanud, ei tööta. Nii et peate oma väärtuste saamiseks proovima.

Kui vaatate skeemi, mille olen sellele sammule lisanud, näete, kuidas pingevõimendi töötab. Kasutame mõnda takistit ja kahte transistorit. Transistoride tööpõhimõte (vt andmelehti) on minimaalne pinge, mille peate sisestama transistri (keskmine tihvt) baasnõelale, mis küllastab selle ja võimaldab voolu koguja tihvti ja kiirguri vahel tihvt. Siin kasutatava 2N3904 transistori puhul on pinge 0,65 V. Nüüd võtame selle pinge klahvistiku väljundist ja me ei taha seda väljundit muuta, nii et paneme klaviatuuri väljundi ja esimese transistori aluse vahele suure takisti (ma kasutasin 1Mohm). Olen selle skeemil märgistanud kui R_1. Siis tahame seadistada pingejaguri nii, et transistori põhi oleks juba peaaegu 0,65 volti juures ja ainult väike nipet -näpet pisut üle selle suruks ja üle küllastuks. See väike nipike tuleb klahvistiku väljundist, kui vajutame nuppu. Kuna klaviatuuri alumised klahvid väljastavad vaid väikest pinget, peame küllastuse saavutamiseks olema juba väga lähedal, et neist piisaks. Pingejaguri takistid on skeemil tähistatud R_a ja R_b. Ma kasutasin R_a = 1Mohm ja R_b = 560Kohm, kuid on peaaegu kindel, et peate nende numbritega mängima, et see seadistamiseks õigesti sobida. Võib -olla soovite, et teie lähedal oleks sein, mille vastu pead põrutada, ja kaks või kolm klaasi šotti käepärast (ma soovitaksin Laphroaigi - kallis, kuid see on seda väärt, kui teile meeldib suits. Kui asi läheb tõesti hulluks, siis võtke lihtsalt kann BV -st ja elama ööseks)

Nüüd vaatame, kuidas transistorid toovad meile kena tõusva serva INT0 klahvile ja genereerivad meie klahvivajutuse katkestuse. Kõigepealt vaatame, mis juhtub siis, kui ma ei vajuta klahvi. Sel juhul on esimene transistor (skeemil märgitud T1) välja lülitatud. Seega ei voola kollektorite ja emitteri tihvtide vahel voolu. Seega tõmmatakse teise transistori (märgistusega T2) alus kõrgele ja see küllastub, võimaldades voolul liikuda tihvtide vahel. See tähendab, et T2 emitter tõmmatakse madalale, kuna see on ühendatud kollektoriga, mis ise on maapinnaga ühendatud. Seega väljund, mis läheb meie INT0 klahvivajutuse katkestusnõelale (PD4), on madal ja katkestusi ei toimu.

Mis nüüd juhtub, kui vajutan klahvi? Noh, siis läheb T1 alus üle 0,65 V (alumiste klahvide puhul läheb see vaevalt kõrgemale!) Ja siis lastakse voolata, mis tõmbab T2 aluse madalale pingele ja see lülitab T2 välja. Kuid me näeme, et kui T2 on välja lülitatud, tõmmatakse väljund kõrgele ja seega saame 5 V signaali meie INT0 kontaktile ja see põhjustab katkestuse.

Pange tähele, milline on siin puhas tulemus. Kui vajutame klahvi 1, saame 5 V, mis läheb PD4 -le, muutmata oluliselt väljundit, mis läheb ADC0 -le, ja mis veelgi olulisem, isegi kui vajutame tärni, 0, räsimist või kordusvalimist, saame ka 5V signaali INT0 -le ja ka põhjustab katkestusi! See on oluline, sest kui me läheksime otse klahvistiku väljundist INT0 kontakti, ei tekita need klahvid peaaegu mingit pinget ja need ei ole piisavad selle katkestusnupu käivitamiseks. Meie pingevõimendi on selle probleemi lahendanud.

Samm: 4-kohaline kuvar ja video

See on kõik õpetuse 9 jaoks! Lisasin koodi ja video, mis näitab toimingut.

See on viimane kord, kui kasutame analoogklaviatuuri (jumal tänatud). Seda oli raske kasutada, kuid see oli ka väga kasulik, et aidata meil õppida tundma analoog-digitaalmuundamist, analoogporde, katkestusi, multipleksimist, mürafiltreid, pingevõimendeid ja paljusid montaaži kodeerimise aspekte, alates otsingulaudadest kuni taimerite/loenduriteni. jne. Seetõttu otsustasime seda kasutada. (lisaks on lõbus kraami koristada).

Nüüd vaatame uuesti suhtlust ja saame oma 7-segmendilise ja neljakohalise kuvari lugeda meie täringurullidelt saadud täringurullid samamoodi, nagu seda tegime registrianalüsaatoriga. Seekord kasutame kahejuhtmelist liidest, mitte meie häkkinud morsekoodi meetodit.

Kui meil on kommunikatsioon töökorras ja rullid kuvatakse ekraanidel, saame lõpuks teha oma lõpptoote esimese tüki. Märkate, et ilma kõigi analoogpordivärkideta muutub meie kood oluliselt lühemaks ja tõenäoliselt hõlpsamini loetavaks.

Neile, kes on ambitsioonikad. Siin on "projekt", mida võiksite proovida, et teil oleks kindlasti teadmisi, mida teha, kui olete kõik need õpetused siiani läbi teinud:

Projekt: Tehke kalkulaator! Kasutage meie neljakohalist ekraani ja klaviatuuri ning lisage väline nupuvajutus, mis toimib nagu sisestusklahv. Kaardistage tärn "aegade", räsi "kordusvalimise" jagamiseks "pluss" ja välk "miinuseks" ning kirjutage kalkulaatoriprogramm, mis toimib nagu üks neist vanadest HP "vastupidise poleerimise" kalkulaatoritest, mis olid kõigil inseneridel vanasti. S.t. nad töötavad nii, et sisestate numbri ja vajutate sisestusklahvi. See lükkab selle numbri virnale, seejärel sisestate teise numbri ja vajutate sisestusklahvi, mis surub teise numbri virnale. Lõpuks vajutate ühte toimingutest nagu X, /, + või - ja see rakendab selle toimingu virna kahele ülemisele numbrile, kuvab tulemuse ja lükkab tulemuse virnale, et saaksite seda uuesti kasutada meeldib. Näiteks 2+3 lisamiseks tehke järgmist: 2, "enter", 3, "enter", "+" ja ekraanil kuvatakse 5. Te teate, kuidas virna, ekraani, klahvistikku ja suurem osa taustast on juba kirjutatud. Lihtsalt lisage sisestusklahv ja kalkulaatori jaoks vajalikud alamprogrammid. See on natuke keerulisem, kui esmapilgul arvata võite, kuid see on lõbus ja teostatav.

Näeme järgmine kord!

Soovitan: