LSD ekrāna savienojums. Apmācības kurss

Katrs radioamatieris pēc dažiem vienkāršiem paštaisītiem projektiem nonāk pie mērķa konstruēt kaut ko grandiozu, izmantojot sensorus un pogas. Galu galā ir daudz interesantāk parādīt datus displejā, nevis porta monitorā. Bet tad rodas jautājums: kādu displeju izvēlēties? Un vispār, kā to savienot, kas ir nepieciešams, lai savienotu? Atbildes uz šiem jautājumiem tiks apspriestas šajā rakstā.

LCD 1602

Starp daudzajām displeja opcijām es vēlos īpaši minēt LCD1602 displeju, kura pamatā ir HD4478 kontrolieris. Šis displejs ir pieejams divās krāsās: balti burti uz zila fona, melni burti uz dzeltena fona. LCD 1602 pievienošana Arduino arī neradīs nekādas problēmas, jo ir iebūvēta bibliotēka un nekas nav jālejupielādē. Displeji atšķiras ne tikai pēc cenas, bet arī pēc izmēra. Bieži radio amatieri izmanto 16 x 2, tas ir, 2 rindas pa 16 rakstzīmēm. Bet ir arī 20 x 4, kur ir 4 rindas pa 20 rakstzīmēm. Izmēriem un krāsai nav nozīmes, savienojot lcd 1602 displeju ar Arduno, tie ir savienoti vienādi. Skata leņķis ir 35 grādi, displeja reakcijas laiks ir 250 ms. Tas var darboties temperatūrā no -20 līdz 70 grādiem pēc Celsija. Darbības laikā tas izmanto 4 mA ekrānam un 120 mA fona apgaismojumam.

Kur tas tiek izmantots?

Šis displejs ir populārs ne tikai radioamatieru, bet arī lielo ražotāju vidū. Piemēram, printeri un kafijas automāti izmanto arī LCD1602. Tas ir saistīts ar tā zemo cenu, Ķīnas vietnēs šis displejs maksā 200-300 rubļu. Ir vērts tur iegādāties, jo mūsu veikalos uzcenojumi šim displejam ir ļoti augsti.

Savienojuma izveide ar Arduino

LCD 1602 pievienošana Arduino Nano un Uno neatšķiras. Ar displeju var strādāt divos režīmos: 4 bitu un 8. Strādājot ar 8 bitu, tiek izmantoti gan zemās kārtas, gan augstākās kārtas biti, bet ar 4 bitu – tikai zemākās kārtas biti. Nav īpašas jēgas strādāt ar 8 bitu, jo tas pievienos vēl 4 kontaktus savienojumam, kas nav ieteicams, jo ātrums nebūs lielāks, displeja atjauninājumu ierobežojums ir 10 reizes sekundē. Kopumā, lai savienotu lcd 1602 ar Arduino, tiek izmantots daudz vadu, kas rada zināmas neērtības, bet ir speciāli vairogi, bet par to vēlāk. Fotoattēlā parādīts displeja savienojums ar Arduino Uno:

Koda paraugs:

#iekļauts // Pievienojiet nepieciešamo LiquidCrystal bibliotēku lcd(7, 6, 5, 4, 3, 2); // (RS, E, DB4, DB5, DB6, DB7) void setup())( lcd.begin(16, 2); // Ekrāna izmēra iestatīšana lcd.setCursor(0, 0); // Kursora iestatīšana uz sākumu 1 rindiņas lcd.print("Sveika, pasaule!" // Drukāt tekstu lcd.setCursor(0, 1) // Uzstādiet kursoru uz 2. rindas sākumu lcd.print("site"); // Drukāt tekstu ) Void loop ()( )

Ko dara kods? Pirmais solis ir savienot bibliotēku darbam ar displeju. Kā minēts iepriekš, šī bibliotēka jau ir iekļauta Arduino IDE, un tā nav jālejupielādē un jāinstalē papildus. Tālāk tiek noteikti kontakti, kas ir savienoti ar tapām: attiecīgi RS, E, DB4, DB5, DB6, DB7. Pēc tam tiek iestatīts ekrāna izmērs. Tā kā mēs strādājam ar versiju ar 16 rakstzīmēm un 2 rindām, mēs rakstām šādas vērtības. Mēs novietojam kursoru pirmās rindas sākumā un parādām mūsu pirmo tekstu Hello World. Pēc tam novietojiet kursoru otrajā rindā un parādiet vietnes nosaukumu. Tas ir viss! Tika apsvērta LCD 1602 savienošana ar Arduino Uno.

Kas ir I2C un kāpēc tas ir vajadzīgs?

Kā minēts iepriekš, displeja pievienošana aizņem daudz kontaktu. Piemēram, strādājot ar vairākiem sensoriem un LCD displeju, 1602 tapām var vienkārši nepietikt. Bieži radioamatieri izmanto Uno vai Nano versijas, kurām nav daudz kontaktu. Tad cilvēki nāca klajā ar īpašiem vairogiem. Piemēram, I2C. Tas ļauj pievienot displeju tikai ar 4 kontaktiem. Tas ir divreiz vairāk. I2C modulis tiek pārdots gan atsevišķi, kur nepieciešams pašam pielodēt, gan jau pielodēts pie LCD 1602 displeja.

Savienojums, izmantojot I2C moduli

LCD 1602 savienošana ar Arduino Nano ar I2C aizņem maz vietas, tikai 4 kontakti: zemējums, barošana un 2 datu izejas. Mēs pievienojam strāvu un zemi attiecīgi 5 V un GND uz Arduino. Mēs savienojam atlikušos divus kontaktus: SCL un SDA ar jebkurām analogajām tapām. Fotoattēlā varat redzēt piemēru LCD 1602 savienošanai ar arduino ar I2C moduli:

Programmas kods

Ja darbam ar displeju bez moduļa bija jāizmanto tikai viena bibliotēka, tad darbam ar moduli nepieciešamas divas bibliotēkas. Viens no tiem jau ir iekļauts Arduino IDE - Wire. Vēl viena bibliotēka LiquidCrystal I2C ir jālejupielādē atsevišķi un jāinstalē. Lai instalētu bibliotēku Arduino, lejupielādētā arhīva saturs ir jāielādē saknes bibliotēku mapē. Programmas koda piemērs, izmantojot I2C:

#iekļauts #iekļauts LiquidCrystal_I2C lcd(0x27,16,2); // Iestatīt displeja void setup() ( lcd.init(); lcd.backlight(); // Ieslēdziet displeja fona apgaismojumu lcd..setCursor(8, 1); lcd.print("LCD 1602"); ) void loop( ) ( // Iestatiet kursoru uz otro rindiņu un nulles rakstzīmi. lcd.setCursor(0, 1); // Parāda sekunžu skaitu kopš Arduino palaišanas lcd.print(millis()/1000); )

Kā redzat, kods ir gandrīz vienāds.

Kā pievienot savu simbolu?

Šo displeju problēma ir tāda, ka netiek atbalstīts kirilicas alfabēts un simboli. Piemēram, displejā jāielādē kāds simbols, lai tas to atspoguļotu. Lai to izdarītu, displejs ļauj izveidot līdz pat 7 saviem simboliem. Iedomājieties tabulu:

0 0 0 1 0
0 0 0 0 1
1 1 0 0 1
0 0 0 0 1
1 1 0 0 1
0 0 0 0 1
0 0 0 1 0
0 0 0 0 0

Ja 0 - tur nekā nav, ja 1 - tas ir krāsots laukums. Iepriekš minētajā piemērā varat redzēt simbola "smaidošs smaidiņš" izveidi. Izmantojot programmas piemēru Arduino, tas izskatītos šādi:

#iekļauts #iekļauts // Pievienojiet nepieciešamo bibliotēku // Smaida simbola bitu maska ​​baits smile = ( B00010, B00001, B11001, B00001, B11001, B00001, B00010, ); LiquidCrystal LCD(7, 6, 5, 4, 3, 2); // (RS, E, DB4, DB5, DB6, DB7) void setup())( lcd.begin(16, 2); // Iestatiet ekrāna izmēru lcd.createChar(1, smile); // Izveidot rakstzīmes numuru 1 lcd.setCursor(0, 0) // Iestatīt kursoru uz 1. rindas sākumu lcd.print("\1" // Drukāt smaidiņu (rakstzīmes numurs 1) - "\1" ) void loop(); ) ( )

Kā redzat, bitmaska ​​tika izveidota tāpat kā tabula. Kad tas ir izveidots, to var parādīt displejā kā mainīgo. Atcerieties, ka atmiņā var saglabāt tikai 7 rakstzīmes. Principā ar to pietiek. Piemēram, ja jums ir jāparāda grāda simbols.

Problēmas, kuru gadījumā displejs var nedarboties

Ir gadījumi, kad displejs nedarbojas. Piemēram, tas ieslēdzas, bet nerāda rakstzīmes. Vai arī tas vispār neieslēdzas. Vispirms pārbaudiet, vai tapas ir pievienotas pareizi. Ja izmantojāt LCD 1202 savienojumu ar Arduino bez I2C, ir ļoti viegli sapīties vados, kā rezultātā displejs var nedarboties pareizi. Jums arī jāpārliecinās, ka displeja kontrasts ir palielināts, jo ar minimālo kontrastu pat nav redzams, vai LCD 1602 ir ieslēgts vai nē. Ja tas nepalīdz, iespējams, problēma var būt kontaktu lodēšanai, tas ir, izmantojot I2C moduli. Vēl viens izplatīts iemesls, kāpēc displejs var nedarboties, ir nepareiza I2C adreses iestatīšana. Fakts ir tāds, ka ir daudz ražotāju, un viņi var ievietot citu adresi, jums tas ir jālabo šeit:

LiquidCrystal_I2C lcd(0x27,16,2);

Iekavās var redzēt divas vērtības — 0x27 un 16.2 (16.2 ir displeja izmērs un 0x27 ir I2C adrese). Šo vērtību vietā varat mēģināt iestatīt 0x37 vai 0x3F. Nu vēl viens iemesls ir vienkārši bojāts LCD 1602. Ņemot vērā, ka gandrīz viss priekš Arduino ir ražots Ķīnā, nevar būt 100% pārliecināts, ka iegādātajai precei nav defektu.

LCD 1602 plusi un mīnusi

Apskatīsim LCD 1602 displeja plusus un mīnusus.

  • Cena. Šo moduli var iegādāties par ļoti pieņemamu cenu Ķīnas veikalos. Cena ir 200-300 rubļu. Dažreiz to pat pārdod kopā ar I2C moduli.
  • Viegli savienojams. Droši vien mūsdienās neviens nepievieno LCD 1602 bez I2C. Un ar šo moduli savienojumam ir nepieciešami tikai 4 kontakti, nebūs vadu “tīkla”.
  • Programmēšana. Pateicoties gatavām bibliotēkām, darbs ar šo moduli ir vienkāršs; Un, ja jums ir jāpievieno savs simbols, tas aizņem tikai dažas minūtes.
  • Tūkstošiem radioamatieru tās lietošanas laikā nav konstatēti lieli trūkumi, ir tikai defektu pirkumu gadījumi, jo galvenokārt tiek izmantotas Ķīnas displeja iespējas.

Šajā rakstā tika apskatīta 1602 savienošana ar Arduino, kā arī sniegti programmu piemēri darbam ar šo displeju. Tas patiešām ir viens no labākajiem savā kategorijā, ne velti tūkstošiem radioamatieru to izvēlas saviem projektiem!

LCD displeji ar 1602 izmēriem, pamatojoties uz HD44780 kontrolieri, ir vieni no vienkāršākajiem, pieejamākajiem un populārākajiem displejiem dažādu elektronisko ierīču izstrādei. To var atrast gan ierīcēs, kas samontētas uz ceļa, gan rūpnieciskās ierīcēs, piemēram, kafijas automātos. Uz šī displeja pamata tiek apkopoti populārākie Arduino tēmu moduļi un vairogi, piemēram, un.

Šajā rakstā mēs jums pateiksim, kā to savienot ar Arduino un parādīt informāciju.

Izmantotās sastāvdaļas (pirkt Ķīnā):

. Vadības panelis

. Savienojošie vadi

Šiem displejiem ir divi dizaini: dzeltens fona apgaismojums ar melniem burtiem vai, biežāk, zils fona apgaismojums ar baltiem burtiem.

Displeju izmēri uz HD44780 kontroliera var būt dažādi, taču tie tiks vadīti vienādi. Visizplatītākie izmēri ir 16 x 02 (t.i., 16 rakstzīmes divās rindās) vai 20 x 04. Pašu simbolu izšķirtspēja ir 5x8 pikseļi.

Lielākā daļa displeju neatbalsta kirilicas alfabētu. Bet mēs varam mēģināt daļēji atrisināt šo problēmu (turpinājums rakstā).

Displeja izejas:

Displejam ir 16 kontaktu savienotājs savienošanai. Tapas ir marķētas tāfeles aizmugurē.

1 (VSS) — kontroliera barošanas avots (-)
2 (VDD) — kontroliera barošanas avots (+)
3 (VO) — kontrasta kontroles tapa
4 (RS) - Reģistrācijas atlase
5 (R/W) — lasīšana/rakstīšana (rakstīšanas režīms, kad ir pievienots zemei)
6 (E) — iespējot (strobe, kad tiek samazināts)
7-10 (DB0-DB3) — 8 bitu interfeisa zemas kārtas biti
11-14 (DB4-DB7) — interfeisa augstākās kārtas biti
15 (A) - anoda (+) fona apgaismojuma barošanas avots
16 (K) - katoda (-) fona apgaismojuma barošanas avots

Pašpārbaudes režīms:

Pirms mēģināt izveidot savienojumu un parādīt informāciju, būtu ieteicams noskaidrot, vai displejs darbojas vai ne. Lai to izdarītu, pašam kontrolierim jāpieslēdz spriegums ( VSS un VDD), ieslēdziet fona apgaismojumu ( A un K), kā arī pielāgojiet kontrastu.

Lai pielāgotu kontrastu, izmantojiet 10 kOhm potenciometru. Nav svarīgi, kāda tā būs forma. +5V un GND tiek piegādāti ārējām kājām, centrālā kāja ir pievienota izejai V.O.

Pēc strāvas pieslēgšanas ķēdei ir jāsasniedz pareizs kontrasts, ja tas nav pareizi iestatīts, ekrānā nekas netiks parādīts. Lai pielāgotu kontrastu, spēlējiet ar potenciometru.

Ja ķēde ir pareizi samontēta un kontrasts ir pareizi noregulēts, augšējā līnija jāaizpilda ar taisnstūriem uz ekrāna.

Informācijas izvade:

Displeja darbībai tiek izmantota LiquidCrystal.h bibliotēka, kas iebūvēta Arduino IDE.

Bibliotēkas funkcionalitāte

//Darbs ar kursoru lcd.setCursor(0, 0); // Iestatiet kursoru (šūnas numurs, rinda) lcd.home(); // Iestatīt kursoru uz nulli (0, 0) lcd.cursor(); // Iespējot kursora redzamību (pasvītrot) lcd.noCursor(); // Noņemt kursora redzamību (pasvītrot) lcd.blink(); // Iespējot kursora mirgošanu (kursors 5x8) lcd.noBlink(); // Izslēgt kursora mirgošanu (kursors 5x8) //Informācijas izvade lcd.print("vietne"); // Informācijas izvade lcd.clear(); // Notīrīt displeju, (dzēst visus datus) iestatiet kursoru uz nulli lcd.rightTo Left(); // Ieraksts tiek veikts no labās puses uz kreiso lcd.leftToRight(); // Rakstīšana tiek veikta no kreisās puses uz labo lcd.scrollDisplayRight(); // Pārbīdiet visu displejā vienu rakstzīmi pa labi lcd.scrollDisplayLeft(); // Pārbīdiet visu displejā vienu rakstzīmi pa kreisi //Spiegiem noderīga informācija :) lcd.noDisplay(); // Informācija displejā kļūst neredzama, dati netiek dzēsti // ja brīdī, kad šī funkcija ir aktīva, nekas netiek rādīts, tad lcd.displejs(); // Izsaucot displeja() funkciju, visa informācija, kas bija

Pats displejs var darboties divos režīmos:

8 bitu režīms - šim nolūkam tiek izmantoti gan zemie, gan augstie biti (BB0-DB7)

4 bitu režīms - šim nolūkam tiek izmantoti tikai vismazāk nozīmīgie biti (BB4-DB7)

Šajā displejā nav ieteicams izmantot 8 bitu režīmu. Tās darbībai ir vajadzīgas vēl 4 kājas, un ātruma palielināšanās praktiski nav, jo Šī displeja atsvaidzes intensitāte ir ierobežota< 10раз в секунду.

Lai izvadītu tekstu, ir jāpievieno tapas RS, E, DB4, DB5, DB6, DB7 ar kontrollera tapām. Tos var savienot ar jebkuriem Arduino tapām, galvenais ir iestatīt pareizo secību kodā.

Koda paraugs:

#iekļauts LiquidCrystal LCD(7, 6, 5, 4, 3, 2); nederīgs uzstādīt()(lcd.begin(16, 2); // Iestatiet ekrāna izmēru lcd.setCursor(0, 0); lcd.print("Sveika, pasaule!"); // Parādīt tekstu lcd.setCursor (0, 1); // Novietojiet kursoru uz 2. rindas sākumu lcd.print("vietne"); // Izvades teksts ) spēkā neesošs cilpa (){ }

Izveidojiet savus simbolus

Esam sakārtojuši teksta izvadi, angļu alfabēta burti ir iestrādāti kontrollera atmiņā displeja iekšpusē, un ar tiem nav nekādu problēmu. Bet ko darīt, ja kontrollera atmiņā nav vajadzīgā simbola?

Nav problēmu, nepieciešamo simbolu var izveidot manuāli (kopā līdz 7 simboliem). Šūnai displejos, kurus mēs apsveram, ir 5x8 pikseļu izšķirtspēja. Simbola izveides uzdevums ir tikai uzrakstīt mazliet masku un ievietot tajā vienus vietās, kur punkti ir jāiedegas un nulles, kur nevajadzētu.

Tālāk esošajā piemērā mēs uzzīmēsim smaidošu seju.

Koda paraugs

//Tests uz Arduino IDE 1.0.5#iekļauts #iekļauts // Pievienojiet nepieciešamo bibliotēku // Smaida simbola bitmaska baits smaids = ( B00010, B00001, B11001, B00001, B11001, B00001, B00010, ); LiquidCrystal LCD(7, 6, 5, 4, 3, 2); // (RS, E, DB4, DB5, DB6, DB7) nederīgs uzstādīt()(lcd.begin(16, 2); // Iestatiet ekrāna izmēru lcd.createChar(1, smaids); // Izveidojiet simbola numuru 1 lcd.setCursor(0, 0); // Novietojiet kursoru uz 1 rindas sākumu lcd.print("\1"); // Parādīt smaidiņu (rakstzīmes numurs 1) — "\1") spēkā neesošs cilpa (){ }

Bonuss

Komentāros kāds kopienas dalībnieks nosūtīja saiti uz simbolu ģeneratoru

  • igorka

      rakstzīmju ģenerators, kā iepriekš,
      Es to izdarīju, jo nebiju vājš)

Šoreiz gribu pastāstīt, kā savienot displeju no mobilā telefona Nokia 1202 ar Atmega8 mikrokontrolleru. Programmējam CodeVision vidē. Es varētu kļūdīties šeit un tur. Nepagāja ilgs laiks, kad es sapratu, kas ir kas. Man nav programmēšanas pieredzes, un es nerakstīju bibliotēku darbam ar displeju. Tie tika nokopēti no viena projekta internetā. Tur ir ierakstītas visas nepieciešamās funkcijas, un ir 5 * 8 fonts latīņu burtiem un kirilicā. Ir arī pāris rakstzīmes 12*16 un 24*32, kuras bibliotēku autors izmantoja savā ierīcē. Ja tos noņemsit, 5*8 ​​fonts aizņems aptuveni 700 baitus mikrokontrollera zibspuldzes. Tāpēc projekta mikrokontrolleris ir jāņem “treknāks” Manā gadījumā izmantoju Atmega8. Pilnīgi pietiekami. Visi faili - avoti, bibliotēka utt., .

Indikatora savienojuma shēma

Shematiska diagramma LCD displeja savienošanai ar MK

Uzzīmēju savienojuma shēmu. Lai darbinātu displeju, nepieciešams 3,3 V spriegums. Ja barojat mikrokontrolleri no 5V, tad uzstādiet rezistoru dalītājus un mikroshēmu 78L33. Ja visa ķēde tiek darbināta no 3,3 V, rezistoru sadalītāji nav nepieciešami. Šķiet, ka Atmega8A var darboties no 3.3V ar nosacījumu, ka frekvence nav augstāka par 8 MHz. Personīgi es to neesmu mēģinājis. Man viss ir samontēts uz atkļūdošanas plates, ko darbina 5V. Nekādā gadījumā nevajadzētu likt lielas ietilpības elektrolītu paša displeja priekšā. Pašā darbības sākumā kontrolieris displejā nosūta inicializācijas komandas. Kondensatora uzlādēšanai nepieciešams laiks. Kamēr tas tiek uzlādēts un displejs sāk darboties, paies kāds laiks, un tas nesaņems inicializācijas komandu. Protams, tās ir milisekundes, taču šajā gadījumā efekts ir pamanāms.


Parādīt izgriešanas diagrammu

Nokia 1202 displejam ir 9 bitu SPI interfeiss. Mūsu izvēlētajam mikrokontrollerim nav šīs greznības. Tāpēc, lai sazinātos ar displeju, mēs izmantojam nevis aparatūru, bet gan programmatūras SPI, tā sakot, es jums neteikšu, kā izveidot jaunus projektus CodeVision - padomājiet paši PORTB tapas ir jākonfigurē kā izvade Projekta iestatījumos ir jāatzīmē ". Glabājiet globālās konstantes zibatmiņā" Šī darbība ir nepieciešama, lai fontu masīvi un mūsu attēli tiktu saglabāti zibatmiņā.


Tātad, mēs izveidojām projektu. Mēs izvēlējāmies mikrokontrolleri, iestatījām pulksteņa frekvenci un konfigurējām projektu. Ko tālāk? Un tad jums ir jāpievieno bibliotēkas darbam ar displeju un aizkaves bibliotēkas. Izsaiņojiet arhīvu. Tur ir divi faili. Tie ir jākopē noteiktās mapēs. Es ceru, ka instalējāt CodeVision tieši C:\ diskdzinī. Ja jā, kopējiet failus uz atbilstošajiem ceļiem:

C:\cvavreval\inc failam 1100.inc un
C:\cvavreval\lib failam 1100.h .


Es arī gribu teikt, ka failā var mainīt mikrokontrollera tapu piešķiršanu 1100.h. Tad savienojuma shēma mainīsies. Sāksim kodēt. Vienkārši parādīsim displejā kādu uzrakstu galvenajā fontā 5*8. Pašā sākumā mēs pievienosim bibliotēkas.

#iekļauts< 1100.h>// displeja bibliotēka
#iekļauts // aizkavēta bibliotēka

Pašā apakšā, pirms galvenās while(1)() cilpas, mēs inicializējam displeju un notīrām to.

lcd_init(); // displeja inicializācija
lcd_clear(); // notīriet displeju

Mēs arī ievietosim savu uzrakstu pirms galvenā cikla. Ļaujiet kontrollerim vispirms parādīt ziņojumu displejā un pēc tam griezties galvenajā cilpā. Mēs rakstām šo:

print_string("Izvadīt uzrakstu",5,0);
print_string("Lai ko mēs vēlamies",0,1);
print_string("BUCKER",10,2);

Es domāju, ka šeit viss ir skaidrs. Pirmais cipars ir x-koordināta displejā. Tā var būt vērtība no 0 līdz 96. Otrais ir virkne. Tas ir no 0 līdz 7. Principā tur iederas 8 ar pusi rindiņas, bet pusi rindiņas neizlasīsim. Mēs apkopojam un mirgojam. Apskatīsim rezultātu. Varat arī instalēt Proteus un pārbaudīt to. Kontrolieri var konfigurēt tā, lai tas darbotos no iekšējā ģeneratora projektā norādītajā frekvencē ar starta aizkavi 64 ms. Pievienoju arhīvu ar sastādīto projektu. Frekvence 8 MHz.


Bet kā jau rakstīju sākumā, bibliotēkā ir arī citi simboli. Tiesa, nav burtu, ir tikai cipari. Tagad nedaudz sarežģīsim uzdevumu. Lai uzraksts nav inerts, bet gan mainās. Pieņemsim, ka tas tiek skaitīts no 0 līdz 9 ar 1 sekundes intervālu. Kad tas sasniedz 9, tas tiks atiestatīts uz nulli un sāksies no jauna. Ņemsim lielus skaitļus, kuru izmērs ir 24*32. Nu, sāksim. Varat izmantot iepriekšējo projektu un izdzēst trīs “print_string” rindas. Tūlīt pēc bibliotēku pievienošanas deklarēsim noteiktu globālo mainīgo m.

char m = 0;

Jūs varat vienkārši uzrakstīt:

Šajā gadījumā tai automātiski tiks piešķirta vērtība 0. Galvenajā cilpā mēs rakstām:

char_24_32(m,35,2); //simbola izvades funkcija 24*32
delay_ms(1000); // pagaidiet 1 sekundi
m++; // pievienot 1 mainīgajam m
ja(m>9)m=0; // Stāvoklis. Ja mainīgais m ir lielāks par 9, tad m ir vienāds ar 0.

Uztaisīju īsu video par programmas darbību

Es mēģināšu jums pastāstīt, kā zīmēt attēlus un parādīt tos displeja ekrānā. Kā izveidot masīvus un funkcijas to izvadīšanai un kā invertēt attēlu. Bibliotēkas tika aizgūtas no vietnes cxem.net. Materiāls sagatavots Boozer.

Apspriediet rakstu DISPLEJA SAVIENOŠANA AR MIKROKONTROLIERI

Kas ir daudzu elektronisko ierīču neatņemama sastāvdaļa? Protams, indikācijas līdzekļi un datu grafiskā izvade. Lietotājam vienmēr ir ērtāk un patīkamāk, ja “viedās kastes” rezultāts ir redzams vizuāli. Tāpēc šodien mēs savienosim displeju ar STM32, lai parādītu tekstu un ciparus. Mūsu eksperimentu varonis būs diezgan populārs Winstar displejs. Starp citu, komentāros parādījās būtisks precizējums, ka metodika būtībā ir vienāda visiem displejiem, pamatojoties uz HD44780. Paldies JekaKey par svarīgo papildinājumu)

Pirmkārt, displejam jābūt savienotam ar kontrolieri. Lejupielādējiet datu lapu un meklējiet WH1602 kontaktdakšu. Apskatīt šeit:

Kā Jūs zinat, displejs WH1602 ir 16 tapas. Apskatīsim katru atsevišķi...

Pins Vss, Vdd un K ir jāpievieno zemei ​​un strāvas padevei, tas ir, tieši tā, kā norādīts tabulā, nav pārsteigumu un pat nav ko apspriest)

Piespraudes numurs 3 tiek izmantots kontrasta regulēšanai - ja mēs tur pieliksim +5V, mēs neredzēsim pilnīgi neko, un, ja mēs īssavienojumu tapu ar zemi, mēs apbrīnosim divas melnu kvadrātu rindas 😉 Protams, tas mums neder , tāpēc mums tur jāpakar potenciometrs (rezistors) ar mainīgu pretestību), lai pielāgotu kontrastu. Vislabāko rakstzīmju redzamību nodrošina 0,5–0,7 V spriegums pie šīs displeja tapas.

RS tapa jau ir tapa, kuru mēs paši kontrolēsim, izmantojot mikrokontrolleri. Zems sprieguma līmenis (0) uz šīs tapas nozīmē, ka tagad sekos komanda, augsts līmenis (1) nozīmē, ka tagad būs dati, kas jāieraksta displeja atmiņā.

Pin R/W - šeit ir skaidrs, vai nu mēs nolasām datus (piemēram, tiek rādīts aizņemts karogs), šajā gadījumā uz šīs tapas ir 1, vai arī mēs ierakstām komandu/datus displejā, tad mums šeit ir 0.

DB7 – DB0 – datu kopne, un tas visu izsaka)

Pin E ir tā sauktais Iespējošanas signāls. Tam viņš ir vajadzīgs. Lai strādātu ar displeju - ierakstītu datus vai izdotu komandu - mums ir jāizdod pozitīvs impulss šai tapai. Tas ir, procedūra izskatīsies šādi:

  1. Uz tapām RS, R/W, DB7 - DB0 - nepieciešamie signāli, kas atbilst mūsu komandai.
  2. Mēs piegādājam vienu, lai tapa E.
  3. Zhdems (pēc datu lapas – vismaz 150 ns)
  4. Mēs pieliekam zemu līmeni (0) tapai E.

Lai darbinātu displeja fona apgaismojumu, A/Vee kājiņai ir jāpieslēdz 4,2 V spriegums.

Šādi notiek saziņa ar WH1602 displeju.

Mēs esam izdomājuši savienot WH1602, taču pirms pāriet pie piemēra, apskatīsim, kādas komandas mūsu displejs parasti saprot. Lai to izdarītu, mēs ieejam datu lapā un atrodam interesantu tabulu:

Šeit ir aprakstītas visas komandas un signāli, kuriem jāatrodas uz atbilstošajiem WH1602 tapām katrai konkrētai komandai. Piemēram, mēs vēlamies notīrīt displeju, mēs skatāmies uz tabulu, un šeit ir komanda, kas mums nepieciešama! Skaidrs displejs!

Mēs pieliekam nulles tapām RS, R/W, DB7, DB6, DB5, DB4, DB3, DB2, DB1 un vienu, lai piespraustu DB0. Gatavs. Kas tālāk? Tieši tā, viens uz tapas E, pēc tam nedaudz pagaidiet un atkal nolaidiet E līdz nullei. Tas arī viss, displejs ir notīrīts 😉 Tieši pirms nākamās komandas izpildes ir jāveic pauze, kas norādīts katras komandas datu lapā. Būtu efektīvāk aptaujāt aizņemtības karogu, tiklīdz tas ir atiestatīts uz 0, jūs varat turpināt darbu. Šī karoga nolasīšanai ir arī īpaša komanda, tāpēc ar šo viss ir skaidrs) Ejam tālāk...

Un patiesībā viss ir ar teoriju, var jau mēģināt kaut ko uzrakstīt. Lai atvieglotu darbu ar displeju, izveidoju nelielu bibliotēku, tagad paskatīsimies, kā to var izmantot. Pirmkārt, lejupielādējiet

Mūsu rīcībā ir 2 faili, MT_WH1602.c un MT_WH1602.h. Mēs noplēšam otro, šeit mums jāizvēlas tapas un izmantotais kontrolieris.

Starp citu, mans displejs ir savienots šādi:

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

Atveriet failu MT_WH1602.h:

#define PLATFORM (STM32F10x)

Pēc tam atlasiet mikrokontrollera tapas, kurām ir pievienots displejs. Vispirms iestatīsim, kurus portus mēs izmantojam. Kad izveidoju savienojumu, es izmantoju GPIOA, GPIOB, GPIOC un GPIOD, mēs rakstām:

Līdzīgi arī citām mikrokontrolleru kājām.

Esam pabeiguši iestatīšanu, turpināsim) Lai izsauktu raksta sākumā dotās komandas, failā MT_WH1602.c ir šādas funkcijas (tās ir nosauktas pēc komandu nosaukumiem, tāpēc es domāju, ka viss ir skaidrs) :

void MT_WH1602_ClearDisplay(void ) ; spēkā neesošs MT_WH1602_ReturnHome(void ) ; void MT_WH1602_EntryModeSet (bool IDaddress, bool shift) ; Void MT_WH1602_DisplayOnOff (bool Dbit, bool Cbit, bool Bbit) ; spēkā neesošs MT_WH1602_CursorOrDisplayShift (bool SCbit, bool RLbit) ; Void MT_WH1602_FunctionSet (bool DLbit, bool Nbit, bool Fbit) ; spēkā neesošs MT_WH1602_SetCGRAMaddress (uint8_t adrese) ; spēkā neesošs MT_WH1602_SetDDRAMAddress (uint8_t adrese) ; bool MT_WH1602_ReadBusy(void ) ; spēkā neesošs MT_WH1602_WriteData(uint8_t data) ;

Dažām komandām funkcijai ir jānodod parametri, piemēram:

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

Apskatīsim komandu tabulu:

Redzam, ka komanda Display ON/OFF ne tikai ieslēdz/izslēdz displeju, bet arī aktivizē/deaktivizē kursoru un kursora mirgošanu. Datu lapā šie komandu biti ir apzīmēti kā D, C un B, un mēs tos nododam kā parametrus funkcijai. Ja mums ir jāieslēdz displejs un kursors, bet jāatspējo kursora mirgošana, mēs izsaucam komandu šādi:

MT_WH1602_DisplayOnOff(1, 1, 0);

Kopumā viss ir vienkārši 😉

Īsāk sakot, mēs izveidojam jaunu projektu, pievienojam bibliotēku darbam ar WH1602 displeju, izveidojam tukšu .c failu un sākam to aizpildīt ar kodu:

// Iekļaujiet bibliotēkas failu#include "MT_WH1602.h" /*******************************************************************/ int galvenais(neesošs) ( // Izsauciet inicializācijas funkciju, bez tās nevaram iztikt =)() ; // Tagad mums ir jāveic sākotnējā displeja konfigurācija // Dokumentācija un internets iesaka to darīt ;) 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) ; // Piemēram, es paņēmu pirmās aizkaves vērtības, kas ienāca prātā) // Kopumā jums ir jāpārbauda displeja aizņemtības karodziņš // Tagad parādīsim kaut ko, piemēram, mūsu vietnes nosaukumu MT_WH1602_WriteData(0x6D) ; MT_WH1602_Aizkave(100) ; MT_WH1602_WriteData(0x69) ; MT_WH1602_Aizkave(100) ; MT_WH1602_WriteData(0x63) ; MT_WH1602_Aizkave(100) ; MT_WH1602_WriteData(0x72) ; MT_WH1602_Aizkave(100) ; MT_WH1602_WriteData(0x6F) ; MT_WH1602_Aizkave(100) ; MT_WH1602_WriteData(0x74) ; MT_WH1602_Aizkave(100) ; MT_WH1602_WriteData(0x65) ; MT_WH1602_Aizkave(100) ; MT_WH1602_WriteData(0x63) ; MT_WH1602_Aizkave(100) ; MT_WH1602_WriteData(0x68) ; MT_WH1602_Aizkave(100) ; MT_WH1602_WriteData(0x6E) ; MT_WH1602_Aizkave(100) ; MT_WH1602_WriteData(0x69) ; MT_WH1602_Aizkave(100) ; MT_WH1602_WriteData(0x63) ; MT_WH1602_Aizkave(100) ; MT_WH1602_WriteData(0x73) ; MT_WH1602_Aizkave(100) ; MT_WH1602_WriteData(0x2E) ; MT_WH1602_Aizkave(100) ; MT_WH1602_WriteData(0x72) ; MT_WH1602_Aizkave(100) ; MT_WH1602_WriteData(0x75) ; MT_WH1602_Aizkave(100) ; kamēr (1 ) ( __NOP() ; ) ) /*******************************************************************/

Gatavs, pārbaudīsim)


Kā redzat, viss darbojas pareizi)

Starp citu, es kaut kā pazaudēju jautājumu par to, ko rakstīt displejā, lai parādītu to vai citu rakstzīmi. Šeit ir plāksne no datu lapas:

Tātad, lai noteiktu, kādu vērtību ierakstīt displeja atmiņā, jums ir jāņem skaitļi, kas ierakstīti augšpusē un pa kreisi šajā tabulā konkrētam simbolam. Piemēram, simbols “A”. Apskatīsim – šis simbols atbilst kolonnai 0100 (0x4) un 0001. rindai (0x1). Izrādās, ka, lai parādītu simbolu “A”, displejā jāieraksta vērtība 0x41.

Tagad tas ir viss =) Mēs esam sakārtojuši WH1602 displeja savienojumu un darbību, tāpēc uz drīzu tikšanos!

P.S. Strādājot ar bibliotēku, es nepārbaudīju aizņemtā karoga nolasīšanas funkciju, tāpēc, ja pēkšņi kaut kas nedarbojas kā vajadzētu, rakstiet, mēs to izdomāsim)

  • FC-113 modulis ir balstīts uz PCF8574T mikroshēmu, kas ir 8 bitu maiņu reģistrs - I2C seriālās kopnes ievades-izejas “paplašinātājs”. Attēlā mikroshēma ir apzīmēta ar DD1.
  • R1 ir apdares rezistors LCD displeja kontrasta regulēšanai.
  • Jumper J1 izmanto, lai ieslēgtu displeja fona apgaismojumu.
  • Tapas 1…16 tiek izmantotas, lai savienotu moduli ar LCD displeja tapām.
  • Kontaktu spilventiņi A1...A3 ir nepieciešami, lai mainītu ierīces I2C adresi. Lodējot atbilstošos džemperus, var mainīt ierīces adresi. Tabulā parādīta adrešu un džemperu atbilstība: "0" atbilst atvērtai ķēdei, "1" - uzstādītam džemperim. Pēc noklusējuma ir atvērti visi 3 džemperi un ierīces adrese 0x27.

2 LCD displeja savienojuma shēma ar Arduino izmantojot I2C protokolu

Modulis ir savienots ar Arduino standarta veidā I2C kopnei: moduļa SDA kontakts ir savienots ar analogo portu A4, SCL kontakts ir savienots ar Arduino analogo portu A5. Modulis tiek barots ar +5 V no Arduino. Pats modulis ir savienots ar tapām 1…16 ar atbilstošajām tapām 1…16 LCD displejā.


3 Bibliotēka darbam izmantojot I2C protokolu

Tagad mums ir nepieciešama bibliotēka, lai strādātu ar LCD, izmantojot I2C saskarni. Varat izmantot, piemēram, šo (saite rindā "Lejupielādēt parauga kodu un bibliotēku").

Lejupielādēts arhīvs LiquidCrystal_I2Cv1-1.rar atarhivējiet mapē \bibliotēkas\, kas atrodas Arduino IDE direktorijā.

Bibliotēka atbalsta LCD ekrānu standarta funkciju komplektu:

FunkcijaMērķis
Šķidrie kristāli () izveido LiquidCrystal tipa mainīgo un pieņem displeja savienojuma parametrus (pin numurus);
sākt () LCD displeja inicializācija, parametru iestatīšana (rindu un rakstzīmju skaits);
skaidrs () ekrāna notīrīšana un kursora atgriešana sākuma pozīcijā;
mājas() atgriezt kursoru sākuma pozīcijā;
setCursor() kursora iestatīšana noteiktā pozīcijā;
rakstīt () LCD ekrānā parāda simbolu;
drukāt () parāda tekstu LCD ekrānā;
kursors () parāda kursoru, t.i. pasvītrojums zem nākamās rakstzīmes vietas;
noCursor() paslēpj kursoru;
mirkšķināt () kursors mirgo;
noBlink() Atcelt mirgošanu;
noDisplay() displeja izslēgšana, saglabājot visu parādīto informāciju;
displejs () displeja ieslēgšana, saglabājot visu parādīto informāciju;
scrollDisplayLeft() ritiniet displeja saturu par 1 pozīciju pa kreisi;
scrollDisplayRight() ritiniet displeja saturu par 1 pozīciju pa labi;
autoscroll () iespējot automātisko ritināšanu;
noAutoscroll() atspējot automātisko ritināšanu;
no kreisās uz labo() iestata teksta virzienu no kreisās puses uz labo;
no labās uz kreiso() teksta virziens no labās uz kreiso;
CreateChar() izveido pielāgotu rakstzīmi LCD ekrānam.

4 Skice teksta attēlošanai uz LCD ekrānu, izmantojot I2C kopni

Atvērsim paraugu: Failu paraugi LiquidCrystal_I2C CustomChars un mēs to nedaudz pārstrādāsim. Parādīsim ziņojumu, kura beigās būs mirgojošs simbols. Komentāri pie koda komentē visas skices nianses.

#iekļauts // ietver Wire bibliotēku #include // pievienot LCD bibliotēku #define printByte(args) write(args); // uint8_t sirds = (0x0,0xa,0x1f,0x1f,0xe,0x4,0x0); // simbola “sirds” bitu maska ​​LiquidCrystal_I2C lcd(0x27, 16, 2); // Iestatiet adresi 0x27 16x2 LCD displejam anulēt iestatīšanu() ( lcd.init(); // LCD displeja inicializācija lcd.backlight(); // ieslēgt displeja fona apgaismojumu lcd.createChar(3, sirds); // izveidot "sirds" simbolu atmiņas šūnā 3 lcd.home(); // novieto kursoru augšējā kreisajā stūrī, pozīcijā (0,0) lcd.!"); // izdrukā teksta rindiņu lcd.setCursor(0, 1); // pārvietojiet kursoru uz 2. rindiņu, rakstzīmi 1 lcd.print( " i " // izdrukājiet ziņojumu 2. rindā lcd.printByte(3) // izdrukājiet simbolu "sirds", kas atrodas 3. šūnā lcd.print (" Arduino "); } void loop() (// pēdējās rakstzīmes mirgošana lcd.setCursor(13, 1); // pārvietot kursoru uz 2. rindiņu, 1. rakstzīmi lcd.print("\t"); kavēšanās (500); lcd.setCursor(13, 1); // pārvietot kursoru uz 2. rindiņu, 1. rakstzīmi lcd.print(" "); kavēšanās (500); }

Starp citu, rakstzīmes, kas rakstītas ar komandu lcd.createChar();, paliek displeja atmiņā arī pēc strāvas izslēgšanas, jo rakstīts, lai parādītu ROM 1602.

5 Izveidojiet savus simbolus LCD displejam

Sīkāk aplūkosim jautājumu par savu simbolu izveidi LCD ekrāniem. Katra rakstzīme ekrānā sastāv no 35 punktiem: 5 plati un 7 augsti (+1 rezerves līnija pasvītrošanai). Iepriekš minētās skices 6. rindā mēs definējam 7 skaitļu masīvu: (0x0, 0xa, 0x1f, 0x1f, 0xe, 0x4, 0x0). Pārveidosim heksadecimālos skaitļus bināros: {00000, 01010, 11111, 11111, 01110, 00100, 00000} . Šie skaitļi ir nekas vairāk kā bitu maskas katrai no 7 simbola rindiņām, kur "0" apzīmē gaišo punktu, bet "1" - tumšo punktu. Piemēram, sirds simbols, kas norādīts kā bitmaska, parādīsies ekrānā, kā parādīts attēlā.

6 LCD ekrāna vadība caur I2C autobusu

Augšupielādēsim skici Arduino. Ekrānā parādīsies uzraksts, kuru norādījām ar mirgojošu kursoru beigās.


7 Kas aiz muguras I2C autobuss

Kā bonusu apskatīsim laika diagrammu latīņu rakstzīmju "A", "B" un "C" parādīšanai LCD displejā. Šīs rakstzīmes tiek saglabātas displeja ROM un tiek parādītas ekrānā, vienkārši pārsūtot to adreses uz displeju. Diagramma ņemta no displeja RS, RW, E, D4, D5, D6 un D7 tapām, t.i. jau pēc FC-113 “I2C paralēlās kopnes” pārveidotāja. Var teikt, ka mēs iegremdējamies nedaudz dziļāk aparatūrā.


Laika diagramma latīņu rakstzīmju “A”, “B” un “C” izvadīšanai LCD displejā 1602

Diagrammā redzams, ka rakstzīmes, kas atrodas displeja ROM (skat. datu lapas 11. lpp., saite zemāk), tiek pārraidītas divos nibļos, no kuriem pirmais nosaka tabulas kolonnas numuru, bet otrais - rindas numuru. Šajā gadījumā dati tiek “fiksēti” līnijas signāla malā E(Iespējot) un līniju R.S.(Atlasīt reģistrāciju) ir loģiskā stāvoklī, kas nozīmē, ka dati tiek pārsūtīti. Zems stāvoklis RS rindā nozīmē, ka tiek nosūtītas instrukcijas, ko mēs redzam pirms katras rakstzīmes pārsūtīšanas. Šajā gadījumā tiek pārraidīts LCD displeja instrukcijas kods karietes atgriešanai pozīcijā (0, 0), ko arī var uzzināt, izpētot displeja tehnisko aprakstu.

Un vēl viens piemērs. Šī laika diagramma parāda sirds simbola izvadi LCD displejā.


Atkal pirmie divi impulsi Iespējot ievērot norādījumus Mājas()(0000 0010 2) - novietojiet ratiņu atpakaļ pozīcijā (0; 0), bet otros divus - izvadiet uz LCD displeju, kas saglabāts atmiņas šūnā 3 10 (0000 0011 2) simbolu “Sirds” (instrukcija). lcd.createChar(3, sirds); skice).