Mündəricat:
- Addım 1: Saat Bölücünün Qurulması
- Addım 2: Sonlu vəziyyət maşını (FSM) yaratmaq
- Addım 3: Yeddi Segment Ekranının Xəritəçəkilməsi
- Addım 4: Müqayisəçi yaradın
- Addım 5: Taymer qurun
- Addım 6: Yalan Təsadüfi Nömrələr Yaradıcısının Hazırlanması
- Addım 7: Dönüştürücü yaratmaq
- Addım 8: Oyun Modulunda hər şeyi bir araya gətirmək
- Addım 9: Əlavə Problemlər Qarşılaşdı
- Addım 10: Mənbə Faylları və Məhdudiyyətlər
Video: İkili Ondalık Maça Oyunu: 10 addım
2024 Müəllif: John Day | [email protected]. Son dəyişdirildi: 2024-01-30 07:44
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ı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ı, 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
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
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ı
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
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
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ə:
Mikro İkili Saat: 10 addım (şəkillərlə)
Micro Binary Clock: Daha əvvəl ikili istifadə edərək məhdud ekran sahəsindən istifadə edən Instructable (İkili DVM) yaratdıqdan sonra İkili Saat yaratmaq üçün Onludan İkili çevrilmə üçün əsas kod modulunu yaratmış yalnız kiçik bir addım idi
CPE 133 İkili İkili Onlu Final Layihəsi: 5 Addım
CPE 133 Final Projesi İkili İkili: İkili Nömrələr rəqəmsal məntiq düşünərkən ağla gələn ilk şeylərdən biridir. Bununla birlikdə, İkili Nömrələr yeni başlayanlar üçün çətin bir anlayış ola bilər
Aruduino LED Oyunu İki Oyunçu Oyunu Sürətli Tıklayır: 8 Addım
Aruduino LED Oyunu İki Oyunçu Oyunu Sürətli Tıklayaraq: Bu layihə @HassonAlkeim -dən ilhamlanıb. Bura dərindən baxmaq istəsəniz https://www.instructables.com/id/Arduino-Two-Player-Fast-Button-Clicking-Game/ yoxlaya biləcəyiniz bir linkdir. Bu oyun Alkeim -in təkmilləşdirilmiş bir versiyasıdır. Bu bir
İkili Ondalık Kalkulyator: 8 addım
İkili -Ondalık Kalkulyator: On birinci sinif kompüter mühəndisliyi üçün son bir layihəyə qərar verməli oldum. Əvvəlcə nə edəcəyimi bilmirdim, çünki müəyyən aparat komponentlərindən ibarət idi. Bir neçə gündən sonra sinif yoldaşım mənə dörd bitlik əlavəyə əsaslanan bir layihə etməyimi söylədi
İkili keçid oyunu: 6 addım
Binary Switch Oyunu: Ben Heck'in Hex Oyunundan ilhamlandı.Bu, dostlarıma ikili haqqında öyrətmək üçün hazırladığım ikili bir oyundur. Sonda özümü oyaq saxlamaq üçün sinifdə oynayıram. Ekrandakı təsadüfi denary (0-255) və ya onaltılı (0-ff) dəyərləri ikili dəyərlərə çevirirsiniz, sonra bizi