- Afișaj LCD alfanumeric 16x2
- Biblioteca CCS LCD 16x2 pentru MSP430
- Funcții LCD pentru afișaj LCD 16x2 pe MSP430
- Schema circuitului la interfața LCD cu MSP430
- Programarea MSP430 folosind Code Composer Studio pentru afișaj LCD
Acest articol este continuarea seriei noastre de tutoriale despre programarea MSP430 folosind Code Composer Studio. Ultimul tutorial s-a bazat pe întreruperi externe pe MSP430 folosind pini GPIO. Acest tutorial este despre interfațarea unui afișaj cu MSP430, atunci când vine vorba de afișarea afișajului LCD 16 * 2, este prima alegere pentru orice hobbyist electronic. Anterior, am interfațat și LCD-ul cu MSP430 folosind Arduino IDE, în acest tutorial vom folosi platforma nativă de studio Code Composer în loc să folosim Arduino IDE, în acest fel ca designer, obținem mai multă flexibilitate.
Pentru a afla mai multe despre ecranul LCD de 16x2 și despre utilizarea acestuia cu alte microcontrolere, consultați mai jos tutoriale.
- Interfață LCD cu ATmega16
- Interfață LCD cu Raspberry Pi
- Interfață LCD cu microcontroler PIC
- Interfață LCD cu ARM7-LPC2148
- Interfață LCD cu NodeMCU
- Interfață LCD cu STM32
- Interfață LCD cu MSP430G2
- Interfață LCD cu STM8
Are un IC hd44780 încorporat care poate stoca comanda și datele transmise acestuia. Modulul LCD are aproximativ 16 pini. Din care 8 sunt pini de date, 4 dintre aceștia sunt pini de alimentare pentru LED-ul de iluminare din spate și întregul modul LCD, 3 pentru controlul funcționării și 1 pin pentru reglarea contrastului. Tutorialul se bazează pe biblioteca creată de Dennis Eichmann. Este foarte ușor de utilizat o bibliotecă cu funcții separate pentru a tipări diferite tipuri de date. De asemenea, are prevederi pentru a afișa datele în diferite forme cu zero-uri inițiale, necompletate și șterse. Este o bibliotecă destul de expansivă și cuprinzătoare și este configurabilă pentru diferitele conexiuni. Aici, fișierul antet este modificat pentru a găzdui o configurație paralelă cu 8 pini pentru comunicarea datelor.
Afișaj LCD alfanumeric 16x2
Un afișaj 16x2 generic are un IC hd44780 încorporat (cercuit cu roșu mai jos), care poate stoca comanda și datele transmise acestuia. Modulul LCD are aproximativ 16 pini. Din care 8 sunt pini de date, 4 dintre aceștia sunt pini de alimentare pentru LED-ul de iluminare din spate și întregul modul LCD, 3 pentru controlul funcționării și 1 pin pentru reglarea contrastului.
Acest modul LCD este prezentat mai sus versatil și folosește pinii minimi în comparație cu alte LCD-uri segmentate. Dacă sunteți curioși să știți exact cum funcționează toate acestea, ar trebui să verificați funcționarea afișajului LCD 16x2, unde am discutat deja cum funcționează LCD-ul în detaliu.
Pin RS: RS = 1 va activa registrul de date pe ecranul LCD, care este utilizat pentru a scrie valorile în registrul de date în ecranul LCD. RS = 0 va activa registrul de instrucțiuni al ecranului LCD.
Activați pinul: declanșat de margine negativ; când pinul este schimbat din starea HIGH în starea LOW, LCD este solicitat să scrie pe pinii de date. Declanșat pozitiv la margine; când pinul este schimbat din starea LOW în starea HIGH, LCD-ul este solicitat să citească din pinii de date.
Pin R / W: R / W = 0 va scrie în registrul de instrucțiuni sau în registrul de date conform selecției pinului RS. R / W = 1 va citi din IR sau DR conform selecției pinului RS.
Funcționare RS R / W
0 0 scriere IR ca o operație internă (afișaj clar etc.)
0 1 Citiți semnalizatorul ocupat (DB7) și contorul de adrese (DB0 la DB6)
1 0 DR scrie ca o operație internă (DR în DDRAM sau CGRAM)
1 1 DR citit ca o operație internă (DDRAM sau CGRAM la DR)
Pinii D0-D7: datele sunt transferate către și din registrele de comandă și date prin acești pin.
Pinii de alimentare: pinii V ss, V dd sunt utilizați pentru alimentarea modulului LCD. A, pinii K vor alimenta lumina de fundal cu LED-uri. V 0 pini sunt folosiți pentru a controla contrastul.
Biblioteca CCS LCD 16x2 pentru MSP430
Tutorialul se bazează pe biblioteca creată de Dennis Eichmann. Este foarte ușor de utilizat o bibliotecă cu funcții separate pentru a tipări diferite tipuri de date. De asemenea, are prevederi pentru a afișa datele în diferite forme cu zero-uri inițiale, necompletate și șterse. Este o bibliotecă destul de expansivă și cuprinzătoare și este configurabilă pentru diferitele conexiuni. Aici, fișierul antet este modificat pentru a găzdui o configurație paralelă cu 8 pini pentru comunicarea datelor. Biblioteca poate fi descărcată de pe linkul de mai jos, după descărcare, urmați pașii de mai jos pentru a adăuga biblioteca la CCS.
Descărcați Biblioteca 16x2 pentru MSP430 - Code Composer Studio
Pasul 1: Crearea fișierelor și proiectelor
Un proiect CCS implicit este creat folosind meniul fișier. În caseta de dialog Creare proiect, selectați dispozitivul și dați hd44780 ca nume de proiect. Sub Tipul proiectului și lanțul de instrumente, selectați tipul de ieșire ca bibliotecă statică și creați proiectul.
În banda Project Explorer (partea stângă), creați un fișier antet în folderul include și denumiți-l ca hd44780.h . Apoi copiați conținutul fișierului descărcat hd44780.h în cel nou creat.
Acum creați proiectul principal schimbând tipul de ieșire într-un executabil și creați un proiect numit CCS_LCD .
Pasul 2: includeți căile de căutare către proiectul principal
În caseta de dialog proprietăți a proiectului hd44780 și în interiorul opțiunilor de includere pentru compilatorul MSP430, adăugați folderul include în fișier calea de căutare.
Apoi, construiți acest proiect pentru a crea fișierele linker necesare, cum ar fi fișierele.lib . Construind acest lucru se va crea fișierul hd44780.lib în dosarul de depanare.
Pasul 3: includeți căile de căutare pentru linker
În caseta de dialog proprietăți pentru proiectul CCS_LCD și în calea de căutare a fișierelor din fila MSP430 Linker, includeți hd44780.lib aflat în folderul de depanare al proiectului hd44780. Dosarul de depanare este, de asemenea, inclus în calea de căutare a fișierelor.
Folderul include este din nou adăugat la opțiunile de includere ale compilatorului MSP430 al proiectului CCS_LCD .
Biblioteca este compilată cu succes și adăugată la linker-ul proiectului principal.
Funcții LCD pentru afișaj LCD 16x2 pe MSP430
void hd44780_timer_isr (void): Aceasta este numită periodic în ISR-ul temporizatorului A. Timerul A este utilizat pentru a efectua periodic funcțiile LCD, cum ar fi ștergerea ecranului, setarea cursorului și afișarea datelor. Funcția trebuie utilizată în ISR. Nu returnează nimic.
uint8_t hd44780_write_string (char * ch__string, uint8_t u8__row, uint8_t u8__column, uint8_t u8__cr_lf): Va scrie șirul specificat în primul argument.
char * ch__string: Șirul care trebuie scris în memoria tampon de date (în interiorul funcției hd44780_timer_isr ). Datele vor fi copiate în registrul de date și în registrul de instrucțiuni al IC-ului LCD atunci când hd44780_timer_isr este apelat periodic.
uint8_t u8__row: definește rândul în care va fi scris șirul.
uint8_t u8__column: definește coloana în care va fi scris șirul.
uint8_t u8__cr_lf: Dacă este setat 1, rândul va fi trecut la următorul. Dacă este 0, imprimarea se oprește pe același rând.
void hd44780_clear_screen (void): Această funcție va șterge întregul ecran. Nu returnează nimic.
uint8_t hd44780_output_unsigned_16bit_value (uint16_t u16__value, uint8_t u8__leading_zero_handling, uint8_t u8__row, uint8_t u8__column, uint8_t u8__cr_lf): Funcția va afișa valoarea de 16 biți a locației dorite.
uint16_t u16__value: Întregul care trebuie afișat este dat în primul argument.
uint8_t u8__leading_zero_handling: Dacă se trece 0, zero- urile inițiale vor fi afișate la valoarea întregului va fi afișat. Dacă 1 este trecut, zero-urile vor fi șterse. Dacă 2 este trecut ca parametru, vor fi afișate numai cifrele semnificative.
uint8_t u8__row: rândul în care este afișat numărul întreg este selectat.
uint8_t u8__column: Coloana de imprimat este selectată folosind argumentul.
uint8_t u8__cr_lf: Dacă este setat 1, rândul va fi trecut la următorul. Dacă este 0, imprimarea se oprește pe același rând.
Schema circuitului la interfața LCD cu MSP430
Schema completă a circuitului este ilustrată în imaginea de mai jos. După cum puteți vedea, conexiunile hardware sunt foarte simple și am alimentat placa completă utilizând un adaptor de 5V.
Conexiunile sunt realizate conform schitei de mai sus. Vă rugăm să căutați în tabelul de mai jos conexiunile detaliate.
Vss | Masa sursei de alimentare de 5V |
Vdd | 5V |
V0 | Ieșire potențiometru |
RS | P2.1 |
R / W | Sol |
E | P2.0 |
D0 | P1.0 |
D1 | P1.1 |
D2 | P1.2 |
D3 | P1.3 |
D4 | P1.4 |
D5 | P1.5 |
D6 | P1.6 |
D7 | P1.7 |
A | Rezistor de 220 Ohm |
K | Sol |
Anodul luminii de fundal cu LED nu poate fi conectat direct la o sursă de 5V. Ar trebui să fie conectat la o rezistență pentru a minimiza fluxul de curent prin modulul LCD. Mi-am făcut conexiunile folosind o placă de perfecționare pentru a lipi LCD-ul și apoi am folosit fire jumper pentru a conecta LCD-ul cu placa MSP430, configurarea mea arată așa mai jos, dar puteți utiliza pur și simplu o placă de calcul pentru a vă face conexiunile.
Programarea MSP430 folosind Code Composer Studio pentru afișaj LCD
Codul complet utilizat în acest proiect este dat în partea de jos a acestei pagini. Explicația utilizării codului este următoarea. Mai întâi, deschideți fișierul antet (hd44780.h) și includeți numărul piesei microcontrolerului în prima parte a fișierului.
#include "msp430g2553.h"
Cronometrul câinelui de pază trebuie oprit mai întâi. Registrele de control DCOCTL și BCSCTL1 sunt utilizate pentru a configura oscilatorul microcontrolerului. Liniile de mai jos vor configura MCLK să fie 1MHZ.
WDTCTL = (WDTPW - WDTHOLD); BCSCTL1 = CALBC1_1MHZ; DCOCTL = CALDCO_1MHZ;
Pinii portului 1 trebuie menționați ca ieșire, care urmează să fie utilizați pentru pinii de date. Pinul 0 și pinul 1 trebuie, de asemenea, să fie menționate ca ieșire în portul 2, care va fi utilizat pentru pinul RS și R / W.
P1DIR = 0xFF; P2DIR = (0x01 - 0x02);
Temporizatorul încorporat este utilizat pentru a afișa valorile periodic. Temporizatorul A este selectat cu SMCLK (1MHZ) ca sursă de ceas și modul continuu fiind modul de funcționare.
TA0CCR1 = 32768; TA0CCTL1 = CCIE; TA0CTL = (TASSEL_2 - MC_2 - TACLR);
Întreruperile pentru canalele de comparare 1 și 2 și întreruperea de depășire a temporizatorului partajează același vector de întrerupere ( TIMER0_A1_VECTOR ) cu adrese de pornire diferite. Canalul de comparare Capture 1 (CCR1) folosește 2 ca adresă, care este utilizată în cazul comutatorului.
#pragma vector = TIMER0_A1_VECTOR __interrupt void timer_0_a1_isr (void) { switch (TA0IV) { case 2: { hd44780_timer_isr (); pauză; } } }
Odată ce ați compilat codul, îl puteți încărca pe placa MSP430, așa cum este explicat în începutul tutorialului MSP430. Dacă totul merge așa cum era de așteptat, ar trebui să vedeți ecranul LCD cu un anumit contrast, așa cum se arată mai jos.
Dacă testul dvs. este foarte slab, puteți încerca să reglați potențiometrul pentru a obține un contrast mai bun. Funcționarea completă a proiectului poate fi găsită și în videoclipul legat mai jos. Sper că ți-a plăcut proiectul și ți s-a părut interesant să-ți construiești propriul. Dacă aveți întrebări, vă rugăm să le lăsați în secțiunea de comentarii de mai jos. De asemenea, puteți scrie toate întrebările dvs. tehnice pe forumuri pentru a primi răspunsuri sau pentru a începe o discuție.