Si të konfiguroni telefonat inteligjentë dhe PC. Portali informativ
  • në shtëpi
  • Siguria
  • Mësime Arduino: krijimi i një treguesi duke përdorur një mikrokontrollues. Mësime Arduino: krijimi i një kontrolluesi duke përdorur një mikrokontrollues Ticker në një ekran 1602

Mësime Arduino: krijimi i një treguesi duke përdorur një mikrokontrollues. Mësime Arduino: krijimi i një kontrolluesi duke përdorur një mikrokontrollues Ticker në një ekran 1602

Të gjithë janë mësuar prej kohësh me faktin se çdo pajisje elektronike ka një ekran, me ndihmën e të cilit i jep një personi të gjitha llojet e informacioneve të dobishme. MP3 player tregon emrin e këngës që luhet, telekomanda e katërkopterit tregon telemetrinë e fluturimit, madje edhe lavatriçe tregon kohën deri në fund të larjes dhe smartphone në përgjithësi strehon të gjithë desktopin e një kompjuteri personal! Me shumë mundësi, pajisja juaj e ardhshme mund të përdorë gjithashtu një ekran të vogël :) Le të përpiqemi të bëjmë një orë të thjeshtë elektronike! Dhe si tabelë e rezultateve ne përdorim ekranin e zakonshëm dhe të lirë me karakter kristal të lëngshëm 1602. Këtu është, ashtu si në foto: Përveç 16x2, një ekran me karakter 20x4 (katër rreshta me nga 20 karaktere secila), si dhe një ekran grafik me një rezolucion prej 128x64 piksele, konsiderohen mjaft të njohura. Këtu janë ato në foto:

1. Lidhja e ekranit LCD me karakter 1602

Ekrani 1602 ka 16 kunja. Zakonisht ato numërohen nga e majta në të djathtë, nëse i shikoni si në foto. Ndonjëherë kunjat janë të nënshkruara, si: DB0, DB1, EN, etj. Dhe ndonjëherë ata thjesht tregojnë numrin e daljes. Në çdo rast, lista e kunjave është gjithmonë e njëjtë: 1 - "GND", tokëzimi (minus fuqia); 2 - "Vcc", furnizimi me energji +5V; 3 - "VEE", kontrast; 4 - "RS", përzgjedhja e regjistrit; 5 - "R/W", drejtimi i transferimit të të dhënave (shkrimi/leximi); 6 - "EN", sinkronizimi; 7-14 - "DB0", "DB1", .., "DB7" - autobus i të dhënave; 15 - anoda e dritës së prapme ( +5V); 16 - katodë e dritës së prapme (tokë). Linjat VEE, RS dhe katër linjat e të dhënave DB4, DB5, DB6, DB7 janë të lidhura me daljet dixhitale të kontrolluesit. Ne do të lidhim linjën "R/W" me "tokën" e kontrolluesit (pasi na duhet vetëm funksioni i shkrimit në kujtesën e ekranit). Ne nuk do ta lidhim dritën e pasme për momentin, mendoj se mund ta kuptoni lehtësisht vetë :) Diagrami skematik i lidhjes së ekranit me Arduino Uno
Pamja e paraqitjes
Për çdo rast, edhe në formën e një shenje:
Ekran LCD 1602 1 2 4 6 11 12 13 14 15 16
Arduino Uno GND +5 V 4 5 6 7 8 9 +5 V GND

2. Programimi "Përshëndetje, botë!"

Për të punuar me ekrane LCD të madhësive dhe llojeve të ndryshme, redaktori Arduino IDE ka një bibliotekë të veçantë Kristal i Lëngshëm. Për të përfshirë bibliotekën, ne shkruajmë shprehjen e mëposhtme në rreshtin e parë të programit tonë: #include Më pas, do të duhet të tregojmë se cilat kunja Arduino kemi përdorur për të lidhur ekranin. Ne do ta tregojmë këtë informacion kur inicializojmë modulin: LiquidCrystal lcd(4, 5, 6, 7, 8, 9); Këtu, dy argumentet e para janë kunjat RS dhe EN, dhe katër të tjerat janë autobusi i të dhënave DB4-DB7 linjat. Më pas, ne specifikojmë madhësinë e ekranit duke përdorur komandën "fillimi": lcd.begin(16, 2); Më lejoni t'ju kujtoj se ekrani ynë ka dy rreshta, nga 16 karaktere secila. Së fundi, na duhet një funksion i thjeshtë “print” për të nxjerrë tekst. Prodhimi i kësaj fraze të njohur duke përdorur këtë funksion do të duket kështu: lcd.print("Përshëndetje, botë!"); Programi i plotë do të duket kështu: #include LCD Crystal Liquid(4, 5, 6, 7, 8, 9); void setup())( lcd.begin(16, 2); lcd.print("Përshëndetje, botë!"); ) void loop())( ) Ngarkojeni atë në Arduino Uno dhe shikoni se çfarë po ndodh në ekran. Mund të ketë tre situata kryesore 🙂 1) Ekrani do të shfaqë "Përshëndetje, botë!". Kjo do të thotë që keni lidhur gjithçka në mënyrë korrekte dhe kontrasti në një farë mënyre për mrekulli doli se fillimisht ishte vendosur saktë. Ne gëzohemi dhe kalojmë në kapitullin tjetër. 2) Ekrani do të shfaqë një sërë drejtkëndëshash të zinj - kërkohet rregullimi i kontrastit! Kjo është arsyeja pse ne shtuam një potenciometër me një çelës në qark. Ne e kthejmë atë nga një skaj në tjetrin derisa të shfaqet një mbishkrim i qartë në ekran. 3) Dy rreshta drejtkëndëshash të zinj. Me shumë mundësi, keni bërë një gabim kur lidheni. Kontrollo trefish të gjitha telat. Nëse nuk gjeni një gabim, kërkoni macen tuaj të kontrollojë!

3. Programimi i orës

Tani që ekrani po funksionon siç duhet, le të përpiqemi ta kthejmë pajisjen tonë të thjeshtë në një orë të vërtetë elektronike. Kujdes! Për të shfaqur kohën, na duhet biblioteka e kohës. Nëse nuk është instaluar ende, mund ta shkarkoni arkivin nga lidhja. Le ta lidhim: #include Pastaj vendosim datën dhe kohën aktuale duke përdorur funksionin "setTime": setTime (23, 59, 59, 12, 31, 2015); Gjithçka është e qartë këtu: orë, minuta, sekonda, muaj, ditë, vit. Për të shfaqur datën ne përdorim një sërë funksionesh:
  • viti () - do të na kthejë vitin;
  • muaj () - muaj;
  • ditë() - ditë;
  • orë () - orë;
  • minute() - kthen minutën;
  • e dyta () - e dyta.
Tani le t'i kushtojmë vëmendje këtij fakti. Nëse numërojmë numrin e karaktereve në një hyrje tipike të datës: “12/31/2015 23:59:59”, marrim 19. Dhe kemi vetëm 16! Megjithatë, ajo nuk përshtatet në një rresht. Ju mund ta zgjidhni problemin me një funksion tjetër të dobishëm - "setCursor". Ky funksion vendos kursorin në pozicionin e dëshiruar. Për shembull: lcd.setCursor(0,1); Vendos kursorin në fillim të rreshtit të dytë. Kursori është vendndodhja e karakterit nga i cili do të fillojë prodhimi i tekstit me komandën tjetër "print". Le ta përdorim këtë funksion për të shfaqur datën në rreshtin e parë dhe kohën në rreshtin e dytë. Gjithçka është e qartë tani me shfaqjen e datës dhe orës. Gjërat rutinë mbeten. Për shembull, pas mbushjes së çdo ekrani, ne do ta pastrojmë atë me funksionin “clear()”: lcd.clear(); Gjithashtu nuk ka kuptim që ne të shfaqim të dhëna më shumë se një herë në sekondë, kështu që do të ndalojmë 1000 milisekonda midis dy përsëritjeve. Pra, duke bashkuar gjithçka, marrim programin e mëposhtëm: #include #përfshi LCD Crystal Liquid(4, 5, 6, 7, 8, 9); void setup())( lcd.begin(16, 2); setTime(7,0,0,1,10,2015); // 7 paradite, dhjetë janar 2015) void loop())( lcd.clear( LCD (0 , 1); lcd.print(orë()); lcd.print(":"); lcd.print(minutë()); lcd.print(":"); lcd.print(sekond()) ; vonesë (1000); ) Ngarkoni skicën në Arduino Uno dhe shikoni përparimin e orës! 🙂 Për të konsoliduar njohuritë e marra, unë rekomandoj të përmirësoni orën tonë në një orë alarmi të plotë. Gjithçka që duhet të bëni është të shtoni disa butona dhe një sinjalizues :)

Për të punuar me ekranet grafike të karaktereve, ne sugjerojmë përdorimin e bibliotekës LiquidCrystal, e cila përfshihet në grupin standard Arduino IDE dhe është krijuar për të punuar nëpërmjet një ndërfaqeje paralele 8-bit (4-bit). Nëse ekrani juaj është i lidhur me Arduino përmes autobusit I2, atëherë duhet të instaloni bibliotekën LiquidCrystal_I2C (shumica e funksioneve të së cilës përsërisin funksionet e bibliotekës së parë).

Ekranet e mbështetura:

Ekrani Lidhja dhe inicializimi
LCD1602 - shfaqja e karaktereve (16x02 karaktere),


#përfshi
[ , 8 , 9 , 10 , 11 ]);
konfigurimi i zbrazët ())( lcd.begin(16, 2);}

// Shpjegim:

konfigurimi i zbrazët ())( OBJECT.fillimi (NUM_COLUMN, NUMBER_ROWS); )


OBJEKTI LiquidCrystal (RS, E, D0, D1, D2, D3, D4, D5, D6, D7);


me ndërfaqe I2C (blu)

#përfshi
#përfshi
LiquidCrystal_I2C LCD (0x27 ose 0x3F, 16 , 2);
konfigurimi i zbrazët ())( lcd.init(); }

// Shpjegim:



LCD1602 I2C - shfaqja e karaktereve (16x02 karaktere),
me ndërfaqe I2C (jeshile)

#përfshi
#përfshi
LiquidCrystal_I2C LCD (0x27 ose 0x3F, 16 , 2);
konfigurimi i zbrazët ())( lcd.init(); }

// Shpjegim:
OBJEKTI LiquidCrystal_I2C (I2C_ADDRESS, COLUMNS_COLUMN, ROW_COUNTY);
// I2C_ADDRESS mund të jetë ose 0x27 ose 0x3F

LCD2004 - shfaqja e karaktereve (20x04 karaktere),
me ndërfaqe paralele (blu)

#përfshi
LCD Crystal Liquid(2 , 3 , 4 , 5 , 6 , 7[ , 8 , 9 , 10 , 11 ]);
konfigurimi i zbrazët ())( lcd.begin(20, 4);}

// Shpjegim:
OBJEKTI LiquidCrystal (RS, E, D4, D5, D6, D7);
konfigurimi i pavlefshëm())( OBJECT.fillimi(KOLONAT, RRESHTAT); )

// Nëse përdoren 8 tela të autobusit të të dhënave, atëherë tregoni të gjitha
OBJEKTI LiquidCrystal (RS, E, D0, D1, D2, D3, D4, D5, D6, D7);

LCD2004 I2C - shfaqja e karaktereve (20x04 karaktere),
me ndërfaqe I2C (blu)
#përfshi
#përfshi
LiquidCrystal_I2C LCD (0x27 ose 0x3F, 20 , 4);
konfigurimi i zbrazët ())( lcd.init(); }

// Shpjegim:
OBJEKTI LiquidCrystal_I2C (I2C_ADDRESS, COLUMNS_COLUMN, ROW_COUNTY);
// I2C_ADDRESS mund të jetë ose 0x27 ose 0x3F

Shembull #1

Ne shfaqim mbishkrimin në ekranin LCD1602 të lidhur përmes autobusit I2C. Për të punuar me ekranin LCD2004, duhet të ndryshoni rreshtin 3 në LiquidCrystal_I2C LCD (0x27,20,4);

#përfshi // Lidhni bibliotekën për të punuar me një ekran LCD nëpërmjet autobusit I2C LiquidCrystal_I2C lcd(0x27,16,2); // Deklaroni objektin e bibliotekës, duke specifikuar parametrat e ekranit (adresa I2C = 0x27, numri i kolonave = 16, numri i rreshtave = 2) // Nëse mbishkrimi nuk shfaqet, zëvendësoni adresën 0x27 me 0x3F void setup())( / / lcd.init(); // Filloni punën me ekranin LCD lcd.backlight(); // Aktivizoni dritën e prapme të ekranit LCD lcd.setCursor(0, 0); // Vendosni kursorin në pozicionin (kolona 0 , 0 rresht) lcd.print("LCD"); // Nxjerr tekstin "LCD", duke filluar nga pozicioni i caktuar i kursorit lcd.setCursor(0, 1); // Vendos kursorin në pozicion (0 kolonë, 1 rresht ) lcd.print("www.iarduino.ru"); // Ne shfaqim tekstin "www.iarduino.ru", duke filluar nga pozicioni i caktuar i kursorit) // // void loop()() // Kodi brenda funksioni i ciklit ekzekutohet vazhdimisht. Por meqenëse po shfaqim tekst statik, duhet ta shfaqim vetëm një herë në fillim, pa përdorur kodin e ciklit

Shembull #2

Ne shfaqim mbishkrimin në ekranin LCD1602 të lidhur nëpërmjet një autobusi paralel 4-bit. Për të punuar me ekranin LCD2004, duhet të ndryshoni rreshtin 5 në lcd.begin(20, 4);

#përfshi // Lidhni bibliotekën LiquidCrystal për të punuar me ekranin LCD LiquidCrystal lcd(2,3,4,5,6,7); // Deklaroni një objekt bibliotekë, duke treguar kunjat e ekranit (RS, E, D4, D5, D6, D7) // Nëse përdoren 8 tela të autobusit të të dhënave, atëherë specifikoni (RS, E, D0, D1, D2, D3, D4 , D5, D6,D7) void setup())( // lcd.begin(16, 2); // Filloni punën me ekranin LCD, duke treguar numrin (kolonat, rreshtat) lcd.setCursor(0, 0); // Vendosni kursorin në pozicionin (0 kolonë, 0 rresht) lcd.print("LCD2004"); // Printoni tekstin "LDC1602" duke filluar nga pozicioni i caktuar i kursorit lcd.setCursor(0, 1); // Vendosni kursori në pozicion (0 kolonë, 1 rresht ) lcd.print("www.iarduino.ru"); // Shtypni tekstin "www.iarduino.ru", duke filluar nga pozicioni i caktuar i kursorit ) // // cikli i zbrazët ()() // Kodi brenda funksionit të ciklit ekzekutohet vazhdimisht. Por meqenëse po shfaqim tekst statik, duhet ta shfaqim vetëm një herë në fillim, pa përdorur kodin e ciklit

Shembull #3

Ne shfaqim mbishkrimin "Gjuha ruse" në ekranin LCD1602 të lidhur përmes autobusit I2C:

#përfshi // Lidhni bibliotekën për të punuar me autobusin I2C #include // Lidhni bibliotekën për të punuar me një ekran LCD nëpërmjet autobusit I2C LiquidCrystal_I2C lcd(0x27,16,2); // Deklaroni një objekt të bibliotekës, duke specifikuar parametrat e ekranit (adresa I2C = 0x27, numri i kolonave = 16, numri i rreshtave = 2) // simboli uint8_t = ( // Deklaroni një grup prej 6 simbolesh (gjuhëshe), secili simbol përbëhet prej 8 bajtësh (0, 0,18,20,24,20,18, 0 ), // në ( 0, 0,17,19,21,25,17, 0 ), // dhe (10, 4 , 17,19,21,25,17, 0 ), // th ( 0, 0,15,17,15, 5, 9, 0 ), // i ( 0, 0,14,17, 6,17 , 14, 0), // z (0, 0,17,17,29,19,29, 0)); // s // void setup())( // lcd.init(); // Fillo punën me ekranin LCD lcd.backlight(); // Aktivizo dritën e prapme të ekranit LCD lcd.createChar(1, simboli ); // Ngarko 1 karakter "k" në ekran RAM lcd.createChar(2, simbol); // Ngarko karakterin e dytë "i" në ekranin RAM lcd.createChar(3, simbol); // Ngarko karakterin e 3-të "th" në ekran RAM lcd.createChar (4, simbol); // Ngarko simbolin e 4-të "i" në ekran RAM lcd.createChar(5, simbol); // Ngarko simbolin e 5-të "z" në ekranin RAM lcd.createChar (6, simbol); // Ngarko 6 karaktere "s" në ekran RAM lcd.setCursor(0, 0); // Vendos kursorin në pozicionin (0 kolonë, 0 rresht) lcd.print("Pycc\1\2 \3 \4\5\6\1"); // Nxjerr tekstin "Pyccy language", ku "Pycc" është shkruar në latinisht, dhe "kyy language" - me karaktere nga RAM-i i ekranit ) // Nëse keni nevojë për të nxjerrë një karakter nga RAM-i i ekranit, më pas shkruani \ dhe numrin e karakterit // void loop( )() // Kodi brenda funksionit të ciklit ekzekutohet vazhdimisht. Por meqenëse po shfaqim tekst statik, duhet ta shfaqim vetëm një herë në fillim, pa përdorur kodin e ciklit

Shembull #4

Ne shfaqim kohën e kaluar pas fillimit në ekranin LCD1602 të lidhur përmes autobusit I2C:

#përfshi // Lidhni bibliotekën për të punuar me autobusin I2C #include // Lidhni bibliotekën për të punuar me një ekran LCD nëpërmjet autobusit I2C LiquidCrystal_I2C lcd(0x27,16,2); // Deklaroni objektin e bibliotekës, duke specifikuar parametrat e shfaqjes (adresa I2C = 0x27, numri i kolonave = 16, numri i rreshtave = 2) // uint8_t tim_D, tim_H, tim_M, tim_S; //Deklaroni variabla për të ruajtur ditët, orët, minutat dhe sekondat. uint32_t tim; //Deklaroni një variabël për të ruajtur sasinë totale të kohës që ka kaluar që nga fillimi. // Nëse mbishkrimi nuk shfaqet, zëvendësoni adresën 0x27 me konfigurimin e zbrazët 0x3F())( // lcd.init(); // Filloni punën me ekranin LCD lcd.backlight(); // Ndizni dritën e prapme të Ekran LCD ) // // void loop())( // // Merrni kohën e kaluar që nga fillimi: // tim = millis() / 1000; // Merrni numrin total të sekondave (maksimumi 4"294"967 sek ≈ 49,7 ditë). tim_S = tim % 60 ; // Merrni sekondat: pjesën e mbetur të pjesëtimit të të gjitha sekondave me një minutë (60 sek). tim = (tim-tim_S) / 60; // Merrni numrin total të minutave . tim_M = tim % 60; // Merr minutat: pjesën e mbetur të pjesëtimit të të gjitha minutave në orë (60 min). tim = (tim-tim_M) / 60; // Merr numrin total të orëve. tim_H = tim % 24 ; // Merr orët: pjesën e mbetur të pjesëtimit të të gjitha orëve me ditën (24 orë). tim_D = (tim-tim_H) / 24; // Merr numrin total të ditëve. // Nxjerr kohën e kaluar që nga fillimi: // nëse (millis()%1000<100){ // Условие выполняется в течении 100 первых миллисекунд каждой новой секунды. delay(100); lcd.setCursor(0, 0); // Устанавливаем курсор в позицию (0 столбец, 0 строка). lcd.print("Days: "); // Выводим текст. if(tim_D<10){lcd.print(0);} // Выводим 0 перед количеством дней. lcd.print(tim_D); // Выводим количество дней. lcd.setCursor(0, 1); // Устанавливаем курсор в позицию (0 столбец, 1 строка) lcd.print("Time: "); // Выводим текст. if(tim_H<10){lcd.print(0);} // Выводим 0 перед количеством часов. lcd.print(tim_H); // Выводим количество часов. lcd.print(":"); // Выводим символ. if(tim_M<10){lcd.print(0);} // Выводим 0 перед количеством минут. lcd.print(tim_M); // Выводим количество минут. lcd.print(":"); // Выводим символ. if(tim_S<10){lcd.print(0);} // Выводим 0 перед количеством секунд. lcd.print(tim_S); // Выводим количество секунд. } // } //

Funksionet e zakonshme për bibliotekat LiquidCrystal dhe LiquidCrystal_I2C:

  • fillo ( kolonat, rreshtat, ); – Inicializon ekranin me numrin e kolonave, rreshtave dhe madhësisë së karaktereve.
  • qartë();– Pastrimi i ekranit me kursorin në pozicionin 0,0 (Duhet shumë kohë!).
  • shtëpi ();– Vendosja e kursorit në pozicionin 0,0 (Duhet shumë kohë!).
  • shfaq ();– Ndizni shpejt ekranin (pa ndryshuar të dhënat në RAM).
  • noDisplay();– Fikni shpejt ekranin (pa ndryshuar të dhënat në RAM).
  • blink ();– Aktivizoni kursorin që pulson (me një frekuencë prej rreth 1 Hz).
  • noBlink();– Fikni kursorin pulsues.
  • kursori ();– Aktivizo nënvizimin e kursorit.
  • noCursor();– Çaktivizoni nënvizimin e kursorit.
  • scrollDisplayLeft();– Lëviz ekranin në të majtë. Zhvendos koordinatat e ekranit një kolonë në të majtë (pa ndryshuar RAM-in).
  • scrollDisplayRight();– Lëviz ekranin në të djathtë. Zhvendos koordinatat e ekranit një kolonë në të djathtë (pa ndryshuar RAM-in).
  • majtasNëDjathtas();– Përcakton zhvendosjen e mëtejshme të pozicionit të kursorit, pasi të shfaqet karakteri tjetër, një kolonë në të djathtë.
  • djathtas në të majtë ();– Përcakton zhvendosjen e mëtejshme të pozicionit të kursorit, pasi të shfaqet karakteri tjetër, një kolonë në të majtë.
  • noAutoscroll();– Përcakton se teksti do të përafrohet në të majtë të pozicionit të kursorit në të ardhmen (si zakonisht).
  • autoscroll();– Tregon se teksti do të përafrohet djathtas nga pozicioni i kursorit në të ardhmen.
  • krijoChar( numër, grup ); – Shkruani një karakter të personalizuar në ekranin CGRAM nën numrin e specifikuar.
  • vendos Kursorin( kolonë, rresht ); – Vendoseni kursorin në pozicionin e treguar nga numri i kolonës dhe rreshtit.
  • print( teksti ); – Shfaqni tekstin, simbolet ose numrat në ekranin e ekranit. Sintaksa është e ngjashme me funksionin e klasës Serial me të njëjtin emër.

Funksionet e implementuara vetëm në bibliotekën LiquidCrystal_I2C:

  • init();– Inicializimi i ekranit. Duhet të jetë komanda e parë e bibliotekës LiquidCrystal_I2C pas krijimit të objektit. Në fakt, ky funksion është gjithashtu në bibliotekën LiquidCrystal, por në atë bibliotekë thirret automatikisht (si parazgjedhje) kur krijohet një objekt.
  • drita e prapme ();– Ndizni dritën e prapme të ekranit.
  • noBacklight ();– Fik dritën e prapme të ekranit.
  • vendos dritën e prapme( flamuri ); – Kontrolli i dritës së prapme (e vërtetë - ndizet / e rreme - fik), përdoret në vend të funksioneve "noBacklight" dhe "backlight".

Lidhje:

// Për autobusin I2C:
#përfshi
#përfshi
LiquidCrystal_I2C LCD ( adresë , kol , rresht );
konfigurimi i zbrazët ())(
lcd.init();
}

Parametri:
  • adresë: Shfaq adresën në autobusin I2C - 0x27 ose 0x3F
  • koloni:
  • rresht:
// Për një autobus paralel me 4 tela:
#përfshi
Kristal i Lëngshëm LCD ( R.S. , E , D4 , D5 , D6 , D7 );
konfigurimi i zbrazët ())(
LCD.begin( kol , rresht );
}
Parametri:
  • RS: Numri i pinit Arduino me të cilin lidhet kunja RS
  • E: Numri i pinit Arduino me të cilin lidhet pini E
  • D0...D3: Numri i kunjave Arduino me të cilat janë lidhur kunjat D0-D3
  • D4...D7: Numri i kunjave Arduino me të cilat janë lidhur kunjat D4-D7
  • koloni: numri i kolonave të implementuara në ekran
  • rresht: numri i linjave të implementuara në ekran
// Për një autobus paralel me 8 tela:
#përfshi
Kristal i Lëngshëm LCD ( R.S. , E , D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 );
konfigurimi i zbrazët ())(
LCD.begin( kol , rresht );
}
fillo ( kol , rresht , );
Inicializon ekranin me dimensionet dhe karakteret e ekranit.
Parametri:
  • koloni: numri i kolonave të implementuara në ekran
  • rresht: numri i linjave të implementuara në ekran
  • madhësia: madhësia e karakterit, e treguar nga një konstante:
    LCD_5x8DOTS (i parazgjedhur) ose LCD_5x10DOTS
/* Për autobusin I2C: */ #include // Lidhni bibliotekën për të punuar me autobusin I2C #include // Lidhni bibliotekën për të punuar me një ekran LCD nëpërmjet autobusit I2C LiquidCrystal_I2C lcd(0x3F,20,4); // Deklaroni një objekt bibliotekë, duke treguar parametrat e ekranit (adresa I2C = 0x3F, numri i kolonave = 20, numri i rreshtave = 4) // void setup())( // lcd.init(); // Filloni punën me ekrani LCD lcd.drita e pasme (); // Ndiz dritën e prapme të ekranit LCD... // Informacioni dalës që duhet të shfaqet në fillim) // // void loop()() // ... // Informacion në dalje që duhet të ndryshojë sipas algoritmit të kodit tuaj) // /* Për një autobus paralel me 4 tela: */ #include // Lidhni bibliotekën LiquidCrystal për të punuar me ekranin LCD LiquidCrystal lcd(2,3,4,5,6,7); // Deklaroni një objekt bibliotekë, duke treguar kunjat e ekranit (RS, E, D4, D5, D6, D7) // Nëse përdoren 8 tela të autobusit të të dhënave, atëherë specifikoni (RS, E, D0, D1, D2, D3, D4 , D5, D6,D7) void setup())( // lcd.begin(16, 2); // Filloni punën me ekranin LCD, duke treguar numrin (kolonat, rreshtat) ... // Informacioni dalës që duhet të shfaqet në fillim) / // void loop()() // ... // Informacioni dalës që duhet të ndryshojë sipas algoritmit të kodit tuaj) //

Funksionet e kontrollit të ekranit:

shfaq ();
Ndez ekranin pasi të jetë fikur nga funksioni noDisplay.
Shënim: Funksioni funksionon shpejt dhe nuk ndryshon RAM-in e ekranit.
noDisplay();
Fik ekranin.
Të dhënat në ekran nuk do të shfaqen derisa të thirret funksioni i ekranit, por nuk do të fshihen nga memoria RAM dhe pasi të thirret funksioni i ekranit, do të shfaqet përsëri.
Shënim: Funksioni funksionon shpejt dhe nuk ndryshon RAM-in e ekranit.
scrollDisplayLeft();
Zhvendos koordinatat e ekranit një kolonë në të majtë.



scrollDisplayRight();
Zhvendos koordinatat e ekranit një kolonë në të djathtë.
Thirrja e vazhdueshme e këtij funksioni do të krijojë një efekt të linjës zvarritëse.
Koordinatat zhvendosen si për informacionin e disponueshëm në ekran ashtu edhe për atë që do të shfaqet më vonë.
Shënim: Funksioni funksionon pa ndryshuar RAM-in e ekranit.
Nëse e thërrisni funksionin 40 herë radhazi, koordinata do të kthehet në pikën origjinale
qartë();
Pastron ekranin duke e vendosur kursorin në pozicionin 0,0.
Informacioni në ekran do të fshihet përgjithmonë.
Shënim: kërkon shumë kohë.
drita e prapme ();
Aktivizoni dritën e prapme të ekranit.
noBacklight ();
Fikni dritën e prapme të ekranit.
Shënim: Funksioni zbatohet vetëm në bibliotekën LiquidCrystal_I2C.
vendos dritën e prapme( flamuri );
Kontrolli i dritës së prapme (në vend të funksioneve "noBacklight" dhe "backlight").
Parametri:
  • flamuri: e vërtetë - ndizet, dhe false - fiket dritën e prapme.
Shënim: Funksioni zbatohet vetëm në bibliotekën LiquidCrystal_I2C.
/* Shfaq një mesazh për të monitoruar funksionet e kontrollit të ekranit: */ lcd.cursor(0,0); // Vendosni kursorin në këndin më të sipërm të ekranit (0 kolonë, 0 rresht) lcd.print("iarduino.ru"); // Shfaq tekstin "iarduino.ru" (shkronja e parë "i" do të jetë në pozicionin "0.0", dhe "u" e fundit në pozicionin "10.0", kursori i padukshëm në pozicionin "11.0") // lcd.noDisplay (); // Fikni ekranin (mbishkrimi do të zhduket nga ekrani) lcd.display(); // Ndizni ekranin (mbishkrimi do të shfaqet në ekran në të njëjtin vend) lcd.scrollDisplayLeft(); // Zhvendos koordinatat e kolonave majtas (ekrani do të shfaqë "arduino.ru" pa shkronjën e parë "i", e cila do të shkojë përtej ekranit, por do të mbetet në RAM-in e saj) lcd.scrollDisplayRight(); // Zhvendos koordinatat e kolonës në të djathtë (ekrani do të shfaqë "iarduino.ru" në të njëjtin vend ku u shfaq fillimisht) lcd.clear(); // Pastroni ekranin (mbishkrimi do të zhduket përgjithmonë nga ekrani) lcd.noBacklight(); // Fikni dritën e prapme të ekranit lcd.backlight(); // Aktivizoni dritën e prapme të ekranit lcd.setBacklight(0); // Fikni dritën e prapme të ekranit lcd.setBacklight(1); // Ndizni dritën e prapme të ekranit

Funksionet e kontrollit të kursorit:

vendos Kursorin( kol , rresht );
Vendos kursorin në pozicionin e specifikuar.
Parametri:
  • koloni: numri i kolonës (duke filluar nga 0).
  • rresht: numri i linjës (duke filluar nga 0)
shtëpi ();
Vendosja e kursorit në pozicionin 0,0. Funksionon si funksioni setCursor(0,0);
Shënim: kërkon shumë kohë.
blink ();
Aktivizo kursorin që pulson.
Shënim: Kursori zë të gjithë fushën e karaktereve dhe pulson me një frekuencë prej rreth 1 Hz, në pozicionin ku ishte vendosur më parë.
noBlink();
Fikni kursorin që pulson.
Shënim: Kursori bëhet i padukshëm, por pozicioni i tij ruhet.
kursori ();
Aktivizo nënvizimin e kursorit.
Shënim: Kursori merr formën e një karakteri nënvizues dhe ndodhet në pozicionin ku ishte vendosur më parë.
noCursor();
Çaktivizo nënvizimin e kursorit.
Shënim: Kursori bëhet i padukshëm, por pozicioni i tij ruhet.
lcd.setCursor(0, 1); // Vendosni kursorin në karakterin e parë të rreshtit të dytë (numërimi i rreshtave dhe kolonave fillon nga 0) lcd.home(); // Vendosni kursorin në karakterin e parë të rreshtit të parë (si kur thirrni lcd.setCursor(0,0);) lcd.blink(); // Bëje kursorin të dukshëm (një drejtkëndësh do të pulsojë në vend të kursorit) lcd.noBlink(); // Bëje kursorin të padukshëm (hiq drejtkëndëshin që vezullon) lcd.cursor(); // Bëje kursorin të dukshëm (në vend të kursorit do të shfaqet një nënvizim) lcd.noCursor(); // Bëni kursorin të padukshëm (hiqni nënvizimin) // Nëse kursori godet një vend ku ka një karakter, atëherë ky karakter nuk zhduket

Funksionet që tregojnë drejtimin dhe shtrirjen:

majtasNëDjathtas();
Përcakton që pas çdo karakteri të ri, pozicioni i kursorit duhet të lëvizë një kolonë në të djathtë.
Shënim: Nëse shfaqni tekstin "abc", ekrani do të tregojë "abc" dhe teksti do të jetë në të djathtë të pozicionit origjinal të kursorit.
(Si zakonisht)
djathtas në të majtë ();
Përcakton që pas çdo karakteri të ri, pozicioni i kursorit duhet të lëvizë një kolonë në të majtë.
Shënim: Nëse shfaqni tekstin "abc", ekrani do të shfaq "cba" dhe teksti do të jetë në të majtë të pozicionit origjinal të kursorit.
(Shkruani nga e djathta në të majtë)
noAutoscroll();
Tregon që në të ardhmen, teksti duhet të përafrohet në të majtë të pozicionit origjinal të kursorit.
Shënim: nëse vendosni kursorin në pozicionin 10.0 dhe shfaqni tekstin, atëherë karakteri i parë i tekstit të shfaqur do të jetë në këtë pozicion.
(Si zakonisht)
autoscroll();
Tregon se në të ardhmen, teksti duhet të përafrohet në të djathtë të pozicionit origjinal të kursorit.
Shënim: nëse e vendosni kursorin në pozicionin 10.0 dhe shfaqni tekstin, kursori do të jetë në këtë pozicion.
(Koordinatat e ekranit do të zhvendosen në të majtë, sikur të keni thirrur funksionin scrollDisplayLeft aq herë sa ka shkronja në tekstin e daljes)
lcd.leftToDjathtas(); // Udhëzoni kursorin të lëvizë djathtas (Si zakonisht në shkrimet evropiane) lcd.clear(); lcd.setCursor(5,0); lcd.print("ABC"); // Në ekran do të shohim: "ABC" (Pas "A" kursori u zhvendos djathtas dhe u shfaq "B", pastaj kursori u zhvendos në të djathtë dhe u shfaq "C") lcd.rightToLeft(); // Thuaji kursorit të lëvizë majtas (Si në shkrimin nga e djathta në të majtë) lcd.clear(); lcd.setCursor(5,0); lcd.print("ABC"); // Në ekran do të shohim: "CBA" (Pas "A" kursori u zhvendos majtas dhe u shfaq "B", më pas kursori u zhvendos majtas dhe u shfaq "C") lcd.noAutoscroll(); // Vendos shtrirjen majtas (Si zakonisht) lcd.clear(); lcd.setCursor(5,0); lcd.print("ABC"); // Në ekran do të shohim: "ABC" (Si zakonisht) lcd.autoscroll(); // Vendosni shtrirjen në të djathtë (Koordinatat e ekranit do të zhvendosen majtas nga numri i karaktereve të shfaqura) lcd.clear(); lcd.setCursor(5,0); lcd.print("ABC"); // Në ekran do të shohim: "ABC" (Koordinatat e ekranit do të zhvendosen 3 karaktere majtas, pasi pas çdo karakteri bëhet një thirrje në funksionin scrollDisplayLeft)

Funksionet e futjes së tekstit dhe simbolit:

createChar(num, grup);
Shkruan një karakter të personalizuar në CGRAM të ekranit nën numrin e specifikuar.
Nëse dëshironi të shfaqni tekst (duke përdorur funksionin e printimit) që duhet të përmbajë karakterin që keni vendosur, specifikoni një vijë të pjerrët dhe numrin nën të cilin është shkruar ky karakter: print("C\1MBO\2").
Parametri:
  • numër: numri me të cilin do të shkruhet simboli.
  • grup: një grup që përfaqëson karakterin që do të shkruhet.
Shënim: Vargu përbëhet nga disa bajt, numri i të cilëve është i barabartë me numrin e rreshtave në simbol. Çdo bit i caktuar i bajtit korrespondon me një grup (të shfaqur) piksel karakteresh.
print(tekst);
Shfaqni tekstin, simbolet ose numrat në ekranin e ekranit.
Parametri:
  • teksti: karakteri, numri ose vargu që do të shfaqet.
Shënim: Sintaksa është e ngjashme me funksionin e klasës Serial me të njëjtin emër.
#përfshi // Lidhni bibliotekën për të punuar me autobusin I2C #include // Lidhni bibliotekën për të punuar me një ekran LCD nëpërmjet autobusit I2C LiquidCrystal_I2C lcd(0x27,16,2); // Deklaroni një objekt bibliotekë, duke treguar parametrat e ekranit (adresa I2C = 0x27, numri i kolonave = 16, numri i rreshtave = 2) // uint8_t simbol_d = (0b00000, // 1 rresht i simbolit "d" 0b00000, / / Rreshti i dytë i simbolit "d" " 0b00110, // rreshti i 3-të i karakterit "d" 0b01010, // Rreshti i 4-të i karakterit "D" 0b01010, // Rreshti i 5-të i karakterit "d" 0b01010, // Rreshti i 6-të i karakterit "d" 0b11111, // rreshti i 7-të i karakterit "d" " 0b10001); // Rreshti i 8-të i simbolit "d" I gjithë grupi mund të shkruhet në një rresht: uint8_t simbol_d=(0,0,6,10,10,10,31,17); // uint8_t simbol_i = (0b00000, // Rreshti i parë i simbolit "dhe" 0b00000, // rreshti i dytë i simbolit "dhe" 0b10001, // rreshti i 3-të i simbolit "dhe" 0b10011, // Rreshti i 4-të i simboli "dhe" 0b10101, // rreshti i 5-të i simbolit "dhe" 0b11001, // rreshti i 6-të i simbolit "dhe" 0b10001, // rreshti i 7-të i simbolit "dhe" 0b00000); // Rreshti i 8-të i simbolit "dhe" I gjithë grupi mund të shkruhet në një rresht: uint8_t simbol_i=(0,0,17,19,21,25,17,0); void setup())( // lcd.init(); // Filloni punën me ekranin LCD lcd.backlight(); // Aktivizoni dritën e prapme të ekranit LCD lcd.createChar(1,symbol_d); // Ngarko simboli i parë në memorien e ekranit lcd .createChar(2,symbol_i); // Ngarko simbolin e dytë në memorien e ekranit lcd.clear(); // Pastro ekranin lcd.setCursor(0,0); // Vendos kursori në këndin më të lartë lcd.print("Pa\ 1\2o"); // Nxjerr tekstin "Radio" ndërsa shkruan karakteret "P", "a", "o" në latinisht, ) // dhe karakteret "d", "i" dalin nga memoria e ekranit, duke treguar numrat e tyre // void loop())( // lcd.setCursor(0,1); lcd.print(" "); // fshij të gjithë pjesën e poshtme rreshti lcd.setCursor(0,1); lcd.print("i"); lcd.print("arduino"); lcd.print(".ru"); // shfaq tekstin "i" "arduino" " .ru" në vonesë të vijës fundore(2000); // prisni 2 sekonda lcd.setCursor(0,1); lcd.print(" "); // fshini të gjithë rreshtin e fundit lcd.setCursor(0,1); lcd.print(12.345); // shfaq numrin 12.34 (shfaqen 2 shifra dhjetore) delay(2000); // prisni 2 sekonda lcd.setCursor(0,1); lcd.print(" "); // fshij të gjithë vijën fundore lcd.setCursor(0,1); lcd.print(12, HEX); // shfaq numrin 12 si vonesë heksadecimal (2000); // prisni 2 sekonda lcd.setCursor(0,1); lcd.print(" "); // fshij të gjithë vijën fundore lcd.setCursor(0,1); LCD.print(1); // shfaq numrin 1 të vonesës (2000); // prisni 2 sekonda)

Linja rrëshqitëse në LCD në HD44780.

Kërkimi për një "zgjidhje të gatshme" për një shenjë në C nuk dha asnjë rezultat. Kështu që më duhej ta bëja vetë.

Kjo "pjesë" e kodit ju lejon të shfaqni një linjë vrapuese (nga e djathta në të majtë), në çdo vend dhe duke përdorur çdo numër njohurish, në treguesit LCD me një kontrollues HD44780 ose të ngjashme.

Gjëja e parë që duhet të vini në dukje është se gjuha C nuk ju lejon të punoni me vargje "direkt". Kjo do të thotë, është e pamundur të kopjoni një karakter nga një varg në tjetrin duke përdorur operatorin e caktimit ( = )... për këtë ju duhet të përdorni një funksion të veçantë strncpy (). Në përgjithësi, disa funksione përdoren për të punuar me vargjet në C. Në Vetë-Tormentuesit, një kapitull i veçantë i kushtohet përdorimit të këtyre funksioneve. Në Help"e në CV_AVR, një përshkrim i funksioneve për të punuar me vargjet është në seksion "Funksionet e vargut". Prototipet e këtyre funksioneve janë në skedar varg.h.

"...vargu burimor..." - një varg karakteresh nga i cili duhet të shfaqet në rreshtin "running";

"...personazhet e shfaqura..." - "vija rrëshqitëse" aktuale.

Algoritmi i mëposhtëm u zgjodh për të organizuar linjën zvarritëse:

1. Karakteret e shfaqura zhvendosen nga e djathta në të majtë. E majta është "humbur" në këtë rast.

2. Pas zhvendosjes, karakteri tjetër nga vargu burimor kopjohet në karakterin më të djathtë.

3. Kur arrihet fundi i linjës burimore, karakteri i parë i linjës burimore bëhet karakteri tjetër.

Për të zhvendosur karakteret - për qelizën që zhvendoset, kodi i karakterit lexohet nga ekrani RAM (DDRAM) HD44780 dhe shkruhet në qelizën RAM në të majtë.

Sipas DataSheet në HD44780, karakteri i majtë i rreshtit të sipërm ka një adresë DDRAM prej 0x00, dhe karakteri i majtë i rreshtit fundor ka një adresë 0x40. Duhet mbajtur mend se për të hyrë në RAM-in e ekranit (dhe jo në RAM-in e gjeneratorit të karaktereve), biti RS duhet të jetë i barabartë me 1 (RS është biti më domethënës në bajtin e adresës, shikoni DataSheet).

Si rezultat, marrim se për të "adresuar" karakterin e dytë të majtë të rreshtit të sipërm, duhet të "punoni" me adresën 0x01 | 0x80 = 0x81.

Funksionet për shkrimin dhe leximin e "përmbajtjes së brendshme" të HD44780 janë në bibliotekë (prototipet në LCD.h.... prandaj.. vetë programi:

/* për CV_AVR

Në këtë shembull, linja e ekzekutimit shfaqet në bitet 8 (0xC7) deri në 16 të vijës fundore të një treguesi 16-bitësh.

. ......

#përfshi

char e panënshkruar n_sim=1,m_fund=43; //43 - gjatësia e rreshtit në shembull
...........

beg_stroka())(
char i panënshkruar;

// zhvendosja e vijës zvarritëse

if(beg_str)(
për(i=0;i<9;i++)lcd_write_byte(0xC7+i,lcd_read_byte(0xC8+i));
beg_str=0;

// shkrimi i karakterit tjetër në pozicionin më të djathtë

lcd_gotoksi (15,1);
lcd_putchar(ish_str);
nëse(++n_sim>m_fund)n_sim=1;
}
}

Fjalor:

n_sim - treguesi i pozicionit të karakterit aktual në vargun burimor;

m_end - numri i përgjithshëm i karaktereve në vargun burimor;

beg_str- bit "aktivizo" zhvendosjen. Me ndihmën e tij ju mund të rregulloni shpejtësinë e drejtimit;

ish_str - varg burimor.

Me shumë mundësi, secili nga përpiluesit ekzistues C ka funksione të bibliotekës për të punuar me HD44780. Prandaj, "ribërja" e programit për përpiluesin "tuaj" nuk do të jetë e vështirë.

Unë "përgatis" vargun e burimit duke përdorur mjetin e mirënjohur "HD44780.exe". Kur e përdorni, gjatësia e rreshtit tregohet në komentet: "/* Gjatësia maksimale e rreshtit: 43 bajt */"

Artikujt më të mirë mbi këtë temë