Search Code

Cod Arduino pentru un ecran LCD Nokia 5110

Cod Arduino pentru un ecran LCD Nokia 5110


În acest tutorial, vom explora cum să folosim ecranul LCD Nokia 5110 cu un Arduino pentru a afișa diverse grafice și texte. Proiectul va demonstra cum să desenăm linii, cercuri, dreptunghiuri și chiar să afișăm text în interiorul acestor forme. Până la final, vei înțelege mai bine cum să interacționezi cu acest LCD folosind cod Arduino.

Nokia 5110_LCD

Pentru o ghidare mai clară, te încurajez să urmărești videoclipul asociat pentru o reprezentare vizuală a cablajului și implementării codului (în videoclip la 00:00).

Hardware Explicat

LCD-ul Nokia 5110 este un afișaj grafic compact care funcționează pe protocolul SPI, permițând o comunicare eficientă cu Arduino. Are o rezoluție de 84x48 pixeli, suficientă pentru afișarea de grafice și texte de bază. Afișajul necesită doar câțiva pini pentru a funcționa, fiind o alegere excelentă pentru proiecte cu opțiuni I/O limitate.

Pe lângă LCD, vei avea nevoie de o placă Arduino, de obicei un Arduino Uno sau similar, o breadboard și câțiva jumper wires. Cablajul este simplu, iar LCD-ul este alimentat prin conectarea pinului VCC la ieșirea de 5V a Arduino-ului.

Detalii din Fișa Tehnică

ProducătorPhilips
Număr de piesăPCD8544
Tensiune logică/IO3.3 V
Tensiune de alimentare3.3 – 5.0 V
Curent maxim200 µA
Rezoluție ecran84 x 48 pixeli
InterfațăSerial (SPI)
PachetModul

  • Folosește un rezistor de limitare a curentului pentru pinul LED pentru a preveni deteriorarea.
  • Asigură-te că conexiunile la VCC și GND sunt sigure pentru a evita problemele de afișare.
  • Verifică de două ori conexiunile pinilor SPI: SCE, RST, D/C, DN și SCLK.
  • Menține setarea contrastului în intervalul recomandat (40-60).
  • Actualizează afișajul după desenarea graficelor pentru a vedea modificările.

Instrucțiuni de Cablare

Arduino wiring for Nokia 5110 LCD
Arduino wiring for Nokia 5110 LCD

Pentru a cabla LCD-ul Nokia 5110 la Arduino, urmează aceste conexiuni:

  • Conectează pinul VCC al LCD-ului la pinul 5V al Arduino-ului.
  • Conectează pinul GND al LCD-ului la unul dintre pinii GND ai Arduino-ului.
  • Conectează pinul SCE al LCD-ului la pinul 7 al Arduino-ului.
  • Conectează pinul RST la pinul 6.
  • Conectează pinul D/C la pinul 5.
  • Conectează pinul DN (MOSI) la pinul 11.
  • Conectează pinul SCLK la pinul 13.
  • În final, conectează pinul LED la pinul 9 printr-un rezistor de 330 ohmi.

Aceste conexiuni vor permite Arduino-ului să comunice eficient cu LCD-ul. Dacă trebuie să ajustezi cablajul pentru configurația ta specifică, asigură-te că pinii SPI rămân consecvenți.

Exemple de Cod și Explicații

Următorul fragment de cod inițializează LCD-ul și setează contrastul:


void setup() {
  Serial.begin(9600);
  lcdBegin(); // Inițializează LCD-ul
  setContrast(40); // Setează nivelul de contrast
  delay(2000);
  clearDisplay(BLACK); // Curăță afișajul
  updateDisplay(); // Actualizează afișajul
}

În acest fragment, funcția lcdBegin() configurează pinii necesari pentru LCD, în timp ce setContrast(40) ajustează contrastul afișajului. După o scurtă întârziere, afișajul este curățat pentru a pregăti conținut nou.

Nokia 5110_LCD back view

Apoi, putem desena o linie pe afișaj:


setLine(1, 4, 70, 4, BLACK); // Desenează o linie orizontală
updateDisplay(); // Face linia vizibilă

Această linie de cod folosește funcția setLine(), care primește coordonatele de început și de sfârșit, împreună cu un parametru de culoare. După desenare, este esențial să apelezi updateDisplay() pentru a reflecta modificările pe ecran.

În final, putem afișa text într-un dreptunghi:


setRect(10, 10, 70, 40, 1, BLACK); // Desenează un dreptunghi umplut
setStr("Robojax ", 15, 20, WHITE); // Afișează text în interior
updateDisplay(); // Actualizează pentru a arăta modificările

Aici, setRect() creează un dreptunghi, în timp ce setStr() plasează text în interiorul acestuia. Parametrii de culoare definesc modul în care dreptunghiul și textul apar pe ecran.

Demonstrație / Ce să Te Aștepți

La rularea codului, ar trebui să vezi o serie de grafice afișate pe LCD-ul Nokia 5110, inclusiv linii, cercuri, dreptunghiuri și text. Asigură-te că cablajul este corect pentru a evita probleme precum polaritatea inversată sau intrările flotante, care ar putea împiedica funcționarea afișajului (în videoclip la 02:30).

Marcaje Temporale din Videoclip

  • 00:00 - Introducere în proiect
  • 01:30 - Instrucțiuni de cablare
  • 03:00 - Configurarea codului și explicații
  • 05:00 - Afișarea graficelor și textului
  • 07:30 - Concluzie și modificări suplimentare

Imagini

Nokia 5110_LCD back view
Nokia 5110_LCD back view
Arduino wiring for Nokia 5110 LCD
Arduino wiring for Nokia 5110 LCD
Nokia 5110_LCD
Nokia 5110_LCD
82-Arduino code: Dual-axis joystick with Nokia 5110 screen to display dots.
Limba: C++
/* 
 * This is Arduino code to use a dual-axis XY joystick with a Nokia 5110 LCD.
 * It also reads a switch.
 * Other Arduino libraries and videos: https://robojax.com
 
 * Watch the video for this code to learn it fully.
  * Watch the video here: https://youtu.be/Pk5Wig5EO0s

 * 
 * Get this code and other Arduino codes from Robojax.com.
 Learn Arduino step by step in a structured course with all material, wiring diagrams, and libraries
 all in one place. Purchase my course on Udemy.com: http://robojax.com/L/?id=62

If you found this tutorial helpful, please support me so I can continue creating 
content like this. You can support me on Patreon: http://robojax.com/L/?id=63

or make a donation using PayPal: http://robojax.com/L/?id=64

 *  * This code is "AS IS" without warranty or liability. Free to be used as long as you keep this note intact. * 
 * This code has been downloaded from Robojax.com
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <https://www.gnu.org/licenses/>.

 
Nokia 5110 LCD Example Code
   Graphics driver and PCD8544 interface code for SparkFun's
   84x48 Graphic LCD.
   https://www.sparkfun.com/products/10168
   Original source code:
https://github.com/sparkfun/GraphicLCD_Nokia_5110

  This stuff could all be put into a library, but we wanted to
  leave it all in one sketch to keep it as transparent as possible.

  Hardware: (Note: most of these pins can be swapped)
    Graphic LCD Pin ---------- Arduino Pin
       1-VCC       ----------------  5V
       2-GND       ----------------  GND
       3-SCE       ----------------  7
       4-RST       ----------------  6
       5-D/C       ----------------  5
       6-DN(MOSI)  ----------------  11
       7-SCLK      ----------------  13
       8-LED       - 330 Ohm res --  9
   The SCLK, DN(MOSI), must remain where they are, but the other 
   pins can be swapped. The LED pin should remain a PWM-capable
   pin. Don't forget to stick a current-limiting resistor in line
   between the LCD's LED pin and Arduino pin 9!
   Modified by Ahmad S. for Robojax.com
   on Mar 11, 2018 at 20:49 in Ajax, Ontario, Canada
*/
#include <SPI.h>
#include "robojax-nokia5110.h"

void setup()
{
  Serial.begin(9600);

  lcdBegin(); // This will setup our pins, and initialize the LCD
  //updateDisplay(); // with displayMap untouched, SFE logo
  setContrast(40); // Good values range from 40-60
  delay(2000);

  clearDisplay(BLACK);
  updateDisplay();
}


void loop()
{
 
    // setPixel takes 2 to 3 parameters. The first two parameters
    // are x and y variables. The third optional parameter is
    // a "color" boolean. 1 for black, 0 for white.
    // setPixel() with two variables will set the pixel with
    // the color set to black.
    // clearPixel() will call setPixel with the color set to
    // white.
   // setPixel(random(0, LCD_WIDTH), random(0, LCD_HEIGHT));
    // After drawing something, we must call updateDisplay()
    // to actually make the display draw something new.

    //invertDisplay(); // This will swap all bits in our display

    // setLine(x0, y0, x1, y1, bw) takes five parameters. The
    // first four are coordinates for the start and end of the 
    // line. The last parameter is the color (1=black, 0=white).
    setLine(1, 4, 70, 4, BLACK);
    updateDisplay();
delay(2000);
    //analogWrite(blPin, i); // blPin is connected to BL LED

  /* setRect Example */
  clearDisplay(WHITE); // Start fresh

  // setCircle takes 5 parameters -- x0, y0, radius, bw, and
  // lineThickness. x0 and y0 are the center coordinates of the circle.
  // radius is the...radius. bw is the color (0=white, 1=black)
  // lineThickness is the line width of the circle, 1 = smallest
  // thickness moves in towards the center.
   setCircle(20, 30, 20, BLACK, 2);
  updateDisplay();
  delay(2000);
clearDisplay(WHITE);

  setStr("Welcome to ", 0, 0, BLACK);
      updateDisplay();
    delay(100);
  setLine(0, 9, 70, 9, BLACK);
    updateDisplay();
    delay(100);
   setStr("Robojax ", 20, 20, BLACK);
  updateDisplay();
  delay(2000);
  clearDisplay(WHITE);

  
  // setRect takes six parameters (x0, y0, x1, y0, fill, bw)
  // x0, y0, x1, and y0 are the two diagonal corner coordinates
  // fill is a boolean, which determines if the rectangle is
  // filled in. bw determines the color 0=white, 1=black.
    setRect(10, 10, 70, 40, 1, BLACK);
    setStr("Robojax ", 15, 20, WHITE);
    updateDisplay();
  delay(2000);

  /* setCircle Example */
  clearDisplay(WHITE);  
 
}

Lucruri de care ai putea avea nevoie

Resurse și referințe

Încă nu sunt resurse.

Fișiere📁

Fișier necesar (.h)

Fișier Fritzing