Ово је наш шести водич у нашој ПИЦ Туториал серији, у овом упутству учимо Повезивање 16к2 ЛЦД-а са ПИЦ микроконтролером. У нашим претходним водичима научили смо основе ПИЦ-а користећи неке ЛЕД програме који трепћу, а такође смо научили и како користити тајмере у ПИЦ микроконтролеру. Овде можете погледати све водиче о учењу ПИЦ микроконтролера помоћу МПЛАБКС и КСЦ8 компајлера.
Овај водич ће бити занимљив, јер ћемо научити како да повежемо 16 × 2 ЛЦД са ПИЦ16Ф877А, погледајте детаљни видео на крају овог водича. Прошла су стара времена када смо користили ЛЕД диоде за индикације корисника. Погледајмо како помоћу ЛЦД екрана можемо учинити да наши пројекти изгледају хладније и корисније. Такође погледајте наше претходне чланке о повезивању ЛЦД-а са 8051, са Ардуином, са Распберри Пи-ом и АВР-ом.
Функције за повезивање ЛЦД-а са ПИЦ микроконтролером:
Да бисмо олакшали ствари, направили смо малу библиотеку која би олакшала рад док користите овај ЛЦД са нашим ПИЦ16Ф877А. Датотека заглавља „МиЛЦД.х“ овде је дата за преузимање, која садржи све потребне функције за управљање ЛЦД-ом помоћу ПИЦ МЦУ-а. Код библиотеке је добро објашњен линијама коментара, али ако и даље сумњате, контактирајте нас путем одељка за коментаре. Такође у овом чланку погледајте основни рад ЛЦД-а и његове пиноуте.
Напомена: Увек се препоручује да знате шта се заправо догађа у вашој заглавној датотеци, јер ће вам то помоћи при отклањању грешака или приликом промене МЦУ-а.
Постоје два начина за додавање овог кода у ваш програм. Можете да копирате све горње редове кода у МиЛЦД.х и налепите их испред воид маин (). Можете и да преузмете датотеку заглавља помоћу везе и додате их у датотеку заглавља вашег пројекта ( #инцлуде "МиЛЦД.х "; ). То се може учинити десним кликом на датотеку заглавља и одабиром Додај постојећу ставку и претраживањем ове датотеке заглавља.
Овде сам копирао и залепио код заглавља у своју главну Ц датотеку. Дакле, ако користите наш код, онда не морате да преузимате и додајете заглавну датотеку у свој програм, већ само користите комплетни код дат на крају овог водича. Такође имајте на уму да ће ова библиотека подржавати само ПИЦ микроконтролер серије ПИЦ16Ф.
Овде објашњавам сваку функцију у нашој датотеци заглавља у наставку:
воид Лцд_Старт (): Ова функција би требала бити прва функција коју треба позвати да би започела рад са нашим ЛЦД-ом. Ову функцију бисмо требали позвати само једном како бисмо избегли заостајање у програму.
воид Лцд_Старт () {Лцд_СетБит (0к00); за (инт и = 1065244; и <= 0; и--) НОП (); Лцд_Цмд (0к03); __делаи_мс (5); Лцд_Цмд (0к03); __делаи_мс (11); Лцд_Цмд (0к03); Лцд_Цмд (0к02); // 02Х се користи за повратак кући -> Брише РАМ и иницијализује ЛЦД Лцд_Цмд (0к02); // 02Х се користи за повратак кући -> Брише РАМ и иницијализује ЛЦД Лцд_Цмд (0к08); // Изаберите ред 1 Лцд_Цмд (0к00); // Обриши ред 1 приказ Лцд_Цмд (0к0Ц); // Изаберите ред 2 Лцд_Цмд (0к00); // Обриши приказ 2 реда Лцд_Цмд (0к06); }
Лцд_Цлеар (): Ова функција брише ЛЦД екран и може се користити унутар петљи за брисање изгледа претходних података.
Лцд_Цлеар () {Лцд_Цмд (0); // обришите ЛЦД Лцд_Цмд (1); // Померите курсор на прво место}
воид Лцд_Сет_Цурсор (к поз, и поз): Једном покренут, наш ЛЦД је спреман за примање наредби, можемо да наложимо ЛЦД-у да постави курсор на ваше жељено место помоћу ове функције. Претпоставимо да ако нам треба курзор на 5. карактеру 1. реда. Тада ће функција бити воид Лцд_Сет_Цурсор (1, 5)
воид Лцд_Сет_Цурсор (цхар а, цхар б) {цхар темп, з, и; ако (а == 1) {темп = 0к80 + б - 1; // 80Х се користи за померање курсора з = темп >> 4; // Доњи 8-битни и = темп & 0к0Ф; // Горњи 8-битни Лцд_Цмд (з); // Постави ред Лцд_Цмд (и); // Постави колону} елсе иф (а == 2) {темп = 0кЦ0 + б - 1; з = темп >> 4; // Доњи 8-битни и = темп & 0к0Ф; // Горњи 8-битни Лцд_Цмд (з); // Постави ред Лцд_Цмд (и); // Постави ступац}}
воид Лцд_Принт_Цхар (цхар подаци): Једном када је курсор постављен, можемо написати знак на његов положај једноставним позивањем ове функције.
воид Лцд_Принт_Цхар (цхар подаци) // Слање 8-бита кроз 4-битни режим {цхар Ловер_Ниббле, Уппер_Ниббле; Ловер_Ниббле = подаци & 0к0Ф; Уппер_Ниббле = подаци & 0кФ0; РС = 1; // => РС = 1 Лцд_СетБит (Уппер_Ниббле >> 4); // Пошаљите горњу половину померањем за 4 ЕН = 1; за (инт и = 2130483; и <= 0; и--) НОП (); ЕН = 0; Лцд_СетБит (Ловер_Ниббле); // Пошаљите доњу половину ЕН = 1; за (инт и = 2130483; и <= 0; и--) НОП (); ЕН = 0; }
воид Лцд_Принт_Стринг (цхар * а): Ако треба приказати групу знакова, тада се може користити функција стринга.
воид Лцд_Принт_Стринг (цхар * а) {инт и; за (и = 0; а! = '\ 0'; и ++) Лцд_Принт_Цхар (а); // Подијелите низ помоћу показивача и позовите функцију Цхар}
Сваки пут када се позове Лцд_Принт_Цхар (цхар подаци) , његове одговарајуће вредности карактера се шаљу у линије података на ЛЦД-у. Ови знакови достижу ХД44780У у облику битова. Сада овај ИЦ повезује битове са знаком који ће се приказати користећи његову РОМ меморију као што је приказано у доњој табели. Битове за све знакове можете пронаћи у техничком листу ХД44780У ЛЦД контролера.
Сад, пошто смо задовољни нашом заглавном датотеком, хајде да направимо склоп и тестирамо програм. Такође проверите комплетну датотеку заглавља наведену у горе датој вези.
Кружни дијаграм и испитивање:
Испод је дијаграм кола за повезивање 16к2 ЛЦД-а са ПИЦ микроконтролером.
Нисам приказао напајање или ИЦСП везу у горе наведеном колу, јер користимо исту плочу коју смо користили у претходном упутству, погледајте овде.
Једна важна ствар коју треба приметити у програму су пин дефиниције ЛЦД-а:
#дефине РС РД2 #дефине ЕН РД3 #дефине Д4 РД4 #дефине Д5 РД5 #дефине Д6 РД6 #дефине Д7 РД7
Ове дефиниције пинова могу се мењати у складу са поставкама хардвера програмера. Не заборавите да промените поштовану конфигурацију порта у главној функцији ако овде промените.
Хардвер за овај пројекат је врло једноставан. Поново ћемо користити исти ПИЦ модул који смо користили прошли пут и повезати ЛЦД модул са нашим ПИЦ помоћу краткоспојних жица.
Веза се може разумети из следеће табеле:
ЛЦД Пин Но. |
Име ЛЦД екрана |
Име МЦУ пин-а |
МЦУ Пин Но. |
1 |
Приземље |
Приземље |
12 |
2 |
ВЦЦ |
+ 5В |
11 |
3 |
ВЕЕ |
Приземље |
12 |
4 |
Регистер Селецт |
РД2 |
21 |
5 |
Читај / пиши |
Приземље |
12 |
6 |
Омогући |
РД3 |
22 |
7 |
Бит података 0 |
НЦ |
- |
8 |
Бит података 1 |
НЦ |
- |
9 |
Бит података 2 |
НЦ |
- |
10 |
Бит података 3 |
НЦ |
- |
11 |
Бит података 4 |
РД4 |
27 |
12 |
Бит података 5 |
РД5 |
28 |
13 |
Бит података 6 |
РД6 |
29 |
14 |
Бит података 7 |
РД7 |
30 |
15 |
ЛЕД позитиван |
+ 5В |
11 |
16 |
ЛЕД негативан |
Приземље |
12 |
Сада ћемо једноставно успоставити везе, избацити код на наш МЦУ и проверити излаз.
Ако имате било каквих проблема или недоумица, користите одељак за коментаре. Такође погледајте доле представљени демо видео.