INHOUDSOPGAWE:

Die binêre tot desimale matcher -spel: 10 stappe
Die binêre tot desimale matcher -spel: 10 stappe

Video: Die binêre tot desimale matcher -spel: 10 stappe

Video: Die binêre tot desimale matcher -spel: 10 stappe
Video: Электрика в квартире своими руками. Финал. Переделка хрущевки от А до Я. #11 2024, November
Anonim
Image
Image
Stel die klokverdeler op
Stel die klokverdeler op

Hierdie instruksies sal die proses en modules wys wat nodig is om ons binêre tot desimale bypassende spel te skep. Binne 60 sekondes sal gebruikers soveel willekeurig gegenereerde desimale getalle op die sewe segment vertoning in binêre vertaal en invoer deur die skakelaars te skakel en met 'n raaisknoppie in te dien. Sodra dit voltooi is, sal 'n finale telling vertoon word en dan weer begin speel.

Dit is goed om binêre en vinnige reflekse te verstaan, maar die reset -knoppie word verskaf as u onmiddellik weer wil probeer.

Stap 1: Stel die klokverdeler op

Die ruggraat van hierdie hele projek kom van die korrekte sinchronisasie van al die dele in hierdie gizmo. Ons Finite State -masjien gebruik die interne klok, maar die sewe segmentweergawe en timer moet 'n veranderde weergawe van die klok gebruik.

Hierdie 'nuwe klok' kom van die deel van die interne klok deur 'n gewenste tydperk om 'n sekere frekwensie te bereik wat nodig is vir elke spesifieke komponent. Dit is in vorige laboratoriums gedoen en uit ervaring weet ons dat die timer die "een se" syfer op 0,1 Hz het, en die "tiene" syfer die 1 Hz

Invoer: ClkIn, verdeler (32 bis)

Uitsette: ClkOut

Stap 2: Skep 'n Finite-State Machine (FSM)

Die skep van 'n Finite-State Machine (FSM)
Die skep van 'n Finite-State Machine (FSM)
Die skep van 'n Finite-State Machine (FSM)
Die skep van 'n Finite-State Machine (FSM)
Die skep van 'n Finite-State Machine (FSM)
Die skep van 'n Finite-State Machine (FSM)

In ons eindtoestand-masjien het ons besluit dat vyf toestande (begin, vertoning, kontrole, telling en einde) nodig sou wees met vyf insette (begin, herstel, raai, gelyk, time-out). Die enigste uitset in ons staatsmasjien is 'n 3 bis -getal wat verteenwoordig in watter toestand die gebruiker is (000, 001, 011, 101, 100) met betrekking tot die toestande hieronder.

Onthou dat 'n eindige staatsmasjien nie eintlik die funksies hieronder vorm nie, maar dit vertel net in watter toestand die program is en wat. Wat eintlik gebeur, word bepaal deur die topmodule wat hieronder verduidelik word.

Beginstaat (000)

Die begintoestand is waar die gebruiker sal begin totdat die begininvoer hoog is; dit is ook die toestand wat bereik sal word wanneer die resetknoppie ingedruk word.

Game State (001)

Die spelstaat is die begin van die spel, waar die ewekansige getal gegenereer word en die gebruiker die skakelaars skakel om 'n invoer te skep. Sodra die raaisknoppie ingedruk is, word die spel na die tjekstaat oorgeplaas.

Check State (011)

In hierdie toestand word die vergelyker gebruik, wat die waardes van die invoer van die gebruiker en die willekeurig gegenereerde getal sal vergelyk. As die voorlegging korrek is, is die gelyke waarde hoog en gaan die FSM na die tellingstaat; As die voorlegging egter verkeerd is, keer die FSM terug na die vertoonstaat totdat die voorlegging korrek is.

Hierdie tjekstatus gebeur relatief vinnig in vergelyking met die ander, aangesien dit slegs gebeur solank die tjekknoppie ingedruk word

Puntestand (101)

Aangesien die gelyke waarde hoog is, was die indiening korrek. In hierdie toestand sal die tellingwaarde met een toeneem en 'n nuwe nommer word gegenereer wat die gebruiker kan invoer. Hierdie nuwe nommer bring ons terug na die beginstaat waar die gebruiker weer die skakelaars sal skakel.

Eindtoestand (100)

Sodra die tydteller van 60 sekondes op is, sal die insetstyd hoog wees en die gebruiker bereik die eindtoestand waar die eindtelling vertoon word. Die reset -invoer sal dan ingedruk word en die FSM begin weer by die beginstaat.

Insette: Clk, eerste, begin, raai, gelyk, time -out

Uitset: toestand (3 bis)

Stap 3: kartering van die sewe segment -skerm

Die weergawe van die sewe segmente in kaart bring
Die weergawe van die sewe segmente in kaart bring
Die weergawe van die sewe segmente in kaart bring
Die weergawe van die sewe segmente in kaart bring
Die weergawe van die sewe segmente in kaart bring
Die weergawe van die sewe segmente in kaart bring

Die Seven Segment Display is 'n belangrike deel van die hele projek, aangesien die eerste twee syfers op die skerm as die uitset van die ewekansige getalgenerator gebruik word, terwyl die laaste twee syfers die timer is. Alhoewel ons 'n voorbeeld hiervan in die laaste laboratorium geïmplementeer het in terme van syfers op die skerm, is dit in heksadesimaal vertoon. Om hierdie probleem op te los, gebruik ons 'n omskakelaar en klokverdeler wat hieronder verder verduidelik word.

Die skerm wys al die 0's totdat die FSM die spelstoestand betree; in die eindtoestand moet die skerm egter net die gebruiker se telling toon.

Aangesien ons al vier syfers van die sewe segmentskerm gebruik, moet ons vinnig by elke anode by 300 Hz deurblaai om te sien dat dit altyd aangesteek is.

Insette: Clk, sewes segment

Uitsette: katodes (7 bis), anodes (4 bis)

Stap 4: Skep die vergelyking

Die skep van die vergelyker
Die skep van die vergelyker

Hierdie submodule word in die tjekstaat gebruik in terme van die vergelyking van die 7 bis binêre ingevoerde raaiskoot met die werklike desimale waarde.

Ons het 'n if -verklaring wat beide insette en twee uitsette geëvalueer het, afhangend van of die gelyke waarde hoog of laag was. So belangrik soos hierdie module is, is dit verreweg een van die eenvoudiger programme om in hierdie projek te ontwerp.

Insette: skakelaars (8 bis), nommer (8 bis)

Uitset: EQ

Stap 5: Stel 'n timer in

Stel 'n tydopnemer in
Stel 'n tydopnemer in
Stel 'n timer in
Stel 'n timer in

Ons timer is in wese twee verskillende tellers wat teen verskillende snelhede toeneem. Een teller in die "een se" waarde (die eerste sewe segment vertoning) en een teller vir die "tien" waarde (tweede syfer op sewe segment vertoon). Elke syfer is gebaseer op die stygende kant van die klok, en sodra die teller 60 sekondes bereik het, is time_out hoog en die spel eindig en keer terug na die beginstaat.

Insette: Clk, toestand (3 bis), begin

Uitsette: Huidige (8 bis), time -out

Stap 6: Ontwerp die Pseudo Random Number Generator

Ontwerp die Pseudo Random Number Generator
Ontwerp die Pseudo Random Number Generator

'N Ander alternatiewe metode vir 'n getalgenerator wat spesifiek vir hierdie geval is, is om 'n herhalingsteller van 0-99 (in binêre) te hê wat die getelde getal uitset wanneer die inset hoog is, aangesien dit die noodsaaklikheid om 'n LFSR te gebruik, sal verwyder.

Die getal verander elke stygende rand van die interne klok (10 nano-sekondes) en loop deur al 100 getalle in een mikrosekonde. As die gebruiker 'n nuwe nommer van die getalgenerator wil hê, gee dit die nommer waarop dit was, Alhoewel hierdie proses nie heeltemal willekeurig is nie, is die waarskynlikheid om verwante uitsette uit hierdie proses te vind, laag genoeg om pseudo-ewekansig te wees.

Insette: Clk, changenum, gelyk

Uitsette: nommer (8 bis)

Stap 7: Skep 'n omskakelaar

Skep 'n omskakelaar
Skep 'n omskakelaar

'N Noodsaaklike komponent is die omskakelaar, wat ons gebruik het om desimale getalle op die sewesegmentweergawe in plaas van die oorspronklike heksadesimale te vertoon. Alhoewel beide getalle gebaseer is op 'n 7 -bis binêre nommer, het ons 'n hele module geskep wat bedoel is om heksadesimale na desimale om te skakel.

Byvoorbeeld, as ons finale uitset vir die telling 0010001 (sewentien) was, sou die sewe segment vertoning die heksadesimale waarde van 11 toon, in plaas van die desimale getal 17.

Invoer: Numin (8 bis)

Uitset: Numout (8 bis)

Stap 8: Sit alles saam in die spelmodule

Alles in die spelmodule saamvoeg
Alles in die spelmodule saamvoeg
Alles in die spelmodule saamvoeg
Alles in die spelmodule saamvoeg
Alles in die spelmodule saamvoeg
Alles in die spelmodule saamvoeg
Alles in die spelmodule saamvoeg
Alles in die spelmodule saamvoeg

Vir ons komponente gebruik ons die nodige skakelaars 0-6 vir die gebruiker om oor te skakel, met die drie knoppies om op te tree as die gebruikersinvoer vir begin, herstel en raai. Die sewe segmentweergawe- en klokkomponente is ook komponente wat ons uit vorige laboratoriums gedoen het, maar moes verander om by hierdie projek te pas.

Ons het hierdie projek in die ses modules hierbo verdeel om die hele gizmo in baie werkende dele op te deel, maar die manier waarop hulle verbind is, is baie ingewikkeld en word getoon uit die aangehegte swart boks.

Terwyl die spel aan die gang is, brand 7 LED's om die gebruiker in kennis te stel van die gebruik, en as die speletjie eindig, het ons ook LED's geprogrammeer om te flits

Insette: skakelaars (8 bis), Clk, reset, begin, raai

Uitsette: katodes (7 bis), anodes (4 bis), LED's (7 bis)

Stap 9: Ekstra probleme ondervind

Alhoewel slegs sewe skakelaars in hierdie speletjie gebruik word, het die kode dit as 'n 8 bis -nommer gestel. Ons het dit gedoen om 'n meer gerieflike vergelyker te hê wat hierdie 8 bisse sou vergelyk met die 8 bis getal wat ons gegenereer het uit die ewekansige getalgenerator.

Die telling het ons aanvanklik ook 'n bietjie moeilikheid gegee, want ons het daarop ingestel om een punt te verhoog toe die FSM in die staat was; Maar wat gebeur het, was dat die telling aanhou toeneem solank die staat aan die gang was, wat ons 'n onredelik hoë telling gee wat ons nie kon hanteer nie. Ons het dit reggestel deur 'n polssignaal by te voeg wat gesinchroniseer is met die stygende kant van die klok, soos gesien in die kode in stap 8.

Uiteindelik het die timer baie tyd geneem om te ontfout, aangesien dit ons sewe segment -vertoning sou verdraai wanneer dit aftel, sodat ons dit moes verander van aftel van 60 na tel van 0.

Stap 10: Bronlêers en beperkings

As u eerder uit ons bronlêers wil trek in plaas van u eie te skep, is dit hier. Die beperkingslêer is ook ingesluit.

Aanbeveel: