جدول المحتويات:

لعبة المطابق الثنائي إلى العشري: 10 خطوات
لعبة المطابق الثنائي إلى العشري: 10 خطوات

فيديو: لعبة المطابق الثنائي إلى العشري: 10 خطوات

فيديو: لعبة المطابق الثنائي إلى العشري: 10 خطوات
فيديو: تحدي مين يصنع أفضل لعبة في سكراتش !؟ ( مع أخوي الصغير 😂! ) 2024, شهر نوفمبر
Anonim
Image
Image
إعداد مقسم الساعة
إعداد مقسم الساعة

سيُظهر هذا التوجيه العملية والوحدات النمطية المطلوبة لإنشاء لعبة المطابقة الثنائية إلى العشرية. في غضون 60 ثانية ، سيقوم المستخدمون بترجمة وإدخال أكبر عدد من الأرقام العشرية التي تم إنشاؤها عشوائيًا على عرض الأجزاء السبعة إلى ثنائي عن طريق تبديل المفاتيح وإرسالها باستخدام زر التخمين. بمجرد الانتهاء ، سيتم عرض النتيجة النهائية ثم إعادة تعيينها للعب مرة أخرى.

يعد فهم ردود الفعل الثنائية والسريعة مفيدًا للقيام بعمل جيد ، ولكن يتم توفير زر إعادة الضبط في حالة رغبة المرء في المحاولة مرة أخرى على الفور.

الخطوة 1: إعداد مقسم الساعة

يأتي العمود الفقري لهذا المشروع بأكمله من المزامنة الصحيحة لجميع الأجزاء في هذه الأداة. تستخدم آلة الحالة المحدودة الخاصة بنا الساعة الداخلية ، لكن يجب أن يستخدم جهاز عرض المقاطع السبعة والمؤقت نسخة معدلة من الساعة.

تأتي هذه "الساعة الجديدة" من تقسيم الساعة الداخلية على الفترة المطلوبة للوصول إلى تردد معين مطلوب لكل مكون محدد. تم إجراء ذلك في المعامل السابقة ومن التجربة ، نعلم أن جهاز ضبط الوقت يحتوي على رقم "الشخص" مضبوطًا على 0.1 هرتز ، وأن رقم "العشرات" هو 1 هرتز

المدخلات: ClkIn ، المقسوم عليه (32 بت)

المخرجات: ClkOut

الخطوة 2: إنشاء آلة الحالة المحدودة (FSM)

إنشاء آلة الحالة المحدودة (FSM)
إنشاء آلة الحالة المحدودة (FSM)
إنشاء آلة الحالة المحدودة (FSM)
إنشاء آلة الحالة المحدودة (FSM)
إنشاء آلة الدولة المحدودة (FSM)
إنشاء آلة الدولة المحدودة (FSM)

في آلة الحالة المحدودة ، قررنا أن خمس حالات (البداية ، العرض ، التحقق ، النتيجة ، النهاية) ستكون ضرورية مع خمسة مدخلات (بدء ، إعادة تعيين ، تخمين ، متساوي ، مهلة). الناتج الوحيد في State Machine الخاص بنا هو رقم 3 بت يمثل حالة المستخدم في (000 ، 001 ، 011 ، 101 ، 100) فيما يتعلق بالحالات أدناه.

تذكر أن آلة الحالة المحدودة لا تقوم في الواقع بتشكيل الوظائف أدناه ، بل إنها تخبر فقط الحالة التي يعمل بها البرنامج وماذا. يتم تحديد ما يحدث بالفعل من خلال الوحدة العليا الموضحة أدناه.

حالة البداية (000)

حالة البدء هي المكان الذي سيبدأ فيه المستخدم حتى يصبح إدخال البداية مرتفعًا ، وهذه أيضًا هي الحالة التي سيتم الوصول إليها عند الضغط على زر إعادة الضبط.

حالة اللعبة (001)

حالة اللعبة هي بداية اللعبة ، حيث يتم إنشاء الرقم العشوائي ويقوم المستخدم بتبديل المفاتيح لإنشاء إدخال. بمجرد الضغط على زر التخمين ، يتم نقل اللعبة إلى Check State.

تحقق من الدولة (011)

هذه الحالة هي المكان الذي يتم فيه استخدام المقارنة ، والتي ستقارن قيم مدخلات المستخدم والرقم الذي تم إنشاؤه عشوائيًا. إذا كان التقديم صحيحًا ، تكون القيمة المتساوية عالية وتذهب ولايات ميكرونيزيا الموحدة إلى حالة النتيجة ؛ ومع ذلك ، إذا كان الإرسال غير صحيح ، يعود FSM مرة أخرى إلى "حالة العرض" حتى يتم التقديم الصحيح.

تحدث حالة التحقق هذه بسرعة نسبيًا مقارنة بالآخرين ، حيث إنها تحدث فقط طالما يتم الضغط على زر الاختيار

حالة النتيجة (101)

نظرًا لأن القيمة المتساوية عالية ، كان الإرسال صحيحًا. في هذه الحالة ، ستزداد قيمة النتيجة بمقدار واحد وسيتم إنشاء رقم جديد للمستخدم لإدخاله. يعيدنا هذا الرقم الجديد إلى حالة البدء حيث سيقوم المستخدم مرة أخرى بتبديل المفاتيح.

حالة النهاية (100)

بمجرد انتهاء عداد 60 ثانية ، سيكون إدخال المهلة مرتفعًا ويصل المستخدم إلى حالة النهاية حيث يتم عرض النتيجة النهائية. سيتم بعد ذلك الضغط على إدخال إعادة الضبط وتبدأ FSM من جديد في حالة البدء مرة أخرى.

المدخلات: Clk، rst، start، guess، equating، timeout

الإخراج: حالة (3 بت)

الخطوة 3: تعيين عرض الأجزاء السبعة

تعيين عرض الشرائح السبعة
تعيين عرض الشرائح السبعة
تعيين عرض الشرائح السبعة
تعيين عرض الشرائح السبعة
تعيين عرض الأجزاء السبعة
تعيين عرض الأجزاء السبعة

يعد عرض الأجزاء السبعة جزءًا أساسيًا من المشروع بأكمله حيث يتم استخدام أول رقمين على الشاشة كناتج لمولد الأرقام العشوائية ، في حين أن آخر رقمين هما المؤقت. على الرغم من أننا قمنا بتنفيذ مثال على ذلك في المعمل الأخير من حيث وجود أرقام على الشاشة ، فقد تم عرضه بالنظام الست عشري. لإصلاح هذه المشكلة ، استخدمنا محولًا ومقسمًا للساعة موضحًا بمزيد من التفصيل أدناه.

تعرض الشاشة جميع 0's حتى تدخل FSM في حالة اللعبة ؛ ومع ذلك ، في الحالة النهائية ، يجب أن تعرض الشاشة درجة المستخدم فقط.

نظرًا لأننا نستخدم جميع الأرقام الأربعة لشاشة المقاطع السبعة ، فنحن بحاجة إلى الدوران عبر كل أنود بسرعة كافية عند 300 هرتز حتى يتم إدراكنا على أنها مضاءة دائمًا.

المدخلات: Clk، Sevensegment

المخرجات: كاثودات (7 بت) ، أنودات (4 بت)

الخطوة 4: إنشاء المقارنة

إنشاء المقارنة
إنشاء المقارنة

تُستخدم هذه الوحدة الفرعية في حالة الفحص من حيث كيفية مقارنة التخمين المُدخل الثنائي ذي 7 بتات مع القيمة العشرية الفعلية.

كان لدينا عبارة if التي قيمت كلاً من المدخلات والمخرجات اعتمادًا على ما إذا كانت القيمة المتساوية عالية أم منخفضة أم لا. على الرغم من أهمية هذه الوحدة ، فهي إلى حد بعيد واحدة من أبسط البرامج التي يتم تصميمها في هذا المشروع.

المداخل: مفاتيح (8 بت) ، رقم (8 بت)

المخرجات: EQ

الخطوة 5: إعداد المؤقت

إعداد الموقت
إعداد الموقت
إعداد الموقت
إعداد الموقت

عداد الوقت لدينا هو في الأساس عدادات مختلفة تزداد بمعدلات مختلفة. عداد واحد في قيمة "واحد" ، (عرض الأجزاء السبعة الأولى) وعداد واحد لقيمة "العشرة" (الرقم الثاني على شاشة عرض سبعة أجزاء). يعتمد كل رقم على الحافة الصاعدة للساعة ، وبمجرد وصول العداد إلى 60 ثانية ، سيكون time_out مرتفعًا وستنتهي اللعبة وتعود إلى حالة البداية.

المدخلات: Clk، state (3 bit)، start

المخرجات: التيار (8 بت) ، المهلة

الخطوة 6: تصميم مولد الأرقام العشوائية الزائفة

تصميم مولد الأرقام العشوائية الزائفة
تصميم مولد الأرقام العشوائية الزائفة

هناك طريقة بديلة أخرى لمولد الأرقام خصيصًا لهذه الحالة وهي الحصول على عداد متكرر من 0-99 (في ثنائي) يقوم بإخراج الرقم المحسوب عندما يكون الإدخال مرتفعًا ، حيث سيؤدي ذلك إلى التخلص من الحاجة إلى استخدام LFSR.

يغير الرقم كل حافة صاعدة للساعة الداخلية (10 نانو ثانية) ويدور خلال جميع الأرقام المائة في ميكرو ثانية واحدة. كلما أراد المستخدم رقمًا جديدًا من منشئ الأرقام ، فإنه يقوم بإخراج الرقم الذي كان عليه ،

على الرغم من أن هذه العملية ليست عشوائية تمامًا ، إلا أن احتمال العثور على المخرجات ذات الصلة من هذه العملية منخفض بما يكفي لتكون شبه عشوائية.

المدخلات: Clk ، changenum ، متساوية

المخرجات: عدد (8 بت)

الخطوة 7: إنشاء محول

إنشاء محول
إنشاء محول

أحد المكونات الضرورية هو المحول ، والذي استخدمناه لعرض الأرقام العشرية على شاشة سبعة أجزاء بدلاً من النظام السداسي العشري الأصلي. على الرغم من أن كلا الرقمين يعتمدان على رقم ثنائي 7 بت ، فقد أنشأنا وحدة كاملة مخصصة لتحويل النظام السداسي عشري إلى رقم عشري.

على سبيل المثال ، إذا كان ناتجنا النهائي للنتيجة هو 0010001 (سبعة عشر) ، فإن عرض الأجزاء السبعة سيُظهر القيمة السداسية العشرية التي تبلغ 11 ، بدلاً من الرقم العشري 17.

الإدخال: Numin (8 بت)

الإخراج: Numout (8 بت)

الخطوة 8: وضع كل شيء معًا في وحدة اللعبة

وضع كل شيء معًا في وحدة اللعبة
وضع كل شيء معًا في وحدة اللعبة
وضع كل شيء معًا في وحدة اللعبة
وضع كل شيء معًا في وحدة اللعبة
وضع كل شيء معًا في وحدة اللعبة
وضع كل شيء معًا في وحدة اللعبة
وضع كل شيء معًا في وحدة اللعبة
وضع كل شيء معًا في وحدة اللعبة

بالنسبة لمكوناتنا ، استخدمنا المفاتيح الضرورية من 0 إلى 6 ليقوم المستخدم بالتبديل ، مع الأزرار الثلاثة لتكون بمثابة مدخلات المستخدم لبدء التشغيل وإعادة الضبط والتخمين. تعد مكونات العرض السبعة ومكونات الساعة أيضًا مكونات قمنا بها من المعامل السابقة ولكن كان علينا تغييرها لتلائم هذا المشروع.

قمنا بتقسيم هذا المشروع إلى ست وحدات موضحة أعلاه لتقسيم الأداة بأكملها إلى العديد من أجزاء العمل ، ومع ذلك ، فإن الطريقة التي يتم توصيلها بها معقدة للغاية وتظهر من صورة الصندوق الأسود المرفقة.

أثناء حدوث اللعبة ، تضاء 7 مصابيح LED لإعلام المستخدم بالتبديل إلى الاستخدام ، وعندما تنتهي اللعبة ، قمنا أيضًا ببرمجة مصابيح LED على الفلاش

المدخلات: مفاتيح (8 بت) ، Clk ، إعادة تعيين ، بدء ، تخمين

المخرجات: كاثودات (7 بت) ، أنودات (4 بت) ، مصابيح LED (7 بت)

الخطوة 9: المشاكل الإضافية التي تمت مواجهتها

على الرغم من استخدام سبعة مفاتيح فقط في هذه اللعبة ، إلا أن الكود قد تم تعيينه كرقم 8 بت. لقد فعلنا ذلك من أجل الحصول على مقارنة أكثر ملاءمة تقارن هذه 8 بتات مع رقم 8 بت الذي أنشأناه من مولد الأرقام العشوائية.

أعطتنا النتيجة أيضًا بعض المتاعب في البداية لأننا حددناها لزيادة نقطة واحدة عندما كانت FSM في حالة النتيجة ؛ لكن ما حدث بدلاً من ذلك هو أن النتيجة استمرت في الزيادة طالما كانت الولاية قائمة ، مما يمنحنا درجة عالية بشكل غير معقول لم نتمكن من التعامل معها. أصلحنا ذلك عن طريق إضافة إشارة نبضية متزامنة مع الحافة الصاعدة للساعة ، كما هو موضح في الكود في الخطوة 8.

أخيرًا ، استغرق الموقت وقتًا طويلاً لتصحيح الأخطاء لأنه سيؤدي إلى تشويه عرض الأجزاء السبعة عند العد التنازلي ، لذلك كان علينا تغييره من العد التنازلي من 60 إلى العد التصاعدي من 0.

الخطوة 10: ملفات المصدر والقيود

إذا كنت تفضل الانسحاب من ملفاتنا المصدر بدلاً من إنشاء ملفاتك الخاصة ، فإليك هذه الملفات. أيضا ، يتم تضمين ملف القيد.

موصى به: