Mündəricat:

İkili Ondalık Maça Oyunu: 10 addım
İkili Ondalık Maça Oyunu: 10 addım

Video: İkili Ondalık Maça Oyunu: 10 addım

Video: İkili Ondalık Maça Oyunu: 10 addım
Video: Okul voleybol maçından 😅🫣 Tuana Zeybek #shorts #short #sports #tuanazeybek 2024, Noyabr
Anonim
Image
Image
Saat Bölücünün Qurulması
Saat Bölücünün Qurulması

Bu təlimat, İkili Ondalık Uyğunlaşdırma oyunumuzu yaratmaq üçün lazım olan prosesi və modulları göstərəcək. 60 saniyə ərzində istifadəçilər yeddi seqment ekranındakı təsadüfi olaraq yaradılan ondalık sayını açarları dəyişdirərək bir tahmin düyməsi ilə təqdim edərək ikilikə çevirəcək və daxil edəcəklər. Tamamlandıqdan sonra yekun hesab göstəriləcək və sonra yenidən oynamaq üçün sıfırlanacaq.

İkili və sürətli refleksləri yaxşı başa düşmək faydalıdır, ancaq yenidən cəhd etmək istədikdə sıfırlama düyməsi verilir.

Addım 1: Saat Bölücünün Qurulması

Bütün bu layihənin onurğası, bu gizmodakı bütün hissələrin düzgün sinxronizasiyasından qaynaqlanır. Sonlu Vəziyyət Maşınınız daxili saatı istifadə edir, ancaq yeddi seqmentli ekran və taymer saatın dəyişdirilmiş versiyasından istifadə etməlidir.

Bu "yeni saat", hər bir xüsusi komponent üçün lazım olan müəyyən bir tezliyə çatmaq üçün daxili saatı istədiyiniz müddətə bölməkdən gəlir. Bu, əvvəlki laboratoriyalarda edilmiş və təcrübə əsasında bilirik ki, taymerin "birinin" rəqəmi 0,1 Hz -ə, "onlarla" rəqəmi isə 1 Hz -ə bərabərdir.

Girişlər: ClkIn, bölücü (32 bit)

Çıxışlar: ClkOut

Addım 2: Sonlu vəziyyət maşını (FSM) yaratmaq

Sonlu vəziyyət maşını (FSM) yaratmaq
Sonlu vəziyyət maşını (FSM) yaratmaq
Sonlu vəziyyət maşını (FSM) yaratmaq
Sonlu vəziyyət maşını (FSM) yaratmaq
Sonlu vəziyyət maşını (FSM) yaratmaq
Sonlu vəziyyət maşını (FSM) yaratmaq

Sonlu Vəziyyət Maşınımızda, beş girişlə (başlanğıc, sıfırlama, təxmin, bərabər, zaman aşımı) beş vəziyyətin (Başlat, Göstər, Yoxla, Skor və Son) lazım olduğuna qərar verdik. State Machine -dəki yeganə çıxış, istifadəçinin aşağıdakı vəziyyətlərə görə (000, 001, 011, 101, 100) hansı vəziyyətdə olduğunu göstərən 3 bitlik bir rəqəmdir.

Unutmayın ki, Sonlu Vəziyyət Maşını aşağıdakı funksiyaları əvvəlcədən hazırlamır, bunun əvəzinə proqramın hansı vəziyyətdə olduğunu və nə olduğunu bildirir. Əslində nə baş verdiyini aşağıda izah edilən üst modul təyin edir.

Başlanğıc Vəziyyəti (000)

Başlanğıc vəziyyəti, istifadəçinin başlanğıc girişi yüksək olana qədər başlayacağı yerdir, eyni zamanda sıfırlama düyməsinə basıldıqda əldə ediləcək vəziyyətdir.

Oyun vəziyyəti (001)

Oyun vəziyyəti, təsadüfi ədədin yarandığı və istifadəçinin giriş yaratmaq üçün açarları dəyişdiyi oyunun başlanğıcıdır. Tahmin düyməsinə basıldıqdan sonra oyun yoxlama vəziyyətinə keçir.

Vəziyyəti yoxlayın (011)

Bu vəziyyət, istifadəçinin girişinin dəyərlərini və təsadüfi olaraq yaradılan ədədləri müqayisə edəcək müqayisənin istifadə edildiyi yerdir. Təqdimat düzgündürsə, bərabər dəyər yüksəkdir və FSM Hesab Vəziyyətinə keçir; lakin, əgər təqdimat səhv olarsa, FSM, təqdimat düzgün olana qədər Ekran vəziyyətinə qayıdır.

Bu Çek Vəziyyəti digərləri ilə müqayisədə nisbətən tez baş verir, çünki bu yalnız çek düyməsinə basıldığı müddətdə baş verir

Puan Vəziyyəti (101)

Bərabər dəyər yüksək olduğu üçün təqdimat düzgün idi. Bu vəziyyətdə, hesab dəyəri bir artacaq və istifadəçinin daxil etməsi üçün yeni bir rəqəm yaradılacaq. Bu yeni nömrə bizi istifadəçinin açarları yenidən dəyişdirəcəyi Başlanğıc vəziyyətinə qaytarır.

Son vəziyyət (100)

60 saniyəlik taymer bitdikdə, zaman aşımı girişi yüksək olacaq və istifadəçi son hesabın göstərildiyi Son vəziyyətə çatacaq. Sıfırlama girişinə basılacaq və FSM yenidən Başlanğıc vəziyyətində yenidən başlayacaq.

Girişlər: Clk, ilk, başlan, təxmin et, bərabər, zaman aşımı

Çıxış: vəziyyət (3 bit)

Addım 3: Yeddi Segment Ekranının Xəritəçəkilməsi

Yeddi Segment Ekranının Xəritəçəkilməsi
Yeddi Segment Ekranının Xəritəçəkilməsi
Yeddi Segment Ekranının Xəritəçəkilməsi
Yeddi Segment Ekranının Xəritəçəkilməsi
Yeddi Segment Ekranının Xəritəçəkilməsi
Yeddi Segment Ekranının Xəritəçəkilməsi

Yeddi Segment Ekranı, bütün layihənin əsas hissəsidir, çünki ekrandakı ilk iki rəqəm təsadüfi ədəd generatorunun çıxışı olaraq istifadə olunur, son iki rəqəm isə taymerdir. Son bir laboratoriyada bunun rəqəmini ekranda rəqəmlər baxımından tətbiq etsək də, onaltılı olaraq göstərildi. Bu problemi həll etmək üçün aşağıda daha ətraflı izah ediləcək bir çevirici və saat ayırıcıdan istifadə etdik.

FSM oyun vəziyyətinə girənə qədər ekranda bütün 0 göstərilir; lakin, son vəziyyətdə, ekran yalnız istifadəçinin hesabını göstərməlidir.

Yeddi seqmentli ekranın dörd rəqəminin hamısını istifadə etdiyimiz üçün, hər an işıqlandığı kimi qəbul edilmək üçün hər anoddan 300 Hz -də kifayət qədər tez keçməliyik.

Girişlər: Clk, seqment

Çıxışlar: katodlar (7 bit), anodlar (4 bit)

Addım 4: Müqayisəçi yaradın

Müqayisənin yaradılması
Müqayisənin yaradılması

Bu alt modul, Check State -də 7 bitlik ikili daxil edilmiş təxminləri faktiki onluq dəyərlə müqayisə etmə baxımından istifadə olunur.

Bərabər dəyərin yüksək və ya aşağı olub olmamasından asılı olaraq həm girişi, həm də iki çıxışı qiymətləndirən if ifadəmiz var idi. Bu modul nə qədər əhəmiyyətli olsa da, bu layihədə dizayn etmək ən sadə proqramlardan biridir.

Girişlər: açarlar (8 bit), nömrə (8 bit)

Çıxış: EQ

Addım 5: Taymer qurun

Taymer qurmaq
Taymer qurmaq
Taymer qurmaq
Taymer qurmaq

Taymerimiz, əslində fərqli nisbətlərdə artan iki fərqli sayğacdır. "Birinin" dəyərində bir sayğac, (ilk yeddi seqment göstəricisi) və "onun" dəyəri üçün bir sayğac (yeddi seqment ekranındakı ikinci rəqəm). Hər bir rəqəm saatın yüksələn kənarına əsaslanır və sayğac 60 saniyəyə çatdıqda, zaman sonu yüksək olacaq və oyun bitəcək və başlanğıc vəziyyətinə qayıdacaq.

Girişlər: Clk, vəziyyət (3 bit), başlayın

Çıxışlar: Cari (8 bit), zaman aşımı

Addım 6: Yalan Təsadüfi Nömrələr Yaradıcısının Hazırlanması

Yalançı təsadüfi ədədlər generatorunun dizaynı
Yalançı təsadüfi ədədlər generatorunun dizaynı

Xüsusi olaraq bu vəziyyət üçün bir ədəd generatoru üçün başqa bir alternativ üsul, LFSR istifadə etmə ehtiyacını aradan qaldıracağı üçün giriş yüksək olduqda sayılan nömrəni çıxaran 0-99 (ikili olaraq) arasında təkrar sayğacın olmasıdır.

Nömrə daxili saatın hər yüksələn kənarını (10 nano-saniyə) dəyişir və bir mikrosaniyədə 100 ədədin hamısında dövr edir. İstifadəçi nömrə generatorundan yeni bir nömrə istədikdə, olduğu nömrəni çıxarır, Bu proses tamamilə təsadüfi olmasa da, bu prosesdən əlaqəli nəticələr tapmaq ehtimalı yalançı təsadüfi olmaq üçün kifayət qədər aşağıdır.

Girişlər: Clk, changenum, bərabər

Çıxışlar: sayı (8 bit)

Addım 7: Dönüştürücü yaratmaq

Dönüştürücü yaratmaq
Dönüştürücü yaratmaq

Lazımi bir komponent, orijinal onaltılıq əvəzinə yeddi seqmentli ekranda ondalık ədədləri göstərmək üçün istifadə etdiyimiz Dönüştürücüdür. Hər iki rəqəm 7 bitlik ikili rəqəmə əsaslansa da, onaltılı rəqəmi onluğa çevirmək üçün nəzərdə tutulmuş bütöv bir modul yaratdıq.

Məsələn, hesab üçün son nəticəmiz 0010001 (on yeddi) olsaydı, yeddi seqmentli ekran 17 -nin ondalık sayı əvəzinə 11 -in onaltılıq dəyərini göstərərdi.

Giriş: Numin (8 bit)

Çıxış: Sayı (8 bit)

Addım 8: Oyun Modulunda hər şeyi bir araya gətirmək

Oyun Modulunda hər şeyi bir araya gətirmək
Oyun Modulunda hər şeyi bir araya gətirmək
Oyun Modulunda hər şeyi bir araya gətirmək
Oyun Modulunda hər şeyi bir araya gətirmək
Oyun Modulunda hər şeyi bir araya gətirmək
Oyun Modulunda hər şeyi bir araya gətirmək
Oyun Modulunda hər şeyi bir araya gətirmək
Oyun Modulunda hər şeyi bir araya gətirmək

Komponentlərimiz üçün, istifadəçinin işə salması, sıfırlaması və təxmin etməsi üçün istifadə olunan üç düymə ilə keçid etməsi üçün lazım olan 0-6 açarlarından istifadə etdik. Yeddi seqmentli ekran və saat komponentləri də əvvəlki laboratoriyalardan etdiyimiz, lakin bu layihəyə uyğunlaşmaq üçün dəyişdirməli olduğumuz komponentlərdir.

Gizmənin bir çox iş parçasına bölünməsi üçün bu layihəni yuxarıda göstərilən altı modula böldük, lakin onların bağlanma yolu olduqca mürəkkəbdir və əlavə edilmiş qara qutu şəkildən göstərilir.

Oyun baş verərkən istifadəçiyə bildiriş vermək üçün 7 LED yanır və oyun bitdikdə LED -lərin yanıb sönməsini də proqramlaşdırdıq.

Girişlər: açarlar (8 bit), Clk, sıfırla, başla, təxmin et

Çıxışlar: katodlar (7 bit), anodlar (4 bit), LEDlər (7 bit)

Addım 9: Əlavə Problemlər Qarşılaşdı

Bu oyunda yalnız yeddi açar istifadə olunsa da, kodda 8 bitlik bir nömrə olaraq təyin edilmişdir. Bu 8 biti təsadüfi ədədlər generatorundan istehsal etdiyimiz 8 bit ədədlə müqayisə edəcək daha əlverişli bir müqayisə aparatına sahib olmaq üçün etdik.

FSM hesab vəziyyətində olduqda bir xal artırmağı təyin etdiyimiz üçün hesab da əvvəlcə bizə bir az problem verdi; Ancaq bunun əvəzinə baş verənlər, vəziyyətin davam etdiyi müddətdə hesabın artmaqda davam etməsi, bizə başa düşə bilməyəcəyimiz əsassız yüksək bir nəticə verməsi idi. 8 -ci addımdakı kodda göründüyü kimi, saatın yüksələn kənarı ilə sinxronlaşdırılan bir nəbz siqnalı əlavə edərək bunu düzəltdik.

Nəhayət, sayğac yeddi seqmentli ekranı geri sayarkən təhrif edəcəyi üçün düzəliş etmək çox vaxt aldı, buna görə onu 60 -dan geri saymaqdan 0 -a qədər saymaqla dəyişdirmək məcburiyyətində qaldıq.

Addım 10: Mənbə Faylları və Məhdudiyyətlər

Öz faylınızı yaratmaq əvəzinə mənbə sənədlərimizdən çıxarmaq istəsəniz, buradalar. Ayrıca, məhdudiyyət faylı daxil edilir.

Tövsiyə: