- Рад ЛЦД екрана од 16к2
- Схема споја на интерфејс ЛЦД са микроконтролером СТМ8
- ЛЦД библиотека СТМ8 - Датотека заглавља за СТМ8С103Ф3П6
- ЛЦД програм за микроконтролер СТМ8С
- СТМ8 са ЛЦД-ом - ради
Алфанумерички ЛЦД екран 16к2 је најчешће коришћен екран међу хобистима и ентузијастима. Екран је веома користан када желите да кориснику прикажете основне информације, а такође може да помогне у тестирању или отклањању грешака у нашем коду. Овај конкретни ЛЦД модул од 16к2 је лако доступан и популаран је већ дуже време. У основном чланку можете сазнати више о основама ЛЦД модула 16к2.
Да бисмо наставили са нашом серијом упутстава за СТМ8 микроконтролер, у овом упутству ћемо научити како повезати ЛЦД са СТМ8 микроконтролером. Претходно смо повезали ЛЦД 16к2 и са многим другим микроконтролером, водичи су наведени у наставку и можете их проверити ако су заинтересовани.
Ако сте нови у СТМ8, погледајте почетак рада са чланком СТМ8 Микроконтролер да бисте разумели основе плоче контролера и програмског окружења. У овом упутству нећемо покривати основе.
Рад ЛЦД екрана од 16к2
Као што и само име говори, ЛЦД 16к2 имаће 16 колона и 2 реда. Дакле, укупно ћемо на овом дисплеју моћи да прикажемо 32 знака и ти знакови могу бити абецеда или бројеви или чак симболи. Једноставни ЛЦД пиноут од 16к2 који користимо у овом упутству приказан је испод -
Као што видите, екран има 16 пинова и можемо га поделити у пет категорија, Повер Пинс, контрастни пин, Цонтрол Пинс, Дата пинс и Бацклигхт пинс, као што је приказано у доњој табели. У детаље сваког пина ћемо ући када разговарамо о шеми овог водича.
Категорија | Пин НО. | Пин Наме | Функција |
Повер Пинс | 1 | ВСС | Гроунд пин, повезан са Гроунд |
2 | ВДД или Вцц | Напон Пин + 5В | |
Цонтраст Пин | 3 | В0 или ВЕЕ | Подешавање контраста, повезано на Вцц преко променљивог отпорника. |
Цонтрол Пинс | 4 | РС | Регистрирај Одаберите пин, РС = 0 Цомманд моде, РС = 1 Дата моде |
5 | РВ | Читање / писање чиоде, РВ = 0 Начин писања, РВ = 1 Режим читања | |
6 | Е. | Омогући, пулс од високог до ниског нивоа треба да омогући ЛЦД | |
Дата Пинс | 7-14 | Д0-Д7 | Прибадаче за податке, чува податке за приказ на ЛЦД-у или упутства за наредбе |
Игле са позадинским осветљењем | 15 | ЛЕД + или А. | За напајање позадинског осветљења + 5В |
16 | ЛЕД- или К. | Позадинско осветљење Гроунд |
На задњој страни ЛЦД-а, као што је приказано на доњој слици, пронаћи ћете две црне тачке, у којима се налази ХД44780 ИЦ управљачки програм ЛЦД-а (заокружен црвеном бојом). Наш микроконтролер треба да комуницира са овом ИЦ-ом која ће заузврат контролисати оно што се приказује на ЛЦД-у. Ако сте знатижељни како тачно све ово функционише, требало би да погледате рад ЛЦД екрана 16к2, где смо већ детаљно разговарали о томе како ЛЦД ради.
У овом упутству ћемо размотрити схему кола и код за приказ алфамерних знакова (абецеде и бројеви) на ЛЦД дисплеју 16к2 помоћу једноставних наредби ЛЦД_принт _цхар и ЛЦД_принт_стринг . Ове наредбе се могу директно користити у програму након укључивања наше заглавне датотеке. Датотека заглавља обрађује већину ствари за вас, па није обавезно знати како функционише екран или ИЦ44780 управљачка карта.
Схема споја на интерфејс ЛЦД са микроконтролером СТМ8
Комплетни СТМ8 ЛЦД круг налази се на доњој слици. Као што видите, веза за СТМ8С103Ф3П6 контролер са ЛЦД-ом је врло једноставна, имамо ЛЦД екран директно повезан са нашом плочом, а СТ-линк је такође повезан за програмирање плоче.
Прикључци за напајање Всс и Вцц повезани су на 5В пин на плочи СТМ8С, имајте на уму да је радни напон ЛЦД-а 5В и повезан на рад од 3,3В. Дакле, иако микроконтролер СТМ8С103Ф3П6 ради на 3.3В, обавезно је имати 5В напајање за ЛЦД, то можете избећи помоћу ИЦ контролера пуњења, али о томе нећемо расправљати у овом упутству.
Затим имамо контрастни пин који се користи за подешавање контраста ЛЦД-а, повезали смо га са потенциометром како бисмо могли да контролишемо контраст. Користили смо пот 10 к, али можете користити и друге вредности у близини, лонац делује као потенцијални делилац да обезбеди 0-5 В контрастном пину, обично можете да користите и отпорник да обезбедите око 2,2 В за разумни контраст вредност. Затим имамо игле за ресетовање (РС), читање / писање (РВ) и Омогућавање (Е). Пин за читање и писање је уземљен, јер нећемо ништа читати са ЛЦД-а, већ ћемо извршавати само операције уписивања. Преостала два контролна пина Р и Е повезана су на пинове ПА1 и ПА2.
Затим имамо пинове података ДБ0 до ДБ7. ЛЦД 16к2 може радити у два начина, један је 8-битни начин рада, при чему морамо користити свих 8 пинова података (ДБ0-ДБ7) на ЛЦД-у, а други је 4-битни начин рада у којем нам требају само 4 чиоде за податке (ДБ4-ДБ7). Често се користи 4-битни режим јер захтева мање ГПИО пинова од контролера, па смо у овом упутству такође користили 4-битни режим и повезали смо само пинове ДБ4, ДБ5, ДБ6 и ДБ7 на пинове ПД1, ПД2, ПД3, односно ПД4.
Последња два пина БЛА и БЛК користе се за напајање ЛЕД са унутрашњим осветљењем, користили смо отпорник од 560 охма као отпорник за ограничавање струје. Програмер СТ-Линк је повезан као и увек као и у претходном упутству. Направио сам потпуну везу на плочи и моја поставка изгледа овако приказано на доњој слици.
ЛЦД библиотека СТМ8 - Датотека заглавља за СТМ8С103Ф3П6
Пре него што наставимо са шемом кола, узмимо СТМ8 ЛЦД заглавну датотеку са ГитХуб-а користећи следећу везу-
СТМ8С 16к2 ЛЦД датотека заглавља
Можете да преузмете комплетан репо и добијете датотеку стм8с103_ЛЦД_16к2.х или да једноставно унесете код са горње везе. Док постављате пројекат, обавезно укључите све потребне датотеке заглавља у директоријум инц заједно са овом датотеком заглавља.
Ако нисте сигурни како да додате датотеке заглавља и компајлирате програм, следите видео запис на дну ове странице. А ако вас занима како функционише код унутар датотеке заглавља, ПИЦ можете погледати помоћу ЛЦД водича. Датотека заглавља која се користи у овом пројекту врло је слична оној која је тамо објашњена, па нећемо улазити у детаље о томе.
ЛЦД програм за микроконтролер СТМ8С
За демонстрацију, програмираћемо наш СТМ8С контролер да приказује једноставан низ као што је „Цирцуит Дигест“, а затим ћемо повећавати вредност „Тест“ за сваку секунду у другом реду. Комплетан програм можете пронаћи на дну ове странице. Објашњење је следеће.
Наш програм започињемо дефинирањем пинова и додавањем потребних датотека заглавља као и увијек. У нашем претходно разматраном дијаграму кола, повезали смо ЛЦД_РС са ПА1 па смо га дефинисали као ЛЦД_РС ГПИОА, ГПИО_ПИН_1. Слично томе, урадили смо исто и за друге пинове. Ако следе другачији круг, уверите се да сте у складу са тим променили ове вредности.
# определат ЛЦД_РС ГПИОА, ГПИО_ПИН_1 #дефине ЛЦД_ЕН ГПИОА, ГПИО_ПИН_2 #дефине ЛЦД_ДБ4 ГПИОД, ГПИО_ПИН_1 #дефине ЛЦД_ДБ5 ГПИОД, ГПИО_ПИН_2 #дефине ЛЦД_ДБ6 ГПИОД, ГПИО_ПИН_3 #дефине ЛЦД_ДБ7 ГПИОД, ГПИО_ПИН_4 #инцлуде "СТМ8С.х" #инцлуде "стм8с103_ЛЦД_16к2.х"
Следеће у нашем главном програму, прогласили смо променљиве потребне за овај узорак кода. Имамо тест варијаблу названу тест_вар која је иницијализована на нулу, повећаћемо варијаблу и приказати је на ЛЦД-у. Знакови д1 до д4 представљају 4 цифре тестне променљиве, јер наш ЛЦД не може директно приказати инт вредност, морамо их претворити у знакове.
// Изјаве променљиве инт тест_вар = 0; цхар д4, д3, д2, д1;
Функција ЛЦД_Бегин () користи се за иницијализацију ЛЦД-а. Ова функција ће покренути све потребне ГПИО пинове и такође поставити ЛЦД у ЛЦД режим 16к2. Тада имамо функцију ЛЦД_Цлеар () која се користи за брисање свих вредности на ЛЦД-у, чиме ће се избрисати све на ЛЦД-у, тако да је чисто писати нове вредности. Тада имамо функцију ЛЦД_Сет_Цурсор (к, и) где су к и и положаји на којима треба да напишемо наш нови лик. На пример, (1,1) значи први ред и први ступац, слично (2,12) значи други ред 12, такође колону. Имајте на уму да овде имамо 2 реда и 16 колона као што смо раније говорили.
Лцд_Бегин (); Лцд_Цлеар (); Лцд_Сет_Цурсор (1,1);
Сада је ЛЦД постављен, обрисан и курсор је на месту. Следећа ствар је да одштампате нешто на екрану. Можемо да користимо ЛЦД_Принт_Стринг („Сампле Стринг“) за испис низа на ЛЦД и ЛЦД_Принт_Цхар (а) за испис вредности знакова на ЛЦД. У нашем програму овде смо одштампали „СТМ8С103Ф3П3 ЛЦД“ и створили кашњење од 5 секунди користећи доњи код.
Лцд_Принт_Стринг ("СТМ8С103Ф3П3 ЛЦД"); делаи_мс (5000);
Након кашњења од 5 секунди, поново очистимо ЛЦД и приказујемо „Цирцуит Дигест“ у првом реду и „Тест:“ у другом реду.
Лцд_Цлеар (); Лцд_Сет_Цурсор (1,1); Лцд_Принт_Стринг ("Цирцуит Дигест"); Лцд_Сет_Цурсор (2,1); Лцд_Принт_Стринг ("Тест:");
Унутар вхиле петљи, ми ћемо поделити вредност на број променљивог тест_вар у појединим карактера, тако да може да се приказује на ЛЦД користећи једноставна подела и Модул оператере. Такође смо додали '0' за претварање АСЦИИ вредности у знак.
д4 = тест_вар% 10 + '0'; д3 = (тест_вар / 10)% 10 + '0'; д2 = (тест_вар / 100)% 10 + '0'; д1 = (тест_вар / 1000) + '0';
Тада смо поставили курсор на (2,6), јер смо у други ред који садржи 6 знакова већ написали „Тест:“. Ако препишемо, постојећи знак биће замењен новим на ЛЦД-у. Такође смо додали кашњење од 1 секунде и повећали променљиву.
Лцд_Сет_Цурсор (2,6); Лцд_Принт_Цхар (д1); Лцд_Принт_Цхар (д2); Лцд_Принт_Цхар (д3); Лцд_Принт_Цхар (д4); делаи_мс (1000); тест_вар ++;
СТМ8 са ЛЦД-ом - ради
Да бисте тестирали наш програм, једноставно пренесите код на наш контролер и напајајте га помоћу микро-УСБ порта. Имајте на уму да за рад ЛЦД-а треба 5 В, тако да је обавезно напајање плоче са УСБ порта. Раније смо га напајали директно из СТ-линка јер нам није било потребно напајање од 5В.
Као што видите, ЛЦД ради како се очекивало, при чему се вредност променљиве теста увећава за приближно сваку секунду. Такође имајте на уму да нисмо користили тајмере и да смо користили само функцију одлагања да бисмо креирали ово одлагање, па немојте очекивати да је одлагање тачно, у ту сврху ћемо касније користити тајмере у другом упутству.
Комплетан рад пројекта може се наћи у доњем видео линку. Надам се да сте уживали у водичу и научили нешто корисно. Ако имате питања, оставите их у одељку за коментаре или користите наше форуме за друга техничка питања.