Мазмұны:

Ондық санауыштың екілік санына сәйкес келетін ойын: 10 қадам
Ондық санауыштың екілік санына сәйкес келетін ойын: 10 қадам

Бейне: Ондық санауыштың екілік санына сәйкес келетін ойын: 10 қадам

Бейне: Ондық санауыштың екілік санына сәйкес келетін ойын: 10 қадам
Бейне: 4 FLProg 7сегментті дисплей және есептегіш |ESP32 NodeMCU |Arduino визуалды енгізілген бағдарламалау 2024, Шілде
Anonim
Image
Image
Сағат бөлгішті орнату
Сағат бөлгішті орнату

Бұл нұсқаулық біздің екілік -ондық сәйкестігіне арналған ойынды құру үшін қажетті процесс пен модульдерді көрсетеді. 60 секунд ішінде пайдаланушылар жеті сегментті дисплейде кездейсоқ құрылған ондық сандарды қосқыштарға ауыстырып, болжау түймесімен жіберу арқылы екілік санға аударады және енгізеді. Аяқтағаннан кейін соңғы ұпай көрсетіледі, содан кейін қайтадан ойнауға қалпына келтіріледі.

Екілік және жылдам рефлекстерді түсіну жақсы нәтиже береді, бірақ егер қайта әрекеттену қажет болса, қалпына келтіру түймесі беріледі.

1 -қадам: Сағат бөлгішті орнату

Бұл жобаның негізі осы гизмодағы барлық бөліктерді дұрыс синхрондаудан туындайды. Біздің соңғы күй машинасы ішкі сағатты қолданады, бірақ жеті сегментті дисплей мен таймер сағаттың өзгертілген нұсқасын қолдануы керек.

Бұл «жаңа сағат» әрбір нақты компонент үшін қажетті жиілікке жету үшін ішкі сағатты қажетті кезеңге бөлуден туындайды. Бұл алдыңғы зертханаларда жасалды және тәжірибе бойынша, біз білеміз, таймерде «бірлік» цифры 0,1 Гц, ал «ондықтар» цифры 1 Гц.

Кірістер: ClkIn, бөлгіш (32 биттік)

Шығу: ClkOut

2-қадам: Ақырлы күй машинасын (FSM) құру

Ақырлы күй машинасын (FSM) құру
Ақырлы күй машинасын (FSM) құру
Ақырлы күй машинасын (FSM) құру
Ақырлы күй машинасын (FSM) құру
Ақырлы күй машинасын (FSM) құру
Ақырлы күй машинасын (FSM) құру

Біздің соңғы күйдегі машинада біз бес кіріспен (іске қосу, қалпына келтіру, болжау, тең, күту уақыты) бес күйді (Бастау, Көрсету, Тексеру, Ұпай және Аяқтау) қажет деп шештік. Біздің Мемлекеттік машинадағы жалғыз шығыс - бұл төмендегі күйлерге қатысты пайдаланушының қандай күйде екенін көрсететін (000, 001, 011, 101, 100) 3 биттік сан.

Есіңізде болсын, Ақырлы күй машинасы төмендегі функцияларды алдын ала жасамайды, керісінше ол бағдарламаның қандай күйде және не екенін көрсетеді. Іс жүзінде не болатынын төменде түсіндірілген жоғарғы модуль анықтайды.

Бастапқы күй (000)

Бастапқы күй - бұл пайдаланушы бастапқы кіріс жоғары болғанша басталады, сонымен қатар қалпына келтіру түймесі басылған сайын қол жеткізілетін күй.

Ойын күйі (001)

Ойын күйі - бұл ойынның басы, онда кездейсоқ сан құрылады және пайдаланушы кірісті жасау үшін қосқыштарды ауыстырады. Болжау түймесі басылғаннан кейін ойын тексеру күйіне ауыстырылады.

Тексеру күйі (011)

Бұл күй пайдаланушының енгізген мәндері мен кездейсоқ шығарылған санды салыстыратын компаратор пайдаланылатын жерде. Егер жіберу дұрыс болса, тең мән жоғары және FSM ұпай күйіне өтеді; алайда, егер жіберу қате болса, FSM жіберу дұрыс болғанша Дисплей күйіне қайта оралады.

Бұл тексеру күйі басқалармен салыстырғанда салыстырмалы түрде тез жүреді, себебі бұл тек тексеру түймесі басылғанда ғана болады

Ұпай көрсеткіші (101)

Тең мән жоғары болғандықтан, жіберу дұрыс болды. Бұл жағдайда балл мәні бірге артады және пайдаланушы енгізу үшін жаңа сан пайда болады. Бұл жаңа нөмір бізді бастапқы күйге қайтарады, онда пайдаланушы қайтадан қосқыштарды ауыстырады.

Соңғы күй (100)

60 секундтық таймер аяқталғаннан кейін, күту уақыты жоғары болады және пайдаланушы соңғы балл көрсетілетін соңғы күйге жетеді. Содан кейін қалпына келтіру кірісі басылады және FSM бастапқы күйде қайтадан басталады.

Кірістер: Clk, бірінші, бастау, болжау, тең, күту уақыты

Шығу: күй (3 биттік)

3 -қадам: Жеті сегменттің дисплейін салыстыру

Жеті сегменттің дисплейін бейнелеу
Жеті сегменттің дисплейін бейнелеу
Жеті сегменттің дисплейін бейнелеу
Жеті сегменттің дисплейін бейнелеу
Жеті сегменттің дисплейін бейнелеу
Жеті сегменттің дисплейін бейнелеу

Жеті сегментті дисплей бүкіл жобаның негізгі бөлігі болып табылады, себебі экрандағы алғашқы екі сан кездейсоқ сандар генераторының шығысы ретінде пайдаланылады, ал соңғы екі сан таймер болып табылады. Біз соңғы мысалда экранда цифрлардың болуына қатысты мысал енгізген болсақ та, ол он алтылықта көрсетілді. Бұл мәселені шешу үшін біз төменде толығырақ түсіндірілетін түрлендіргіш пен сағат бөлгішті қолдандық.

Дисплей FSM ойын күйіне енгенше барлық 0 -ді көрсетеді; алайда, соңғы күйде дисплей пайдаланушының ұпайын ғана көрсетуі керек.

Біз жеті сегментті дисплейдің барлық төрт цифрларын қолданатындықтан, біз әрқашан анодты 300 Гц жылдамдықпен айналдыруымыз керек, ол әрқашан жанып тұрған сияқты қабылданады.

Кірістер: Clk, жеті сегмент

Шығу: катодтар (7 биттік), анодтар (4 биттік)

4 -қадам: Салыстырғышты құру

Салыстырғышты құру
Салыстырғышты құру

Бұл қосалқы модуль Тексеру күйінде 7 разрядты екілік енгізілген болжамды ондық мәнмен салыстыру тұрғысынан қолданылады.

Бізде тең мән жоғары немесе төмен екендігіне байланысты кірісті де, шығуды да бағалайтын if операторы болды. Бұл модуль қаншалықты маңызды болса да, бұл жобаны жобалаудың қарапайым бағдарламаларының бірі.

Кірістер: қосқыштар (8 бит), сан (8 бит)

Шығу: EQ

5 -қадам: Таймерді орнату

Таймерді орнату
Таймерді орнату
Таймерді орнату
Таймерді орнату

Біздің таймер - бұл әр түрлі жылдамдықпен өсетін екі түрлі есептегіш. «Бірдің» мәніндегі бір есептегіш, (бірінші жеті сегменттің дисплейі) және «ондықтың» мәні үшін бір есептегіш (жеті сегменттің дисплейінде екінші сан). Әрбір цифр сағаттың көтерілу жиегіне негізделген, ал санауыш 60 секундқа жеткенде, уақыттың ұзақтығы жоғары болады және ойын аяқталып, бастапқы күйге оралады.

Кірістер: Clk, күй (3 бит), бастау

Шығу: ток (8 бит), күту уақыты

6 -қадам: Кездейсоқ сандардың жалған генераторын құру

Кездейсоқ сандардың жалған генераторын құру
Кездейсоқ сандардың жалған генераторын құру

Бұл жағдайда арнайы сандар генераторының тағы бір балама әдісі-бұл кіру жоғары болған кезде есептелетін санды шығаратын 0-99 (екілік) есептегіштің болуы, өйткені бұл LFSR қолдану қажеттілігін жояды.

Нөмір ішкі сағаттың әр көтерілетін жиегін өзгертеді (10 нано-секунд) және барлық 100 санды бір микросекунд ішінде айналдырады. Пайдаланушы сандар генераторынан жаңа нөмір алғысы келгенде, ол сол нөмірді шығарады, Бұл процесс мүлдем кездейсоқ болмаса да, бұл процестен байланысты нәтижелерді табу ықтималдығы жалған кездейсоқтық үшін жеткілікті төмен.

Кірістер: Clk, changenum, тең

Шығу: сан (8 биттік)

7 -қадам: түрлендіргіш құру

Түрлендіргіш құру
Түрлендіргіш құру

Қажетті компонент - бұл конвертер, біз ондық сандарды бастапқы он алтылықтың орнына жеті сегментті дисплейде көрсету үшін қолдандық. Екі сан да 7 биттік екілік санға негізделгеніне қарамастан, біз он алтылықты ондық санау жүйесіне ауыстыруға арналған бүтін модуль құрдық.

Мысалы, егер біздің соңғы нәтиже 0010001 (он жеті) болса, жеті сегменттің дисплейі ондық санның 17 -нің орнына он алтылық мәнді көрсетеді.

Кіріс: Numin (8 биттік)

Шығу: санау (8 биттік)

8 -қадам: Ойын модулінде бәрін біріктіру

Ойын модулінде бәрін біріктіру
Ойын модулінде бәрін біріктіру
Ойын модулінде бәрін біріктіру
Ойын модулінде бәрін біріктіру
Ойын модулінде бәрін біріктіру
Ойын модулінде бәрін біріктіру
Ойын модулінде бәрін біріктіру
Ойын модулінде бәрін біріктіру

Біздің компоненттер үшін пайдаланушы ауысу үшін 0-6 қажетті қосқыштарды қолдандық, үш түймені іске қосу, қалпына келтіру және болжау үшін пайдаланушы кірісі ретінде қолдануға болады. Жеті сегментті дисплей мен сағат компоненттері - біз алдыңғы зертханалардан жасаған компоненттер, бірақ бұл жобаға сәйкес келу үшін өзгертуге тура келді.

Біз бұл жобаны жоғарыда көрсетілген алты модульге бөлдік, ол бүкіл гизмоды көптеген жұмыс бөліктеріне бөледі, алайда олардың қосылу тәсілі өте күрделі және қара жәшіктің суретінен көрсетілген.

Ойын жүріп жатқанда, пайдаланушыға қосылатынын хабарлау үшін 7 жарықдиодты жарық қосылады, ал ойын аяқталған кезде біз де жарықдиодты жарықтандыруды бағдарламаладық.

Кірістер: қосқыштар (8 бит), Clk, қалпына келтіру, бастау, болжау

Шығу: катодтар (7 биттік), анодтар (4 биттік), жарық диодты шамдар (7 биттік)

9 -қадам: Қосымша проблемалар

Бұл ойында тек жеті қосқыш қолданылғанымен, кодта 8 разрядты нөмір бар. Біз бұл кездейсоқ сандар генераторынан 8 биттік санды 8 битпен салыстыратын ыңғайлы компаратор болу үшін жасадық.

Есеп бізге бірінші кезекте біраз қиындық туғызды, себебі біз FSM ұпай күйінде болған кезде оны бір ұпайға жоғарылатамыз; бірақ оның орнына не болды, штат күйде болғанша ұпай өсе берді, бұл бізге негізсіз жоғары балл бере алмады. Біз оны 8 -қадамдағы кодта көрсетілгендей, сағаттың көтерілетін жиегімен синхрондалған импульстік сигналды қосу арқылы шештік.

Ақырында, таймерді жөндеу үшін көп уақыт қажет болды, себебі ол біздің сегіз сегментті дисплейімізді кері санағанда бұрмалайды, сондықтан біз оны 60 -тан кері санаудан 0 -ге дейін өзгертуге мәжбүр болдық.

10 -қадам: бастапқы файлдар мен шектеулер

Егер сіз өзіңіздің жеке файлдарыңызды құрудың орнына біздің бастапқы файлдарымызды алып тастағыңыз келсе, онда олар осында. Сонымен қатар, шектеу файлы қосылады.

Ұсынылған: