Работа со графички приказ 1602 во arduino. LCD WH1602B од Winstar. LCD контрола преку магистрала I2C

јас пристигнав Ардуино Нано, пристигнал кит, во кој штица за леб (bredboard) и LCD дисплеј. На екранот на таблата пишува - 1602A, подолу - QAPASS. Почнав да го вајам првиот уред и, се разбира, сакав да прикажувам информации на екранот, а не да трепкаат LED диоди.

Google помогна, ми кажа дека ова е приказ на знаци; ако не е изопачено, тогаш најверојатно се достапни ASCII знаци - бројки, латински, нешто од основните знаци.

Следниве материјали помогнаа да се стартува дисплејот: Возење ЛЦД од типот на знаци од приклучок за печатач за компјутер; Како да го поврзете Arduino со LCD со знаци; Pwm серво драјвер за контрола на моторот PDF.

Екранот е доста вообичаен, а за него веќе се измислени штитови - има опции со SPI like, и/или со I2C, а Интернетот е полн со рецепти за овие случаи. Но, јас го имав само оригиналниот дисплеј 16x2, и ардуинка, на која сакав да го закачам.

Дисплејот има режим на работа и пренос на податоци во грицкање, по 4 бита, додека долните делови на магистралата не се користат. Поврзувањето на само половина од магистралата за податоци е опишано на многу места, а јас не сфатив како да го поврзам дисплејот и да работам со него преку 8 линии. Јас сум прилично задоволен од тоа како функционира.

Добар опис на дисплеите од овој типГо најдов овде - http://greathard.ucoz.com/44780_rus.pdf. И тука (http://arduino.ru/forum/programmirovanie/lcd-i2c-partizanit#comment-40748) - пример за поставување на генератор на знаци.

Поврзување

Мојот дисплеј дојде со незалемени контакти. Од почеток сакав да го залемам кабелот, да отсечам 16 жици со дупон и да ги исчистам. И тогаш копав во китот и најдов чешел за лемење на таблата. Оттаму прекинав 16 контакти и ги залемив.
Мојот екран изгледаше вака (пред лемење на контактите):

Прво, го поврзав пинот 15 (A) на +5V, 16 (K) на земјата и се уверив дека позадинското осветлување работи. Во принцип, правилно е да се поврзе катодата со заземјувањето преку отпорник од 220 оми, што потоа го направив.

Потоа ги поврзав земјата (1) и напојувањето (2). Arduino може да се напојува со USB, регулирано 5V и нерегулирано 6-12V, највисокиот напон се избира автоматски. Сега ардуиното се напојува од УСБ, а јас мислев од каде да извадам 5 волти. Се покажа дека 5V е на ардуино контактот, каде што е поврзано надворешно стабилизирано 5V. Наместо тоа, испадна дека е 4,7 V, но тоа беше доволно за мене.

По поврзувањето на напојувањето, ако сè е во ред, тогаш горниот ред свети со цврсти правоаголници на блискост.

Потоа го поврзуваме контрастниот потенциометар (пин 3 V0). Еден од екстремните заклучоци на потенциометарот го фрламе на земја, вториот - на + 5V, средниот - на иглата 3 на екранот. Се препорачува 10K потенциометар. Имав 50К од китот, прв го искористив. Прилагодувањето беше само на еден раб, неопходно беше сосема суптилно да се фати саканиот контраст. Потоа во друг кит најдов сличен на 5К, и го инсталирав. Поставувањето се протегаше од еден раб до половина вртење. Очигледно, можете да земете уште помалку потенциометар. 10K веројатно препорачуваат колото да троши помалку. Да, морав да залемам малку, залемени жици со дупон до терминалите на потенциометрите.

тест скица

Тест скицата ја земаме во примерите од Arduino Studio - "C:\Program Files (x86)\Arduino\libraries\LiquidCrystal\ex amples\HelloWorld\HelloWorld.ino", само што треба да ги смените контактите во нашите - LiquidCrystal lcd (7, 6, 5, 4, 3, 2);

Во принцип, во оваа скица има и опис што каде да се поврзе. Можете да се поврзете како што е наведено таму, тогаш воопшто не треба да менувате ништо.

// вклучи го кодот на библиотеката: #include // иницијализирај ја библиотеката со броевите на пиновите на интерфејсот LiquidCrystal lcd(7, 6, 5, 4, 3, 2); void setup() ( // поставете го бројот на колони и редови на LCD-от: lcd.begin(16, 2); // Печатете порака на LCD-екранот. lcd.print("здраво, свето!"); ) void loop() ( // поставете го курсорот на колона 0, линија 1 // (забелешка: линијата 1 е вториот ред, бидејќи броењето започнува со 0): lcd. setCursor(0, 1); // отпечатете го бројот на секунди од ресетирањето: lcd.print(millis() / 1000);

Излегува нешто како ова:

Патем, дисплејот што ми падна во раце не работи без позадинско осветлување. Мислам, работи, но речиси ништо не е видливо.

1602A Прикажи контакти

контакт # Име Како да се поврзете
1 VSS ГНД
2 ВДД +5 V
3 V0 Контраст - до средниот излез на потенциометарот
4 RS (Регистрирај се одбери) D7 Ардуино
5 R/W (читање или пишување) ГНД
6 E (Овозможи сигнал) D6 Arduino
7-14 D0-D7 D0-D3 - не е поврзан; D4-D7 - поврзан со пиновите D5-D2 на Arduino
15 А Анода за позадинско осветлување, поврзете се на +5V
16 К Катода за осветлување, поврзана со земјата преку отпорник од 220 оми

Написот зборува за тоа како правилно да го поврзете LCD-от со Arduino, сè што треба да знаете за поврзувањето на LCD 1602 и LCD i2c е покриено.

Врз основа на контролерот HD44780, LCD 1602 дисплеите сè уште се еден од најприфатливите, наједноставните и најбарани дисплеи за развој на секаков вид електронски уреди денес.

Не е изненадувачки што тие можат да се видат и во едноставни единици склопени буквално на коленото, и во посериозни индустриски, како што се машините за кафе. Со таков дисплеј се склопуваат најпопуларните модули и штитови со тема Arduino, на пример, LCD модулот I2C и LCD тастатурата Шилд.

Во следните чекори, детално објаснуваме со слики како да го поврзете LCD-от со Arduino и да ги прикажете потребните информации на екранот.

Чекор 2 LCD дисплеј 1602 за Arduino

Екраните 1602 се достапни во две различни верзии:

  • жолто позадинско осветлување со црни букви
  • или (ова се случува многу почесто) сино позадинско осветлување со бело.

Димензиите на дисплеите на контролерот HD44780 се многу различни, но тие се контролираат на ист начин. Најчести од димензиите се 16 на 02 (односно 16 знаци во две линии) или 20 на 04. Самите знаци имаат резолуција од 5 на 8 пиксели.

Повеќето дисплеи не поддржуваат кирилица (со исклучок на екраните за означување CTK). Но, таков проблем е делумно решлив, а потоа во написот детално се објаснува како да се направи тоа.

Екранот има 16-PIN конектор за поврзување. Излезите се означени на задната страна на таблата, тоа е како што следува:

  • 1 (VSS) - моќност до минус за контролорот.
  • 2 (VDD) - позитивно напојување за контролорот.
  • 3 (VO) - поставки за контрола на контрастот.
  • 4 (РС) – избор за регистар.
  • 5 (R/W) - читај и пишувај, особено пишувај кога е поврзан со земјата.
  • 6 (E) – активирање (овозможи).
  • 7-10 (DB0-DB3) - ниски битови од осум-битниот интерфејс.
  • 11-14 (DB4-DB7) - најзначајните битови од интерфејсот
  • 15 (А) - позитивна анода за напојување на позадинското осветлување.
  • 16 (K) - негативна катода за напојување на позадинското осветлување.

Чекор 3. Поврзување на LCD-екранот

Пред да го поврзете екранот и да префрлите информации на него, вреди да се провери неговата изведба. Прво, нанесете напон на VSS и VDD контролерот, вклучете го задното осветлување (A, K), а потоа прилагодете го контрастот.

За такви поставки, погоден е потенциометар од 10 kΩ, неговата форма не е важна. +5V и GND се применуваат на екстремните краци, а ногата во центарот е поврзана со излезот VO.

Кога напојувањето се применува на колото, неопходно е да се постигне потребниот контраст, ако е погрешно прилагоден, тогаш сликата на екранот нема да биде видлива. За да го прилагодите контрастот, треба да „играте“ со потенциометарот. Кога колото е правилно составено и контрастот е правилно поставен, горната линија на екранот треба да се пополни со правоаголници.

За да функционира екранот, специјалната библиотека вградена во Arduino IDE се користи LiquidCrystal.h, за која ќе пишувам подолу. Може да работи во 8-битен и 4-битен режим. Во првата варијанта се користат само долните и повисоките битови ( BB0-DB7), во втората - само помладите ( BB4-DB7).

Но, употребата на 8-битен режим на овој дисплеј е погрешна одлука, скоро и да нема предност во брзината, бидејќи неговата стапка на освежување е секогаш помала од 10 пати во секунда. За прикажување текст, треба да ги поврзете пиновите DB7, DB6, DB5, DB4, E и RS со пиновите на контролерот. Можете да ги поврзете со кои било пинови на Arduino, главната работа е да ја поставите точната секвенца во кодот.

Ако бараниот знак сè уште не е во меморијата на контролорот, тогаш може да се одреди рачно (вкупно до седум знаци). Ќелијата на екраните што се разгледуваат има проширување од пет на осум точки. Задачата за создавање симбол е да се напише малку маска и да се постават оние на места каде што треба да горат точките, а нули каде што не треба. Шемата за поврзување дискутирана погоре не е секогаш добра, бидејќи Arduino користи најмалку шест дигитални излези.

Чекор 4. Преглед

Ајде да истражиме начин како да го заобиколиме ова и да поминеме со само двајца. Потребен е дополнителен модул за конвертор LCD во IIC/I2C. Како е залемен на екранот и прикачен на Arduino може да се види на сликите подолу.

Но, оваа опција за поврзување работи само со специјалната библиотека LiquidCrystal_I2C1602V1, која, сепак, е лесно да се најде на Интернет и да се инсталира, по што можете да ја користите без проблеми.

Чекор 4: Библиотека LiquidCrystal.h

Библиотеката LiquidCrystal.h може да се преземе во делот Библиотеки на нашата веб-локација на оваа страница или од официјалниот ресурс arduino.cc. Но, исто така можете да ги преземете линковите подолу:

Чекор 5. Скица (програмски код)

Откако ќе ја преземете архивата, заменете ја папката LiquidCrystal во папката библиотеки во директориумот за инсталација на Arduino.

Можете да видите пример на скица на:

Датотека -> Примери -> LiquidCrystal -> HelloWorld_SPI

Или ако имате мени на англиски:

Датотека -> Примери -> LiquidCrystal -> HelloWorld_SPI

Ова ја завршува нашата следна лекција. Ви посакуваме квалитетни проекти!

LCD дисплеј- чест гостин во проектите на ардуино. Но, во сложените кола, може да имаме проблем со недостаток на порти Arduino поради потребата да се поврзе штит што има многу пинови. Излезот во оваа ситуација може да биде I2C/IICадаптер кој поврзува речиси стандарден Arduino 1602 штит со Uno, Nano или Mega плочи со само 4 пинови. Во оваа статија, ќе видиме како да поврзете LCD екран со интерфејс I2C, кои библиотеки може да се користат, да напишете краток пример за скица и да ги анализирате типичните грешки.

Екран со течни кристали LCD 1602е добар изборза излез на низи со знаци во различни проекти. Тоа е ефтино, има различни модификации со различни бои на позадинско осветлување, можете лесно да преземате готови библиотеки за скици на Arduino. Но, главниот недостаток на овој екран е фактот што дисплејот има 16 дигитални пинови, од кои се потребни најмалку 6. Затоа, користењето на овој LCD екран без i2c додава сериозни ограничувања за Arduino Uno или Nano плочите. Ако нема доволно контакти, тогаш ќе мора да купите Arduino Mega плоча или да зачувате контакти, вклучително и со поврзување на екранот преку i2c.

Краток опис на LCD 1602 пинови

Ајде внимателно да ги разгледаме пиновите LCD1602:

Секој од заклучоците има своја цел:

  1. Земјата GND;
  2. Напојување 5 V;
  3. Поставување на контрастот на мониторот;
  4. Команда, податоци;
  5. Пишување и читање податоци;
  6. овозможи;

7-14. Линии за податоци;

  1. Плус позадинско осветлување;
  2. Минус позадинско осветлување.

Спецификации за приказ:

  • Симболичен тип на дисплеј, можно е да се вчитаат симболи;
  • LED светла;
  • Контролер HD44780;
  • Напојувачки напон 5V;
  • Форматирајте 16x2 знаци;
  • Работен температурен опсег од -20C до +70C, температурен опсег на складирање од -30C до +80C;
  • Агол на гледање 180 степени.

Дијаграм за поврзување на LCD со Arduino плоча без i2C

Стандардната шема за поврзување на монитор директно со Arduino микроконтролер без I2C е како што следува.

Поради големиот број контакти што треба да се поврзат, може да нема доволно простор за поврзување на потребните елементи. Користењето на I2C го намалува бројот на жици на 4 и зафатените пинови на 2.

Каде да купите LCD екрани и штитови за arduino

LCD екранот 1602 (и верзијата од 2004 година) е доста популарен, така што лесно можете да го најдете и во домашните онлајн продавници и на странските страници. Еве неколку линкови до најдостапните опции:

LCD1602+I2C модул за син екран компатибилен со Arduino Едноставен LCD1602 дисплеј (зелено позадинско осветлување) поевтин од 80 рубли Голем екран LCD2004 со I2C HD44780 за arduino (сино и зелено позадинско осветлување)
Екран 1602 со IIC адаптер и сино позадинско осветлување Друга верзија на LCD1602 со залемен I2C модул Модул за адаптер за порт IIC/I2C/TWI/SPI за 1602 Shield компатибилен со Arduino
RGB екран со позадинско осветлување! LCD 16×2 + тастатура + Buzzer Shield за Arduino Штит за Arduino со копчиња и екран LCD1602 LCD 1602 LCD дисплеј за 3D печатач (паметен контролер за RAMPS 1.4, Текст LCD 20×4), модул за читач на картички SD и MicroSD

Опис на протоколот I2C

Пред да разговараме за поврзување на дисплеј со arduino преку адаптер i2c, ајде накратко да зборуваме за самиот протокол i2C.

I2C / IIC(Inter-Integrated Circuit) е протокол првично создаден за комуникација интегрирани колавнатре Електронски уред. Развојот му припаѓа на Philips. Протоколот i2c се заснова на употреба на 8-битна магистрала, која е потребна за поврзување блокови во контролната електроника и систем за адресирање, благодарение на кој можете да комуницирате со неколку уреди преку истите жици. Ние едноставно пренесуваме податоци на еден или друг уред, додавајќи го идентификаторот на саканиот елемент во пакетите со податоци.

Најмногу едноставно коло I2C може да содржи еден главен (најчесто Arduino микроконтролер) и неколку slave (на пример, LCD дисплеј). Секој уред има адреса во опсег од 7 до 127. Не треба да има два уреди со иста адреса во истата шема.

Плочката Arduino поддржува i2c во хардвер. Можете да ги користите пиновите A4 и A5 за поврзување уреди користејќи го овој протокол.

Има неколку предности за работа со I2C:

  • За работа се потребни само 2 линии - SDA (линија за податоци) и SCL (линија на часовникот).
  • Поврзување на голем број водечки уреди.
  • Намалување на времето за развој.
  • Потребен е само еден микроконтролер за контрола на целиот сет на уреди.
  • Можниот број на микроциркули поврзани со една магистрала е ограничен само со максималниот капацитет.
  • Висок степен на безбедност на податоците поради специјален филтер за потиснување на пренапоните вграден во кола.
  • Едноставна процедура за дијагностицирање на новите неуспеси, брзо решавање проблеми.
  • Автобусот е веќе интегриран во самиот Arduino, така што нема потреба да се развива дополнителен автобус интерфејс.

Недостатоци:

  • Постои капацитивна граница на линијата - 400 pF.
  • Тешкотии со програмирање на контролерот I2C ако има неколку различни уреди во автобусот.
  • Со голем број уреди, станува тешко да се локализира дефект ако еден од нив погрешно постави состојба на ниско ниво.

i2c модул за LCD 1602 Arduino

Најбрзиот и најзгодниот начин за користење i2c дисплеј во arduino е да купите готов екран со вградена поддршка за протокол. Но, овие екрани не се многу и не се евтини. Но, огромен број на различни стандардни екрани веќе се објавени. Затоа, најприфатлива и најпопуларна опција денес е да купите и користите посебен I2C модул - адаптер што изгледа вака:

На едната страна од модулот ги гледаме пиновите i2c - заземјување, напојување и 2 за пренос на податоци. На другиот адаптер ги гледаме надворешните конектори за напојување. И, се разбира, има многу иглички на таблата, со помош на кои модулот се леме на стандардните пинови на екранот.


Излезите I2c се користат за поврзување со плочката Arduino. Доколку е потребно, поврзете надворешно напојување за осветлување. Со вградениот тример можеме да ги приспособиме вредностите на контрастот J

На пазарот можете да најдете LCD 1602 модули со веќе залемени адаптери, нивната употреба е максимално поедноставена. Ако купивте посебен адаптер, ќе треба претходно да го залемете на модулот.

Поврзување на LCD екран со Arduino преку I2C

За да се поврзете, потребна ви е самата плочка Arduino, дисплеј, табла за леб, жици за поврзување и потенциометар.

Ако користите специјален посебен адаптер за i2c, тогаш прво мора да го залемете на модулот на екранот. Тешко е да се направи грешка таму, може да се водите по таква шема.


LCD монитор со овозможен i2c е поврзан на плочата користејќи четири жици - две жици за податоци, две жици за напојување.

  • GND пинот е поврзан со GND на таблата.
  • Пинот VCC е 5V.
  • SCL е поврзан со пинот A5.
  • SDA е поврзан со пинот А.

И тоа е се! Без пајажина од жици, во кои е многу лесно да се збуни. Во исто време, можеме едноставно да ја довериме целата сложеност на имплементацијата на протоколот i2C на библиотеките.

Библиотеки за работа со i2c LCD дисплеј

За поврзување на Arduino со LCD 1602 преку магистралата I2C, ќе ви требаат најмалку две библиотеки:

  • Библиотеката Wire.h за работа со I2C е веќе достапна во стандардот Ардуино програма IDE.
  • Библиотеката LiquidCrystal_I2C.h, која вклучува широк спектар на команди за контролирање на мониторот преку магистралата I2C и ви овозможува да ја направите скицата полесна и пократка. Треба дополнително да ја инсталирате библиотеката Откако ќе го поврзете екранот, треба дополнително да ја инсталирате библиотеката LiquidCrystal_I2C.h

Откако ќе ги поврземе сите потребни библиотеки со скицата, создаваме објект и можеме да ги користиме сите негови функции. За тестирање, да ја вчитаме следнава стандардна скица од примерот.

#вклучи #вклучи // Поврзување на библиотеката //#include // Поврзување на алтернативната библиотека LiquidCrystal_I2C lcd(0x27,16,2); // Наведете ја адресата I2C (најчестата вредност), како и параметрите на екранот (во случај на LCD 1602 - 2 линии од по 16 знаци //LiquidCrystal_PCF8574 lcd(0x27); // Варијанта за поставување празнина на библиотеката PCF8574 () ( lcd.init (); // Иницијализирајте го екранот lcd.backlight(); // Поврзете го задно осветлување lcd.setCursor(0,0); // Поставете го курсорот на почетокот на првата линија lcd.print( „Здраво“); // Напишете текст на првата линија lcd.setCursor(0,1); // Поставете го курсорот на почетокот на втората линија lcd.print(„ArduinoMaster“); // Внесете текст на втората линија ) void loop() ( )

Опис на функциите и методите на библиотеката LiquidCrystal_I2C:

  • home() и clear() - првата функција ви овозможува да го вратите курсорот на почетокот на екранот, втората исто така, но во исто време брише сè што претходно беше на мониторот.
  • write(ch) - ви овозможува да испечатите еден знак ch на екранот.
  • курсор() и noCursor() - прикажи/скриј го курсорот на екранот.
  • blink() и noBlink() - курсорот трепка/не трепка (ако неговиот приказ бил овозможен претходно).
  • display() и noDisplay() - ви овозможува да го овозможите/оневозможите приказот.
  • scrollDisplayLeft() и scrollDisplayRight() - го лизга екранот еден знак лево/десно.
  • autoscroll() и noAutoscroll() - ви овозможува да го овозможите/оневозможите режимот на автоматско скролување. Во овој режим, секој нов знак се запишува на истото место, заменувајќи го претходно напишаното на екранот.
  • leftToRight() и rightToLeft() - Ја поставува насоката на прикажаниот текст - лево кон десно или десно кон лево.
  • createChar(ch, bitmap) - Создава лик со код ch (0 - 7) со помош на низа битмапи битмапи за креирање црно-бели точки.

Алтернативна библиотека за работа со i2c дисплеј

Во некои случаи, при користење на наведената библиотека со уреди опремени со контролери PCF8574, може да се појават грешки. Во овој случај, библиотеката LiquidCrystal_PCF8574.h може да се понуди како алтернатива. Го проширува LiquidCrystal_I2C, така што не треба да има никакви проблеми со неговото користење.

Проблеми со поврзувањето на LCD дисплејот на i2c

Ако не гледате ништо на екранот по поставувањето на скицата, обидете се со следните чекори.

Прво, можете да го зголемите или намалите контрастот на мониторот. Честопати ликовите едноставно не се видливи поради режимот на контраст и позадинско осветлување.

Ако ова не помогне, тогаш проверете ја правилното поврзување на контактите, дали позадинското осветлување се напојува. Ако користевте посебен адаптер за i2c, тогаш повторно проверете го квалитетот на лемењето на контактите.

Друга честа причина за недостаток на текст на екранот може да биде погрешната i2c адреса. Обидете се прво да ја смените адресата на уредот во скицата од 0x27 0x20 или на 0x3F. Различни производители може да имаат различни стандардни адреси. Ако ова не помогне, можете да ја извршите скицата на скенерот i2c, која ги скенира сите поврзани уреди и ја одредува нивната адреса со брутална сила. Пример скица на i2c скенер.

Ако екранот сè уште не работи, обидете се да го одлемите адаптерот и да го поврзете LCD-от на вообичаен начин.

Заклучок

Во оваа статија, ги опфативме главните прашања за користење на LCD екранот во сложените проекти на Arduino кога треба да зачуваме бесплатни пинови на таблата. Едноставен и ефтин i2c адаптер ќе ви овозможи да поврзете 1602 LCD екран, зафаќајќи само 2 аналогни пинови. Во многу ситуации ова може да биде многу важно. Цената за погодност е потребата да се користи дополнителен модул - конвертор и библиотека. Според наше мислење, ова не е висока цена за погодност и топло препорачуваме да ја користите оваа функција во проекти.

Што е составен дел на голем број електронски уреди? Се разбира, средства за индикација и графички излез на податоци. Секогаш е поудобно и попријатно за корисникот кога резултатот од „паметната кутија“ може да се види визуелно. Затоа, денес ќе поврземе дисплеј со STM32 за прикажување на текст и броеви. Херојот на нашите експерименти ќе биде прилично популарен приказ од Winstar. Патем, во коментарите се појави важно појаснување дека техниката е во основа иста за сите прикази врз основа на HD44780.Благодарност до JekaKey за важен додаток)

За почеток, дисплејот всушност мора да биде поврзан со контролорот. Преземете го листот со податоци и побарајте го пинот WH1602. Погледнете тука:

Како што знаете, приказ WH1602има 16 пинови. Ајде да го разгледаме секој поединечно...

Пиновите Vss, Vdd и K треба да се поврзат со земјата и напојувањето, односно директно како што е наведено во табелата, нема изненадувања, па дури и нема што да се дискутира)

Пинот број 3 служи за прилагодување на контрастот - ако нанесеме +5V таму, нема да видиме апсолутно ништо, а ако го скратиме иглата на земја, ќе се восхитуваме на два реда црни квадрати 😉 Нормално, ова не ни одговара, па ни треба да закачите потенциометар (отпорник со променлив отпор) за да го прилагодите контрастот. Најдобрата видливост на знаците е обезбедена со напон од 0,5-0,7 V на овој пин на екранот.

RS пинот е веќе излез што ние самите ќе го контролираме со помош на микроконтролер. Ниско напонско ниво (0) на овој пин значи дека сега ќе следи команда, високото ниво (1) значи дека сега ќе има податоци што треба да се запишат во меморијата на екранот.

Пин R / W - тука е јасно, или ги читаме податоците (на пример, знамето зафатено на екранот), во овој случај, оваа игла е 1, или ја пишуваме командата / податоците на екранот, тогаш имаме 0 овде.

DB7 - DB0 - податочна магистрала, и тоа кажува се)

Пин E е таканаречениот сигнал Enable. Тој е потребен за ова. За да работиме со екранот - напишете податоци или дајте команда - треба да му дадеме позитивен пулс на оваа игла. Тоа е, постапката ќе изгледа вака:

  1. На пиновите RS, R / W, DB7 - DB0 - потребните сигнали што одговараат на нашиот тим.
  2. Нахранете еден за да излезе E.
  3. Zhdems (според листот со податоци - најмалку 150 ns)
  4. Ние применуваме ниско ниво (0) на излезот Е.

Треба да ставите 4,2 V на A / Vee ногата за да го напојувате осветлувањето на екранот.

Вака се одвива комуникацијата со екранот WH1602.

Ја сфативме врската WH1602, но пред да преминеме на примерот, ајде да размислиме кои команди ги разбира нашиот екран воопшто. За да го направите ова, се качуваме во листот со податоци и наоѓаме интересна табела:

Ги опишува сите команди и сигнали што треба да бидат на соодветните WH1602 пинови за секоја конкретна команда. На пример, сакаме да го исчистиме екранот, да ја погледнеме табелата и тука е вистинската команда! јасен приказ!

Ние внесуваме нули на пиновите RS, R/W, DB7, DB6, DB5, DB4, DB3, DB2, DB1 и единица на ногата DB0. Готово! Што е следно? Така е, еден на пинот E, потоа почекајте малку и спуштете го E повторно на нула. Тоа е сè, екранот е исчистен 😉 Само пред да ја извршите следната команда, мора да паузирате, наведено во листот со податоци за секоја команда. Ќе биде поефикасно да се анкетира знамето зафатено, штом ќе се ресетира на 0, можете да продолжите да работите. Има и посебна команда за читање на ова знаме, па со ова се е јасно) Да продолжиме понатаму ...

И, всушност, тоа е сè со теоријата, веќе може да се обидете да напишете нешто. За полесно да се работи со дисплејот, направив мала библиотека, сега да видиме како може да се користи. За да започнете, преземете

Добиваме на располагање 2 датотеки, MT_WH1602.c и MT_WH1602.h. Ние го откинуваме вториот, тука треба да направиме избор на заклучоци и користен контролер.

Патем, мојот дисплеј е поврзан вака:

RS-PC2
R/W-PB10
E-PB14
DB7-PD2
DB6-PC12
DB5-PA8
DB4-PA10
DB3-PA15
DB2-PD11
DB1-PA3
DB0-PA5

Отворете ја датотеката MT_WH1602.h:

#define ПЛАТФОРМА (STM32F10x)

Следно, изберете ги пиновите на микроконтролерот на кои е поврзан екранот. Само прво, ајде да поставиме кои пристаништа ги имаме вклучено. Еве, кога се поврзувам, користам GPIOA, GPIOB, GPIOC и GPIOD, пишуваме:

Слично на другите краци на микроконтролерот.

Завршивме со поставките, да продолжиме) За да ги повикаме командите дадени на почетокот на статијата, датотеката MT_WH1602.c ги содржи следните функции (тие се именувани по имињата на командите, така што мислам дека сè е јасно овде ):

void MT_WH1602_ClearDisplay(void ) ; void MT_WH1602_ReturnHome(void ) ; void MT_WH1602_EntryModeSet (Bool ID-адреса, bool shift) ; void MT_WH1602_DisplayOnOff (bool Dbit, bool Cbit, bool Bbit) ; void MT_WH1602_CursorOrDisplayShift (bool SCbit, bool RLbit); void MT_WH1602_FunctionSet (bool DLbit, bool Nbit, bool Fbit); void MT_WH1602_SetCGRAMAaddress (uint8_t адреса) ; void MT_WH1602_SetDDRAMaddress (uint8_t адреса) ; bool MT_WH1602_ReadBusy(void ) ; void MT_WH1602_WriteData(uint8_t податоци) ;

За некои команди, треба да ги пренесеме параметрите на функцијата, на пример:

void MT_WH1602_DisplayOnOff (bool Dbit, bool Cbit, bool Bbit) ;

Погледнете ја командната табела:

Гледаме дека командата Display ON / OFF не само што го вклучува / исклучува екранот, туку и го активира / деактивира курсорот и трепкањето на курсорот. Во листот со податоци, овие командни битови се означени како D, C и B, а потоа ги пренесуваме како параметри на функцијата. Ако треба да ги овозможиме приказот и курсорот, но да го оневозможиме трепкањето на курсорот, ја повикуваме командата на следниов начин:

MT_WH1602_DisplayOnOff(1, 1, 0);

Во принцип, сè е едноставно 😉

Накратко, создаваме нов проект, додаваме библиотека за работа со екранот WH1602, создаваме празна датотека .c и почнуваме да ја пополнуваме со код:

// Вклучете ја библиотечната датотека#include "MT_WH1602.h" /*******************************************************************/ int main(void) ( // Повикајте ја функцијата за иницијализација, без ова, никаде =)() ; // Сега треба да ја направиме почетната конфигурација на екранот // Документацијата и интернетот препорачуваат да го направите ова ;) MT_WH1602_FunctionSet(1, 0, 0); MT_WH1602_Delay(1000); MT_WH1602_FunctionSet(1, 0, 0); MT_WH1602_Delay(1000); MT_WH1602_FunctionSet(1, 0, 0); MT_WH1602_Delay(1000); MT_WH1602_FunctionSet(1, 1, 1); MT_WH1602_Delay(1000); MT_WH1602_DisplayOnOff(1, 0, 0); MT_WH1602_Delay(1000); MT_WH1602_ClearDisplay(); MT_WH1602_Delay(2000); // Овде ги земав првите вредности на доцнењето за пример што ми падна на ум) // Во принцип, треба да го проверите знамето за зафатено на екранот // Ајде сега да прикажеме нешто како името на нашата страница MT_WH1602_WriteData(0x6D); MT_WH1602_Delay(100); MT_WH1602_WriteData(0x69); MT_WH1602_Delay(100); MT_WH1602_WriteData(0x63); MT_WH1602_Delay(100); MT_WH1602_WriteData(0x72); MT_WH1602_Delay(100); MT_WH1602_WriteData(0x6F); MT_WH1602_Delay(100); MT_WH1602_WriteData(0x74); MT_WH1602_Delay(100); MT_WH1602_WriteData(0x65); MT_WH1602_Delay(100); MT_WH1602_WriteData(0x63); MT_WH1602_Delay(100); MT_WH1602_WriteData(0x68); MT_WH1602_Delay(100); MT_WH1602_WriteData(0x6E); MT_WH1602_Delay(100); MT_WH1602_WriteData(0x69); MT_WH1602_Delay(100); MT_WH1602_WriteData(0x63); MT_WH1602_Delay(100); MT_WH1602_WriteData(0x73); MT_WH1602_Delay(100); MT_WH1602_WriteData(0x2E); MT_WH1602_Delay(100); MT_WH1602_WriteData(0x72); MT_WH1602_Delay(100); MT_WH1602_WriteData(0x75); MT_WH1602_Delay(100); додека (1) (__NOP() ;)) /*******************************************************************/

Готово, проверете)


Како што можете да видите, сè работи правилно)

Патем, некако го изгубив од вид прашањето што да напишам на екранот за да се прикаже овој или оној знак. Еве ја табличката од листот со податоци:

Значи, за да одредите која вредност да се напише во меморијата на екранот, треба да ги земете броевите напишани на врвот и оставени во оваа табела за одреден знак. На пример, ликот „А“. Гледаме - овој знак одговара на колоната 0100 (0x4) и линијата 0001 (0x1). Излегува дека за да се прикаже знакот „А“, треба да ја напишете вредноста 0x41 на екранот.

Сега се чини дека сè е =) Ја сфативме врската и работата на екранот WH1602, па се гледаме наскоро!

П.С. Кога работев со библиотеката, не ја тестирав функцијата за читање на знамето зафатено, па ако одеднаш нешто не функционира како што треба, пишете, ќе го сфатиме)

Понекогаш се соочуваме со проблем да исфрлиме разни информации од Arduino до надворешниот свет. Често, користењето на сериска порта е невозможно, незгодно и непрофитабилно.

Приказот на знаци е едно од наједноставните и најевтините средства за прикажување информации, бидејќи има свој микроконтролер, во чија меморија се чуваат кодираните знаци. Таквиот систем ја поедноставува употребата на овие дисплеи, но во исто време ја ограничува нивната употреба само на излез текстуални информации, за разлика од графичките прикази.

Во примерот, ќе го разгледаме екранот Winstar wh1602l1 - еден од најчестите прикази на контролерот hd44780. Дополнително, можете да поврзете LCD 2004 и други слични.
Првите две цифри го означуваат бројот на знаци по линија, а вториот број на линии, така што избраниот приказ има 2 линии од 16 знаци.
Овој метод на поврзување вклучува зафаќање на најмалку 6 порти на микроконтролерот Arduino. Доколку е потребно, можете да поврзете текстуален дисплеј 1602 преку интерфејсот I2C (2 порти).

Од дополнителните елементи што ни се потребни променлив отпорник, за контрола на контрастот. Инаку, сè е поврзано според шемата, според листот со податоци и избраните Arduino излези во програмата.

Пиновите 15 и 16 на екранот се одговорни за позадинското осветлување, можете да го исклучите или да направите автоматска контрола на осветленоста кога поврзувате фотоотпорник со сензор за осветленост Arduinoas.

Во нашиот пример, ќе прочитаме податоци од сериската порта и ќе ги прикажеме на екранот:

#вклучи // Ја поврзуваме библиотеката за работа со прикази на знаци LiquidCrystal lcd(13, 11, 5, 4, 3, 2); // (RS, E, D4, D5, D6, D7) поврзете ги излезите на екранот според низата, R/W - GND, бидејќи ќе пишуваме податоци на екранот, а не ќе читаме void setup() ( lcd.begin( 16, 2); // Иницијализирај LCD 1602 // lcd.begin(20, 4); // Иницијализирај LCD 2004 Serial.begin(9600); // Стартувај сериска порта ) void loop() ( if (Serial.available( )) // Ако примам податоци од портата, тогаш... ( доцнење(100); lcd.clear(); // Целосно исчистете го екранот додека (Serial.available() > 0) // Ако јас Добивам податоци од портата поголеми од 0, а потоа ... ( lcd.write(Serial.read()); // Читајте ги вредностите од сериската порта и прикажувајте ги на екранот) )

Можете да го искомплицирате кодот и да го изнесете часовникот во реално време Arduino DS1307 на вашиот LCD1602.

Сега да ги разгледаме подетално сите функции во библиотеката Течен кристал:

Првата и најважна работа е што користејќи ја оваа библиотека не можете да прикажете руски букви, дури и ако екранот ги има овие знаци во меморијата. Овој проблем се решава или со други библиотеки или со пишување вредности со помош на хексадецимален код.

lcd.print();- наједноставниот и најчесто користен, кој се користи за прикажување информации.

ЛЦД. јасно(); - се користи за чистење на екранот.

LCD.setCursor(x, y); - го става курсорот на одредено место.

X - промена на положбата во линијата

Y - промена на линијата

На пример, lcd.setCursor(0, 0); ова е горната лева ќелија.

lcd.home(); -го става курсорот на позиција 0, 0

lcd.home(); = lcd.setCursor(0, 0);

ЛЦД. scrollDisplayLeft(); - смена лево

ЛЦД. scrollDisplayRight(); - десна смена

LCD.createChar(име, низа); - создавање на свој знак.

На пример, знакот за степен изгледа вака:

Celc = (B00111, B00101, B00111, B00000, B00000, B00000, B00000, B00000);




Врв