Questo è il nostro sesto tutorial nella nostra serie di tutorial PIC, in questo tutorial impariamo l' interfacciamento di LCD 16x2 con il microcontrollore PIC. Nei nostri tutorial precedenti abbiamo appreso le basi del PIC utilizzando alcuni programmi lampeggianti a LED e abbiamo anche imparato come utilizzare i timer nel microcontrollore PIC. Puoi controllare qui tutti i tutorial sull'apprendimento dei microcontrollori PIC utilizzando il compilatore MPLABX e XC8.
Questo tutorial sarà interessante perché impareremo come interfacciare LCD 16 × 2 con PIC16F877A, controlla il video dettagliato alla fine di questo tutorial. Sono finiti i vecchi tempi in cui usavamo i LED per le indicazioni degli utenti. Vediamo come possiamo rendere i nostri progetti più interessanti e utili utilizzando i display LCD. Controlla anche i nostri precedenti articoli sull'interfacciamento di LCD con 8051, con Arduino, con Raspberry Pi, con AVR.
Funzioni per l'interfacciamento dell'LCD con il microcontrollore PIC:
Per rendere le cose più semplici abbiamo creato una piccola libreria che potrebbe semplificare le cose durante l'utilizzo di questo LCD con il nostro PIC16F877A. Il file di intestazione "MyLCD.h" viene fornito qui per il download, che contiene tutte le funzioni necessarie per pilotare l'LCD utilizzando PIC MCU. Il codice della libreria è ben spiegato dalle righe di commento ma se hai ancora dubbi contattaci tramite la sezione commenti. Controlla anche questo articolo per il funzionamento dell'LCD di base e i suoi piedini.
Nota: si consiglia sempre di sapere cosa sta effettivamente accadendo all'interno del file di intestazione perché ti aiuterà nel debug o durante la modifica dell'MCU.
Ora ci sono due modi per aggiungere questo codice nel tuo programma. Puoi copiare tutte le righe di codice sopra in MyLCD.he incollarle prima di void main (). Oppure puoi scaricare il file di intestazione utilizzando il link e aggiungerlo al file di intestazione del tuo progetto ( #include "MyLCD.h "; ). Questo può essere fatto facendo clic con il pulsante destro del mouse sul file di intestazione e selezionando Aggiungi elemento esistente e sfogliando questo file di intestazione.
Qui ho copiato e incollato il codice del file di intestazione nel mio file C principale. Quindi, se stai usando il nostro codice, non è necessario scaricare e aggiungere il file di intestazione nel tuo programma, usa semplicemente il codice completo fornito alla fine di questo tutorial. Notare inoltre che questa libreria supporterà solo il microcontrollore PIC della serie PIC16F.
Qui sto spiegando ogni funzione all'interno del nostro file di intestazione di seguito:
void Lcd_Start (): questa funzione dovrebbe essere la prima funzione che deve essere chiamata per iniziare a lavorare con il nostro LCD. Dovremmo chiamare questa funzione solo una volta per evitare ritardi nel programma.
void Lcd_Start () {Lcd_SetBit (0x00); for (int i = 1065244; i <= 0; i--) NOP (); Lcd_Cmd (0x03); __delay_ms (5); Lcd_Cmd (0x03); __delay_ms (11); Lcd_Cmd (0x03); Lcd_Cmd (0x02); // 02H è usato per Return home -> Cancella la RAM e inizializza l'LCD Lcd_Cmd (0x02); // 02H è usato per Return home -> Cancella la RAM e inizializza l'LCD Lcd_Cmd (0x08); // Seleziona la riga 1 Lcd_Cmd (0x00); // Cancella riga 1 Visualizza Lcd_Cmd (0x0C); // Seleziona riga 2 Lcd_Cmd (0x00); // Cancella visualizzazione riga 2 Lcd_Cmd (0x06); }
Lcd_Clear (): questa funzione cancella lo schermo LCD e può essere utilizzata all'interno dei loop per cancellare l'aspetto dei dati precedenti.
Lcd_Clear () {Lcd_Cmd (0); // Cancella il display LCD Lcd_Cmd (1); // Sposta il cursore nella prima posizione}
void Lcd_Set_Cursor (x pos, y pos): Una volta avviato, il nostro LCD è pronto per ricevere comandi, possiamo istruire l'LCD a impostare il suo cursore nella posizione preferita utilizzando questa funzione. Supponiamo di aver bisogno del cursore al quinto carattere della prima riga. Quindi la funzione sarà void Lcd_Set_Cursor (1, 5)
void Lcd_Set_Cursor (char a, char b) {char temp, z, y; se (a == 1) {temp = 0x80 + b - 1; // 80H viene utilizzato per spostare il cursore z = temp >> 4; // 8 bit inferiori y = temp & 0x0F; // 8 bit superiori Lcd_Cmd (z); // Imposta riga Lcd_Cmd (y); // Set Column} else if (a == 2) {temp = 0xC0 + b - 1; z = temp >> 4; // 8 bit inferiori y = temp & 0x0F; // 8 bit superiori Lcd_Cmd (z); // Imposta riga Lcd_Cmd (y); // Imposta colonna}}
void Lcd_Print_Char (char data): Una volta che il cursore è impostato, possiamo scrivere un carattere nella sua posizione semplicemente chiamando questa funzione.
void Lcd_Print_Char (char data) // Invia 8 bit tramite la modalità 4 bit {char Lower_Nibble, Upper_Nibble; Lower_Nibble = dati & 0x0F; Upper_Nibble = dati & 0xF0; RS = 1; // => RS = 1 Lcd_SetBit (Upper_Nibble >> 4); // Invia la metà superiore spostando di 4 EN = 1; for (int i = 2130483; i <= 0; i--) NOP (); EN = 0; Lcd_SetBit (Lower_Nibble); // Invia metà inferiore EN = 1; for (int i = 2130483; i <= 0; i--) NOP (); EN = 0; }
void Lcd_Print_String (char * a): se deve essere visualizzato un gruppo di caratteri, è possibile utilizzare la funzione stringa.
void Lcd_Print_String (char * a) {int i; for (i = 0; a! = '\ 0'; i ++) Lcd_Print_Char (a); // Suddividi la stringa usando i puntatori e chiama la funzione Char}
Ogni volta che viene chiamato Lcd_Print_Char (dati char) , i suoi rispettivi valori di carattere vengono inviati alle linee dati dell'LCD. Questi caratteri raggiungono l'HD44780U sotto forma di bit. Ora questo IC collega i bit al carattere da visualizzare utilizzando la sua memoria ROM come mostrato nella tabella seguente. Puoi trovare i bit per tutti i caratteri nel datasheet del controller LCD HD44780U.
Ora, poiché siamo soddisfatti del nostro file di intestazione, costruiamo il circuito e testiamo il programma. Controlla anche il file di intestazione completo fornito nel link sopra.
Schema del circuito e test:
Di seguito è riportato lo schema del circuito per l'interfacciamento di LCD 16x2 con microcontrollore PIC.
Non ho mostrato l'alimentatore o la connessione ICSP nel circuito sopra, poiché stiamo usando la stessa scheda che abbiamo usato nel tutorial precedente, controlla qui.
Una cosa importante da notare nel programma sono le definizioni dei pin di LCD:
#define RS RD2 #define EN RD3 #define D4 RD4 #define D5 RD5 #define D6 RD6 #define D7 RD7
Queste definizioni dei pin possono essere modificate in base alla configurazione hardware del programmatore. Ricorda di modificare la configurazione della porta rispettata nella funzione principale se cambi qui.
L'hardware per questo progetto è molto semplice. Riutilizzeremo lo stesso modulo PIC che abbiamo usato l'ultima volta e collegheremo il modulo LCD al nostro PIC usando cavi jumper.
Il collegamento può essere compreso dalla seguente tabella:
N. pin LCD |
Nome pin LCD |
Nome pin MCU |
N. pin MCU |
1 |
Terra |
Terra |
12 |
2 |
VCC |
+ 5V |
11 |
3 |
VEE |
Terra |
12 |
4 |
Registrati Seleziona |
RD2 |
21 |
5 |
Leggere scrivere |
Terra |
12 |
6 |
Abilitare |
RD3 |
22 |
7 |
Bit di dati 0 |
NC |
- |
8 |
Bit di dati 1 |
NC |
- |
9 |
Bit di dati 2 |
NC |
- |
10 |
Bit di dati 3 |
NC |
- |
11 |
Bit di dati 4 |
RD4 |
27 |
12 |
Bit di dati 5 |
RD5 |
28 |
13 |
Bit di dati 6 |
RD6 |
29 |
14 |
Bit di dati 7 |
RD7 |
30 |
15 |
LED positivo |
+ 5V |
11 |
16 |
LED negativo |
Terra |
12 |
Ora facciamo semplicemente le connessioni, scarichiamo il codice sul nostro MCU e verifichiamo l'output.
In caso di problemi o dubbi, utilizzare la sezione commenti. Controlla anche il video dimostrativo fornito di seguito.