- 7-сегментни и 4-цифрени 7-сегментни модул приказа:
- Повезивање четвороцифреног седмосегментног модула са ПИЦ микроконтролером:
- Програмирање помоћу ПИЦ16Ф877А:
- Постављање и тестирање хардвера:
Ово је наш осми водич за учење ПИЦ микроконтролера помоћу МПЛАБ и КСЦ8. Прешли смо читав пут од инсталирања МПЛАБКС-а до употребе ЛЦД-а са ПИЦ МЦУ-ом. Ако сте нови овде, погледајте претходне водиче у којима можете научити тајмере, трепћућу ЛЕД диоду, повезивање ЛЦД-а итд. Овде можете пронаћи све наше ПИЦ водиче. У нашем последњем упутству видели смо како можемо да генеришемо прилагођене знакове помоћу ЛЦД екрана од 16 * 2, сада ћемо се опремити другом врстом модула за приказ који се зове 7-сегментни екран и повезати га са ПИЦ микроконтролером.
Иако је ЛЦД 16к2 много удобнији од 7-сегментног екрана, али мало је сценарија када би 7-сегментни дисплеј био кориснији од ЛЦД екрана. ЛЦД пати од недостатка мале величине знакова и биће претјерано за ваш пројекат ако само планирате да прикажете неке нумеричке вредности. 7-сегментни такође имају предност у односу на лоше осветљење и могу се гледати из већих углова од уобичајеног ЛЦД екрана. Па, почнимо то да знамо.
7-сегментни и 4-цифрени 7-сегментни модул приказа:
Приказ 7 сегмената има седам сегмената, а сваки сегмент има по једну ЛЕД диоду за приказ бројева осветљавањем одговарајућих сегмената. Као да желите да 7-сегмент приказује број "5", онда морате да жарите сегменте а, ф, г, ц и д тако што ћете одговарајуће пинове поставити високо. Постоје два типа екрана са 7 сегмената: Цоммон Цатходе и Цоммон Аноде, овде користимо приказ са седам сегмената Цоммон Цатходе. Овде сазнајте више о 7-сегментном дисплеју.
Сада знамо како да прикажемо жељени нумерички знак на једном 7-сегментном дисплеју. Али, прилично је очигледно да би нам требало више од једног 7-сегментног екрана да бисмо пренели било коју информацију која има више од једне цифре. Дакле, у овом упутству ћемо користити 4-цифрени 7-сегментни модул приказа као што је приказано доле.
Као што видимо, постоје четири приказана седам сегмената који су повезани заједно. Знамо да ће сваки 7-сегментарни модул имати 10 пинова, а за 4 седмосегментна екрана било би укупно 40 пинова и било би ужурбано да их било ко леми на тачкасту плочу, па топло препоручујем свима да купе модул или направите свој ПЦБ за коришћење четвороцифреног 7-сегментног екрана. Шема везе за исту је приказана испод:
Да бисмо разумели како функционише четвороцифрени седмосегментни модул, морамо погледати горње шеме, као што је приказано А пинови сва четири екрана повезани су да би се окупили као један А и исти за Б, Ц…. до ДП. Дакле, у основи ако је окидач А укључен, онда би сва четири А требала ићи високо, зар не?
Али, то се не дешава. Имамо додатна четири пина од Д0 до Д3 (Д0, Д1, Д2 и Д3) који се могу користити за контролу који од четири екрана треба да иде високо. На пример: Ако ми је потребно да мој излаз буде присутан само на другом екрану, онда би само Д1 требало да буде високо, а да остали пинови (Д0, Д2 и Д3) буду ниски. Једноставно можемо одабрати који приказ мора бити активан помоћу пинова од Д0 до Д3 и који знак ће се приказивати помоћу пинова од А до ДП.
Повезивање четвороцифреног седмосегментног модула са ПИЦ микроконтролером:
Овде смо користили ПИЦ микроконтролер ПИЦ16Ф877А и шема кола је приказана доле.
Из модула имамо 12 излазних пинова, од којих се 8 користи за приказ знакова, а четири за одабир једног приказа од четири. Отуда је свих 8 пинова за знакове додељено ПОРТД-у, а пинови за одабир екрана су додељени првим четири пинова ПОРТЦ-а.
Напомена: Пин за уземљење модула такође треба да буде повезан са масом МЦУ, што овде није приказано.
Програмирање помоћу ПИЦ16Ф877А:
Сад кад знамо како овај модул заправо ради, научимо како да програмирамо ПИЦ16Ф877А тако да приказује 4-цифрени број. Повећамо променљиву од 0 до 1000 и одштампајмо је на 7-сегментном дисплеју. Покрените програм МПЛАБКС и креирајте нови пројекат, започнимо са конфигурационим битовима.
#прагма цонфиг ФОСЦ = ХС // Битови за одабир осцилатора (ХС осцилатор) #прагма цонфиг ВДТЕ = ОФФ // Бит Ватцхер Енабле бит (ВДТ дисаблед) #прагма цонфиг ПВРТЕ = ОН // Повер-уп Тимер Енабле бит (ПВРТ енаблед) # прагма цонфиг БОРЕН = ОН // Бригхт-оут Ресет Енабле бит (БОР енаблед) #прагма цонфиг ЛВП = ОФФ // Бит за омогућавање серијског програмирања у кругу ниског напона (једно напајање) (РБ3 је дигитални И / О, укључен ХВ МЦЛР се мора користити за програмирање) #прагма цонфиг ЦПД = ОФФ // Бит заштите података ЕЕПРОМ меморијског кода (заштита ЕЕПРОМ кода података искључена) #прагма цонфиг ВРТ = ОФФ // Фласх програмирање меморије Омогућавање битова (Заштита записа; сва програмска меморија може се уписати на ЕЕЦОН контролу) #прагма цонфиг ЦП = ОФФ // Фласх програм Меморија кода за заштиту меморије (заштита кода искључена)
Као и обично, користимо прозор постављених конфигурационих битова да бисмо поставили те битове. Ако нисте сигурни шта значе, посетите туторијал за ЛЕД који трепће овде.
Даље дефинишемо излазне пинове за пребацивање између сваке цифре екрана.
// *** Дефинишите сигналне пинове сва четири приказа *** // #дефине с1 РЦ0 #дефине с2 РЦ1 #дефине с3 РЦ2 #дефине с4 РЦ3 // *** Крај дефиниције ** ////
Овде се пинови РЦ0, РЦ1, РЦ2 и РЦ3 користе за одабир између четири цифре нашег 7-сегментног модула за приказ. Ови пинови су дефинисани као с1, с2, с3 и с4 респективно.
Даље, ускочимо у воид маин (), унутар којег имамо следећу декларацију променљиве:
инт и = 0; // четвороцифрена вредност која ће се приказати инт флаг = 0; // за стварање кашњења унсигнед инт а, б, ц, д, е, ф, г, х; // само променљиве унсигнед инт сег = {0Кс3Ф, // Хек вредност за приказ броја 0 0Кс06, // Хек вредност за приказ броја 1 0Кс5Б, // Хек вредност за приказ броја 2 0Кс4Ф, // Хек вредност за приказ број 3 0Кс66, // Хек вредност за приказ броја 4 0Кс6Д, // Хек вредност за приказ броја 5 0Кс7Ц, // Хек вредност за приказ броја 6 0Кс07, // Хек вредност за приказ броја 7 0Кс7Ф, / / Хек вредност за приказ броја 8 0Кс6Ф // Хек вредност за приказ броја 9}; // Крај низа за приказ бројева од 0 до 9
Овде се променљиве и и флаг користе за складиштење вредности које ће се приказати и стварање кашњења. У унсигнед интегер променљиве од А до Х се користи да се пробије четири цифара броја у једноцифрена и чувати их (што ће бити објашњено касније овде).
Једна кључна ствар коју треба овде приметити је декларација низа „сег“ . У овом програму користимо нови тип података који се зове Арраи. Низ није ништа друго до збирка сличних вредности типа података. Овде смо користили овај низ за чување свих еквивалентних хексадецималних вредности за приказ броја од 0 до 9.
Адреса низа увек почиње од нуле. Дакле, овај низ ће имати хексадецималну вредност нумеричког броја (0-9) сачуваног на адреси која је иста као и бројка као што је приказано испод
Променљива: |
сег |
сег |
сег |
сег |
сег |
сег |
сег |
сег |
сег |
сег |
Хек код: |
0Кс3Ф |
0Кс06 |
0Кс5Б |
0Кс4Ф |
0Кс66 |
0Кс6Д |
0Кс7Ц |
0Кс07 |
0Кс7Ф |
0Кс6Ф |
Ек. Нумерички број: |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
Тако једноставно, ако желите да прикажете број 0 на свом 7-сегменту, можете да позовете сег, исто тако ако желите да прикажете број 6, једноставно морате да користите сег.
Да бисмо разумели како је заправо добијена ХЕКС вредност, погледајмо у доњу табелу. Еквивалентна ХЕКС вредност за сваку децимални број се смешта у низу тако да може бити позван да прикаже једну посебну број.
Сада пређимо на следећи део кода који је И / О конфигурација:
// ***** И / О конфигурација **** // ТРИСЦ = 0Кс00; ПОРТЦ = 0Кс00; ТРИСД = 0к00; ПОРТД = 0Кс00; // *** Крај И / О конфигурације ** ///
И / О конфигурација је једноставна, јер су сви пинови на нашем 7-сегменту излазни пинови, а везе су приказане на горњој шеми, па их једноставно пријавите као излазе и иницијализујте их на нулу.
Сада скочимо у нашу бесконачну петљу (вхиле (1)). Овде морамо поделити вредност „и“ на четири цифре и приказати их на 7-сегменту. Прво започнимо поделом вредности на „и“
// *** Раздвајање "и" на четири цифре *** // а = и% 10; // овде је сачувана 4. цифра б = и / 10; ц = б% 10; // овде је сачувана 3. цифра д = б / 10; е = д% 10; // овде је сачувана 2. цифра ф = д / 10; г = ф% 10; // овде је сачувана 1. цифра х = ф / 10; // *** Крај цепања *** //
Коришћењем једноставног модула и дељења, четвороцифрени број (и) је одвојен на појединачне бројеве. У нашем случају узмимо пример где је вредност „и“ 4578. Затим на крају овог процеса променљива г = 4, е = 5, ц = 7 и а = 8. Тако ће сада бити лако приказати сваку цифру једноставним коришћењем те променљиве.
ПОРТД = сег; с1 = 1; // УКЉУЧИТЕ екран 1 и одштампајте 4. цифру __делаи_мс (5); с1 = 0; // ИСКЉУЧИТЕ приказ 1 након кашњења од 5 мс ПОРТД = сег; с2 = 1; // УКЉУЧИТЕ екран 2 и одштампајте трећу цифру __делаи_мс (5); с2 = 0; // ИСКЉУЧИТЕ приказ 2 након кашњења од 5 мс ПОРТД = сег; с3 = 1; // УКЉУЧИТЕ екран 3 и одштампајте 2. цифру __делаи_мс (5); с3 = 0; // ИСКЉУЧИТЕ приказ 3 након кашњења од 5 мс ПОРТД = сег; с4 = 1; // УКЉУЧИТЕ екран 4 и одштампајте 1. цифру __делаи_мс (5); с4 = 0; // Искључите екран 4 након кашњења од 5 мс
Ово је стварно место где МЦУ разговара са 7-сегментом. Као што знамо, истовремено можемо приказати само једну цифру, али имамо четири цифре које треба приказати и то само ако су све четири цифре Укупан четвороцифрени број биће видљив кориснику.
Па, како ћемо са овим?
Срећом по нас, наш МЦУ је много бржи од људског ока, па оно што заправо радимо: приказујемо по једну цифру, али то радимо врло брзо како је горе приказано.
Одаберемо једноцифрени приказ који чека 5 мс, тако да МЦУ и 7-сегмент могу да га обраде, а затим искључе ту цифру и прелазе на следећу цифру и раде исто док не стигнемо до последње цифре. Ово кашњење од 5 мс не може да примети људско око и чини се да су све четири цифре истовремено биле укључене.
То је то, коначно само повећавамо вредност приказане цифре користећи кашњење као што је приказано доле
иф (флаг> = 100) // сачекајте да заставица достигне 100 {и ++; флаг = 0; // само ако је застава сто "и" биће увећано} флаг ++; // заставица прираста за сваки блиц
Кашњење се користи тако да је време потребно за прелазак са једног броја на други довољно дуго да бисмо приметили промену.
Комплетан код је дат испод, а процес је такође објашњено у видео на крају.
Постављање и тестирање хардвера:
Као и увек, симулирајмо програм користећи Протеус пре него што заиста кренемо са својим хардвером. Ако је симулација успешна, требало би да видите нешто слично
Овај пројекат нема компликовано постављање хардвера, поново користимо исту ПИЦ микроконтролерску плочу коју смо креирали у водичу за трептање ЛЕД диода. Једноставно повежите 7-сегментни модул са плочом ПИЦ микроконтролера у складу са шемом повезивања. Када завршите са везама, једноставно избаците код помоћу програма ПицКит 3 и то је да ужива у вашем излазу.