Мазмұны:
- 1 -қадам: Шіркін
- 2 -қадам: Дилердің қолма -қол ақшаны көрсету
- 3 -қадам: Бағдарламаның құрылымы
- 4 -қадам: Негізгі байланыс коды
- 5 -қадам: Қорытынды код және бейне
Бейне: AVR Assembler оқулығы 11: 5 қадам
2024 Автор: John Day | [email protected]. Соңғы өзгертілген: 2024-01-30 10:22
11 -оқулыққа қош келдіңіз!
Бұл қысқа оқулықта біз ақырында жобамыздың бірінші бөлігін салғалы отырмыз.
Біріншіден, бұл оқулықтың соңғы кезеңіне өтіп, бейнені қарау керек. Содан кейін осында қайтыңыз. [сіз мұны істеп тұрғанда кідіртіңіз.] Жарайды. Енді жалғастырыңыз.
Егер сіз әлі болжамаған болсаңыз, біз Craps ойынын құрып жатырмыз! Әрине, мен тек ойын ойнап жатырмын, бұл сізге керек дегенді білдірмейді. Бұл айтпаса да болады деп үміттенемін. Кез келген жағдайда сегменттелген дисплейлерді басқару үшін микроконтроллерлерді қолдану және бір -бірімен байланысу пайдалы - бұл негізінен біз осында істеп жатырмыз. Сіз кез келген жағдайда оларды пайдалану үшін код жаза аласыз. Әзірге мен оларды сықақ ойнауға кодтаймын, бірақ кейінірек сегменттелген дисплейлерді басқа нәрсеге өзгертуді шеше аламын.
Мен мұны салған себебім, менің ойымша, менің үйдің жертөлесіндегі «адам үңгірінде» толық өлшемді Вегас үстелін алғым келеді. Дегенмен, менің достарымның ешқайсысы ставкалар мен орамдарды қалай шешуге, ұпай алуға немесе төлеуге болатынын білмейді. Мен үстелдің біздегі барлық дилерлік жұмысты орындауы жақсы болар еді деп ойладым! Біз столға ставка қойған кезде, біздің чиптер орналасқан жерді көрсететін квадраттың жанындағы кішкене батырманы басуға болады, содан кейін микроконтроллер текшелер оралғаннан кейін сол квадрат үшін төлемді есептей алады. Мен бұл аспектіні қалай ұйымдастыратынымды әлі білмеймін. Менің ойымша, әр адамнан кез келген ойыншыны кезекпен орналастыруды сұрайды, осылайша контроллер келесі ойыншыны жазбас бұрын әр адамның ақшасы қайда екенін жазады. Орамнан кейін компьютер әр шаршыдағы төлемдерді көрсете алады, сонымен қатар әр ойыншы үшін «жалпы ақшаны» сақтай алады.
Бұл оқулықтың мұқабалық суреттерінің бірі үшін мен осы жазда Вегастағы покер үстелінде 5 эйс тартатын суретімді қолдануға тура келді. Хехе. Мені қуантыңыз.
Міне менің AVR құрастырушы оқулықтарының толық жинағына сілтеме:
1 -қадам: Шіркін
Бұл оқулықта біз тек соңғы Craps ойынының қарапайым бөлігін құрамыз. Бұл «Pass Line» деп аталады және сіз оған ставка жасай аласыз. Сіз осы қадамға қосқан 2 минуттық нұсқаулық бейнені қарау арқылы ойынның «өту сызығы» бөлігі туралы білуге болатын барлық нәрсені біле аласыз.
Біз тағы 4 таңбалы дисплей құрамыз, ол Дилердің қолма-қол ақшасын есепке алады, дәл қазіргі 4 таңбалы дисплейде Ойыншының ақшасы есепке алынады. Дилер 20 доллардан басталады, ал ойыншы 20 доллардан басталады (ойындағы мүмкін болатын ақша-9999 доллар-біздің 4 таңбалы дисплейлердің максимумы, бірақ бізге ойынның бірінші бөлігі үшін тек 20 доллар қажет болады. Уақыт өте келе жеңу немесе жоғалту өте қиын болады). Егер ойыншы дилердің барлық ақшасын алса, ойыншы жеңеді. Егер ойыншы барлық ақшасын жоғалтса, дилер жеңеді.
Ақшаны қалай ұтуға немесе жоғалтуға болады? Craps ойнаған, көшеде «сүйек ататын» адамдарды көрген немесе Вегастағы казиноға қарсы ойнағанын көргендер біледі. Қалғандарыңыз үшін, бүгін біз кодтайтын ойынның «өту сызығы» бөлігінің қысқаша сипаттамасын берейін.
Крапс крест жорықтары кезінде пайда болған жүздеген жылдар бойы ойналды. Оны Екінші дүниежүзілік соғыстың траншеясындағы әскерлер ойнады, көшеде ойнады, оны казино мен ойын залдарында ойнады. Ол тек өту жолынан басталды, ал қалған нәрселердің бәрі кейінірек қосылды. Біз осы прогресті ұстанатын боламыз.
Өткізу сызығының жұмыс істеу әдісі - бұл. Сіз ставка қоясыз, содан кейін сүйектерді айналдырасыз. Бірінші орам «шығатын орам» деп аталады. Егер сіз шығатын роликте 2 (жылан көзі), 3 (ace deuce) немесе 12 (қорапты автокөліктер) алсаңыз, сіз ставкаңызды жоғалтып аласыз және оны «крапс» деп атайды. Егер сіз 7 (натурал) немесе 11 (йо немесе йо-левен) дөңгелетсеңіз, сіз ұтасыз. Егер сіз басқа нөмірді айналдырсаңыз, онда бұл нөмір сіздің «нүктеңізге» айналады. «Нүкте» орнатылғаннан кейін сіз 7 -ге оралмас бұрын ұпайға қайта жету үшін сүйектерді айналдыруды жалғастырасыз. Егер сіз 7 -ге дейін ұпай жинасаңыз, сіз тіпті ақша ұтып аласыз. Осылайша долларлық ставка сізге дилерден бір доллар ұтады. Егер сіз ұпай жиналмай тұрып 7 алсаңыз, бұл «жеті» деп аталады және сіз дилерге бәсіңізді жоғалтасыз.
Осыдан кейін сіз қайтадан бастайсыз. Өткізу сызығына ставка қойыңыз және ұтыс ойынында 7 немесе 11 жеңіс, 2, 3 немесе 12 жеңіліс.
«Өткізбе», «коэффициентті өткізбе», «коэффициентті жіберме», «ставкаға кел», «ставкаға келме», «өріс», «мүйіз», «ставкалардың басқа да көптеген түрлері бар. қиын жолдар », т.б т.б.. Толық ақпаратты мына жерден таба аласыз:
kk.wikipedia.org/wiki/Craps
Жоғарыда айтқанымдай, әзірге біз тек ойынның өту бөлігін ғана кодтайтын боламыз, ол кезде балалар бір -біріне түскі ас үшін қабырғаға сүйек лақтырып жатқан кезде ғана болды, сондықтан біз осы жерден бастаймыз..
Дегенмен, біз заттарды кодтауды бастамас бұрын, сатушыға ақша дисплейін құруға рұқсат етіңіз. Ол үшін мен Sparkfun немесе басқа жерден алуға болатын үлкен 4 таңбалы дисплейлердің бірін қолданғым келеді. Енді мен бұл оқулықтар бойынша материалдарды тізбектемеймін. Егер сіз менімен бірге бәрін құрған болсаңыз, онда сіз материалдарды қайдан алу керектігін білесіз. Мен оларды тізімдеу немесе олардың бағасы қанша екені мағынасыз.
Келіңіздер, біздің дисплейді басқару үшін прототиптеу тақталарының бірін, үлкен 4 таңбалы дисплейді, басқа ATmega328p алып, оны біз сүйек ролигінде және ойнатқыштың дисплейінде жасағандай құрастырамыз. Біз сондай -ақ басқалар сияқты қуат, бағдарламалау және TWI байланысы үшін тақырыптарды бекітеміз.
2 -қадам: Дилердің қолма -қол ақшаны көрсету
Біз дилерлік дисплейді соңғы оқулықтағы ойыншының 4 таңбалы дисплейінде дәл осылай құрамыз. Жалғыз айырмашылығы - ол үлкенірек және түйреуіштері аз, сондықтан біз оны басқаша реттеп, сыммен қосатын боламыз.
Мен осы дисплейдің сымдарының суретін тіркедім. Сіз оның біздің дисплейге қарағанда үлкенірек және түйреуіштері аз екенін көре аласыз. Сурет менде дисплей бар спаркфун бетінен алынған және ол әр цифр үшін қандай түйреуіштердің қуаты бар екенін және сегменттердің әрқайсысын цифрмен басқаратын түйреуіштерді көрсетеді.
Әдеттегідей, сіз дисплейді прототиптеу тақтасына қосудан бастауыңыз керек және оның қалай қосылғанын түсіну үшін әр сегментті сынап көріңіз. Содан кейін сіз оны тақтадағы AVR микроконтроллерінің түйреуіштеріне байланыстырып, осы нұсқаулықта біздің барлық код жұмыс істемейінше, сол жерден іске қосуыңыз керек. Ақыр соңында, сіз сыртқы тақтаны салып, оны дәнекерлеуіңіз керек. Содан кейін сіз түпкілікті өнімді сынақтан өткізгенде, сізде қандай да бір проблемалар кодтан емес, дәнекерлеу және кесу жұмыстарынан болатынын білесіз. Сондай -ақ, ұсталықтан белгілі аксиоманы «екі рет өлшеп, бір рет кесуді» ұмытпаңыз, немесе тақталар жасалған жағдайда: «екі рет кесіңіз, бір рет дәнекерлеңіз». Суреттен көріп отырғаныңыздай, мен ақыры істен шығып, осындай жұмыс үшін тамаша Dremel қондырмасын сатып алдым. «Алмаз нүктесі жиынтығы». Бұл 5 долларды құрады, бірақ бұл менің кесу жұмысымды қатарынан бірнеше рет төмендетуге әкелетін ашуды басқару терапиясының құнынан әлдеқайда аз.
Мен бұл дисплей үшін 330 Ом резисторларды қолданамын. COM түйреуіштері резистор арқылы GND -ге өтеді және қуат сіз көрсеткіңіз келетін сегментке өтеді. Мен PC0 арқылы PC3 арқылы COM түйреуіштері үшін және сегменттер үшін PB0, PB1, PB2, PB3, PB4, PD5, PD6 және PD7 үшін PC0 арқылы қолданамын.
Міне, оны дұрыс алу мүмкіндігін жоғарылатудың кілті:
- тізбекті картаға салыңыз
- тізбекті кесіңіз
- сымдарды тексеріңіз
- резисторларды, қақпақтарды және кристалды осцилляторды бекітіңіз
- қосылымдар мен сымдарды қайтадан тексеріңіз
- сыртқы сымдарды бекітіңіз
- микроконтроллерді қосыңыз
- сымдарды қайтадан тексеріңіз
- 4 таңбалы дисплейді бекітіңіз
- әр цифрды тақтадан жұп сымдармен тексеріңіз
- оны кейінге қойып, кодты жазыңыз, мүмкін сіз кейінірек нәрселерді өзгертуге тура келетінін білесіз және сіз үзуді қажет ететін қосылымды жасырмадыңыз деп үміттенесіз.
Мен сыммен жұмыс туралы суреттер сериясын көрсеттім. Өзіңіздің қалаған жолыңызбен сыммен байланыса алатындығыңызды біліңіз. Сіз маған қарағанда жақсы картаны таба аласыз және сіз оны пайдалануыңыз керек. Бұл оқулықтардағы ештеңе сіздің шығыс порттары дұрыс болғанша, сіздің компоненттеріңіздің қалай сымдалғанына байланысты емес. Бұл маған еске салады. Назар аударыңыз, қазір екі тақырып SDA -ға, екеуі SCL -ге барады? Неліктен біз мұны жасадық деп ойлайсыз?
Оқулықтың соңында берілген кодтан көріп отырғаныңыздай, мен кодты соңғы оқулықтың ойыншы дисплейінен дилерлік дисплейге арналған жаңа файлға қиып, жапсырдым. Содан кейін мен жаңа сегмент картасына сәйкес «сегменттерді» іздеу кестесін өзгерттім, бұл дисплейде «com» түйреуіштері жерлендірілген және сегменттің түйреуіштері басқа дисплейдегідей емес, керісінше 5В.. Мен жаңа сымдарды көрсету үшін порттардың инициализациясын өзгерттім, дилерлік дисплейдің мекен -жайын 0b1000000 -ге ауыстырдым, осылайша сүйек ролигі онымен сөйлесе алады, мен «цикл» кіші бағдарламасын өшіретін етіп өзгерттім. PC0 арқылы PC3 «com» белгілі бір сегментке қуат бергісі келгенде түйрейді және мен жаңа сымның сандары қарама -қарсы сандарға ие болғаннан кейін көрсетілетін «цифрды» өзгерттім (егер сіз оны сол күйінде қалдырып, 1234 санын көрсетуге тырыссаңыз) орнына 4321 ретінде көрсетер еді).
Міне, жаңа регистр картасы:
(PD7, PD6, PD5, PB4, PB3, PB2, PB1, PB0) = (ондық нүкте, c, g, b, f, a, e, d)
мұнда 1 ҚОСУЛЫ және 0 ӨШІРУЛІ.
Алдымен дисплейдің инициализацияланған мәнін әр түрлі сандарға орнату арқылы дисплейді тексеріңіз, ол қосылған кезде оларды көрсетеді. Бұл сізге бәрі дұрыс жұмыс істейтінін көрсетеді.
Содан кейін diceroller кодын құлдың жаңа мекенжайын пайдаланатын етіп өзгертіңіз, оларды біріктіріп, іске қосыңыз. Бұл соңғы оқулықта дәл осылай әрекет етуі керек, тек сүйектер енді жаңа дисплейде пайда болады.
Тамаша! Енді біз жаңа сүйек ролигінің кодын жазуға дайынбыз, ол ойыншы дисплейімен де, дилерлік дисплеймен де байланысады.
3 -қадам: Бағдарламаның құрылымы
Код біздің ойын үшін қалай жұмыс істейді, біз сүйек ролигін басты ретінде сақтаймыз және дилерлік дисплейді қосымша құл ретінде қосамыз. Сүйек ролигі ойынды басқарады және ол ақшаға түскен өзгерістерді дилерге жібереді және әр ойыннан кейін ойыншы көрсетеді. Әзірге бізде әр жолы $ 10 болатын рұқсат етілген ставка болады, сондықтан ойыншының өз ставкасын өзгертуімен әлі де күрделі болып қалудың қажеті жоқ. Кейінірек, бізде механикалар жұмыс істегеннен кейін, біз басқа контроллерді қосамыз, ол ставкалар мен төлемдерді бақылайтын қосымша мастер болады, ал біздің сүйек ролигі шебер болып қалады, бірақ тек сүйектерді айналдыру үшін қолданылады. Бұл сізге бірнеше қожайындар мен құлдар болған кезде TWI арбитражына, қақтығыстарға және сериялық байланыстың басқа маңызды аспектілеріне кіруге мүмкіндік береді. Біз сонымен қатар ораманың басқа түрлеріне ставка қоюға мүмкіндік беретін түймелері бар 7 таңбалы дисплейлердің санын қосамыз, бірақ бәрі алдағы оқулықтарда болады. Әзірге біз тек сүйек ролигін шебер, ал екі дисплейді құл ретінде алғымыз келеді. Біз түймені басқан кезде, код жеңісті немесе жетіге дейін «табиғи» төлеуді, ақшаны ақшадан алуды немесе «нүктелі» орамалар сериясын алуды шешеді.
Алдымен құлдық тәртіптерді жазайық. Бұл қарапайым, өйткені олардың мекен -жайы үшін SDA желісін қарау жеткілікті, егер олар шақырылса, олар оны көрсету және көрсету үшін жаңа нөмірді оқиды. Барлығы осы! Оларға шебермен қайта сөйлесудің қажеті жоқ, өйткені шебер жаңартпас бұрын олардың жиынтық есебін жүргізеді және төлемнің барлық есептеулерін жүргізеді. Болашақ оқулықтарда бізде шеберге жауап беретін құлдар болады (мысалы, бізде ставканың сомасы үшін түймелері бар 7 таңбалы дисплейлер болған кезде, олар әр дисплейге қанша ставка қойылатынын шеберге айтуы керек) оларға адреспен хабарласыңыз + «басты қабылдағыш режимінде» қоңырауды оқыңыз), бірақ біз оған уақытында жетеміз.
Әзірге барлығы текшені айналдыру түймешігін басу арқылы, содан кейін есептеу немесе басқа батырманы басу арқылы және әр дисплейге жаңа жиынтықтармен хабарлама жібереді. Әр төлемнен кейін ойыншының ұтқанын немесе ұтылғанын анықтау үшін тест болады, басқаша айтқанда, дилердің қолма -қол ақшасы орамнан кейін нөлге айналады ма, әлде ойыншы қолма -қол ақшаны аударғаннан кейін нөлге айналады ма (дилер де, ойыншы да емес) олар теріс болуы мүмкін, себебі олар тек $ 10 -ға бәс тігуге рұқсат етіледі, немесе қалғаны 10 доллардан төмен болса).
Осылайша ол осылай жұмыс істейді. Кодтауды алайық.
4 -қадам: Негізгі байланыс коды
Біз енді сүйек ролигінің байланыс тәртібін жаза аламыз. Бұл біз соңғы рет жазғанға ұқсас, тек бір емес, екі түрлі құлмен сөйлесеміз. Назар аударыңыз, құлдардың әрқайсысы үшін біз басқа адресті қолданамыз. Сіз кодты өзіңіз өзгертуіңіз керек, содан кейін оны әр адреспен тексеріп, оның әрбір жеке дисплейден басқа соңғы оқу құралы сияқты жұмыс істейтініне көз жеткізіңіз.
Мен әр компоненттің кодын тіркеймін, ол жай ғана роликтің нәтижесін көрсетеді, оны дисплейлердің дұрыс жұмыс істеуі үшін және сымдарды тексеру үшін қолдануға болады.
Ойынның кодталуы құрастыру тілінің командаларына немесе AVR микроконтроллерінің компоненттеріне қатысты жаңа ештеңе енгізбейді, сондықтан мен оны кезекпен өту қажет емес сияқты. Сіз жаңа нәрсені енгізгенде мен әр жолды егжей -тегжейлі қарап шығамын, егер сізді ұйықтатпасаңыз, сізді ашуландыратынымды байқадыңыз. Екінші жағынан, егер менде жаңа ештеңе болмаса, мен мұны жасамаймын. Бүгінде солай. Менің ойымша, сіз қазірге дейін кодпен ойнауға, кодты оқуға, кодты талдауға, кодты түсінуге, кодты сынауға, кодты мазақтауға және кодты жазған адамға күлуге дайынсыз деп ойлаймын. Сондықтан мен сізге мұны істеуге рұқсат беремін. Менің жазғандарымды жақсартуға немесе кем дегенде жеңілдетуге болатын көптеген жерлерді табатындығыңызға сенімдімін.
Мен, әдеттегідей, келесі дисплей мен дицероллерге арналған кодтың соңғы нұсқасын және осы затты сынап жатқан бейнеролигімді тіркедім.
5 -қадам: Қорытынды код және бейне
Мен видеоны және 3 бағдарламаны тіркедім. Бағдарламаның жоғарғы жағындағы ставка мен дилер мен ойыншының қолма -қол ақшасын.equ есептерімен түзетуге болатынын байқайсыз.
Келесі оқулықта біз әр түрлі нәрселерге бәс тігу мүмкіндігін қосамыз, бұл ойынды қызықты етеді. Қазіргі Craps -тың қызықты жері - сізде ставка қоюдың әр түрлі әдістері бар және сіздің мүмкіндігіңізді барынша арттыруға тырысу. Шын мәнінде, Craps - бұл казинодағы ең жоғары коэффициент ойыны! … егер сіз оны қалай ойнауды білсеңіз. Екінші жағынан, егер сіз қалай ойнауды білмесеңіз, ол ең төменгі коэффициентті ойындардың біріне айналады.
Бізде ақшаға ставка қоятын көп нәрсе болған соң, мен ойындағы ақшаның жалпы көлемін көбейтемін.
Мен көңілді болуым керек!
Келесі кездескенше!
Ұсынылған:
AVR Assembler оқулығы 2: 4 қадам
AVR Assembler Tutorial 2: Бұл оқу құралы " AVR Assembler Tutorial 1 " Егер сіз 1 -оқулықтан өтпеген болсаңыз, онда сіз қазір тоқтап, алдымен сол әрекетті орындауыңыз керек. Бұл оқулықта біз atmega328p ассемблерлік бағдарламалауды зерттеуді жалғастырамыз
AVR Assembler оқулығы 1: 5 қадамдар
AVR Assembler 1 -оқулығы: Мен Arduino -да қолданылатын микроконтроллер Atmega328p үшін ассемблерлік бағдарламаларды қалай жазу керектігі туралы оқулықтар сериясын жазуды шештім. Егер адамдар қызығушылық танытса, мен таусылғанша аптасына бір рет шығарамын
AVR Assembler оқулығы 6: 3 қадам
AVR Assembler 6 -оқулығы: 6 -оқулыққа қош келдіңіз! Бүгінгі оқу құралы қысқа болады, онда біз оларды байланыстыратын екі портты қолдана отырып, бір atmega328p мен екіншісі арасында деректерді жеткізудің қарапайым әдісін әзірлейміз. Содан кейін біз 4 -ші оқулықтан және тіркеуден сүйек ролигін аламыз
AVR Assembler оқулығы 8: 4 қадам
AVR Assembler 8 -оқулығы: 8 -оқулыққа қош келдіңіз! Бұл қысқаша оқулықта біз прототиптеу компоненттерін бөлек " басылған " тізбек тақтасы
AVR Assembler оқулығы 7: 12 қадамдар
AVR Assembler 7 -оқулығы: 7 -оқулыққа қош келдіңіз! Бүгін біз алдымен пернетақтаны қалай тазалау керектігін көрсетеміз, содан кейін пернетақтамен байланысу үшін аналогтық кіріс порттарын қалай қолдану керектігін көрсетеміз. енгізу. Біз пернетақтаны қосамыз, сондықтан