Tämä on kuudes opetusohjelma PIC Tutorial -sarjassa, tässä opetusohjelmassa opimme 16x2 LCD: n liittämisen PIC-mikrokontrolleriin. Aikaisemmissa opetusohjelmissamme olemme oppineet PIC: n perusteet käyttämällä joitain LED-vilkkuvia ohjelmia ja oppineet myös kuinka käyttää ajastimia PIC-mikrokontrollerissa. Voit tarkistaa täältä kaikki oppaat PIC-mikrokontrollerien oppimisesta MPLABX- ja XC8-kääntäjillä.
Tämä opetusohjelma on mielenkiintoinen, koska opimme kuinka 16 × 2 LCD-näyttö liitetään PIC16F877A: n kanssa, tarkista yksityiskohtainen video tämän opetusohjelman lopussa. Menneet ovat vanhat päivät, joissa käytimme LED-merkkejä käyttäjän osoittamiseen. Katsotaanpa, kuinka voimme tehdä projekteistamme tyylikkäitä ja hyödyllisempiä käyttämällä LCD-näyttöjä. Katso myös aiemmat artikkelimme LCD-liitännästä 8051: llä, Arduinolla, Raspberry Pi: llä ja AVR: llä.
Toiminnot LCD-näytön ja PIC-mikrokontrollerin välillä:
Asioiden helpottamiseksi olemme tehneet pienen kirjaston, joka voi tehdä asioista helppoja, kun käytät tätä LCD-näyttöä PIC16F877A: n kanssa. Tässä on ladattavissa otsikkotiedosto "MyLCD.h", joka sisältää kaikki tarvittavat toiminnot nestekidenäytön ajamiseksi PIC MCU: n avulla. Kirjastokoodi selitetään hyvin kommenttiriveillä, mutta jos sinulla on vielä epäilyksiä, ota meihin yhteyttä kommenttiosion kautta. Tarkista myös tämä artikkeli, että LCD-näyttö toimii ja sen kiinnikkeet.
Huomaa: On aina suositeltavaa tietää, mitä otsikkotiedostosi sisällä tapahtuu, koska se auttaa sinua virheenkorjauksessa tai vaihdettaessa MCU: ta.
Nyt on kaksi tapaa lisätä tämä koodi ohjelmaasi. Voit joko kopioida kaikki yllä olevat koodirivit MyLCD.h-tiedostoon ja liittää ne ennen tyhjää main () -kohtaa. Tai voit ladata otsikkotiedoston linkin avulla ja lisätä ne projektisi otsikkotiedostoon ( #include "MyLCD.h "; ). Tämä voidaan tehdä napsauttamalla hiiren kakkospainikkeella otsikkotiedostoa ja valitsemalla Lisää olemassa oleva kohde ja selaamalla tähän otsikkotiedostoon.
Täällä olen kopioinut ja liittänyt otsikkotiedostokoodin C-päätiedostooni. Joten jos käytät koodiamme, sinun ei tarvitse ladata ja lisätä otsikkotiedostoa ohjelmaan, käytä vain koko tämän opetusohjelman lopussa annettua koodia. Huomaa myös, että tämä kirjasto tukee vain PIC16F-sarjan PIC-mikrokontrolleria.
Tässä selitän jokaisen toiminnon alla olevasta otsikkotiedostostamme:
void Lcd_Start (): Tämän toiminnon tulisi olla ensimmäinen toiminto, joka on kutsuttava aloittamaan LCD-näytöllä työskentely. Meidän tulisi kutsua tätä toimintoa vain kerran ohjelman viiveiden välttämiseksi.
void Lcd_Start () {Lcd_SetBit (0x00); for (int i = 1065244; i <= 0; i-) NOP (); Lcd_Cmd (0x03); __viive_ms (5); Lcd_Cmd (0x03); __viive_ms (11); Lcd_Cmd (0x03); Lcd_Cmd (0x02); // 02H: ta käytetään palaamiseen kotiin -> Tyhjentää RAM-muistin ja alustaa LCD-näytön Lcd_Cmd (0x02); // 02H: ta käytetään kotiin palaamiseen -> Tyhjentää RAM-muistin ja alustaa LCD-näytön Lcd_Cmd (0x08); // Valitse rivi 1 Lcd_Cmd (0x00); // Tyhjennä rivin 1 näyttö Lcd_Cmd (0x0C); // Valitse rivi 2 Lcd_Cmd (0x00); // Tyhjennä rivin 2 näyttö Lcd_Cmd (0x06); }
Lcd_Clear (): Tämä toiminto tyhjentää LCD-näytön ja sitä voidaan käyttää silmukoiden sisällä aiempien tietojen ulkoasun tyhjentämiseksi.
Lcd_Clear () {Lcd_Cmd (0); // Tyhjennä LCD-näyttö Lcd_Cmd (1); // Siirrä kohdistin ensimmäiseen sijaintiin}
void Lcd_Set_Cursor (x pos, y pos): Kun LCD-näyttö on aloitettu, se on valmis ottamaan komentoja, voimme neuvoa nestekidenäyttöä asettamaan kohdistin haluamaasi paikkaan tätä toimintoa käyttämällä. Oletetaan, että jos tarvitsemme kohdistimen ensimmäisen rivin 5. merkkiin. Sitten toiminto mitätöi Lcd_Set_Cursor (1, 5)
void Lcd_Set_Cursor (char a, char b) {char temp, z, y; jos (a == 1) {temp = 0x80 + b - 1; // 80H: ta käytetään kohdistimen liikuttamiseen z = temp >> 4; // Alempi 8-bittinen y = lämpötila & 0x0F; // Ylempi 8-bittinen Lcd_Cmd (z); // Aseta rivi Lcd_Cmd (y); // Aseta sarake} else if (a == 2) {temp = 0xC0 + b - 1; z = lämpötila >> 4; // Alempi 8-bittinen y = lämpötila & 0x0F; // Ylempi 8-bittinen Lcd_Cmd (z); // Aseta rivi Lcd_Cmd (y); // Aseta sarake}}
void Lcd_Print_Char (char data): Kun kohdistin on asetettu, voimme kirjoittaa merkin sen sijaintiin yksinkertaisesti kutsumalla tätä toimintoa.
void Lcd_Print_Char (char data) // Lähetä 8-bittiä 4-bittisen tilan kautta {char Lower_Nibble, Upper_Nibble; Lower_Nibble = data & 0x0F; Upper_Nibble = data & 0xF0; RS = 1; // => RS = 1 Lcd_SetBit (Upper_Nibble >> 4); // Lähetä yläpuolisko siirtämällä 4 EN = 1; for (int i = 2130483; i <= 0; i-) NOP (); EN = 0; Lcd_SetBit (Lower_Nibble); // Lähetä alaosa EN = 1; for (int i = 2130483; i <= 0; i-) NOP (); EN = 0; }
void Lcd_Print_String (char * a): Jos haluat näyttää merkkiryhmän, merkkijonofunktiota voidaan käyttää.
void Lcd_Print_String (char * a) {int i; for (i = 0; a! = '\ 0'; i ++) Lcd_Print_Char (a); // Jaa merkkijono osoittimilla ja kutsu Char-toimintoa}
Aina kun Lcd_Print_Char (char data) kutsutaan, sen vastaavat merkkiarvot lähetetään nestekidenäytön tietoriveille. Nämä merkit saavuttavat HD44780U: n bittien muodossa. Nyt tämä IC kytkee bitit näytettävään merkkiin käyttämällä ROM-muistiaan alla olevan taulukon mukaisesti. Löydät bitit kaikille merkeille HD44780U LCD-ohjaimen datalehdestä .
Nyt, koska olemme tyytyväisiä otsikkotiedostoon, rakennetaan piiri ja testataan ohjelmaa. Tarkista myös täydellinen otsikkotiedosto, joka on annettu yllä olevassa linkissä.
Piirikaavio ja testaus:
Alla on piirikaavio Interfacing 16x2 LCD -laitteelle PIC-mikrokontrollerilla.
En ole osoittanut virtalähdettä tai ICSP-yhteyttä yllä olevassa piirissä, koska käytämme samaa korttia, jota käytimme edellisessä opetusohjelmassa, tarkista tästä.
Yksi tärkeä asia, joka on huomioitava ohjelmassa, on LCD-näytön määritelmät:
#define RS RD2 #define EN RD3 #define D4 RD4 #define D5 RD5 #define D6 RD6 #define D7 RD7
Näitä pin-määrityksiä voidaan muuttaa ohjelmoijien laitteistoasetusten mukaan. Muista vaihtaa kunnioitettu porttikokoonpano päätoiminnossa, jos muutat tätä.
Tämän projektin laitteisto on hyvin yksinkertainen. Aiomme käyttää uudelleen samaa PIC-moduulia, jota käytimme viime kerralla, ja yhdistää LCD-moduulin PIC-laitteeseemme hyppyjohtimilla.
Yhteys voidaan ymmärtää seuraavasta taulukosta:
LCD-nastanumero |
LCD-nastan nimi |
MCU-nastanimi |
MCU-nastanumero |
1 |
Maa |
Maa |
12 |
2 |
VCC |
+ 5 V |
11 |
3 |
VEE |
Maa |
12 |
4 |
Rekisteröidy Valitse |
RD2 |
21 |
5 |
Lukea kirjoittaa |
Maa |
12 |
6 |
ota käyttöön |
RD3 |
22 |
7 |
Databitti 0 |
NC |
- |
8 |
Databitti 1 |
NC |
- |
9 |
Databitti 2 |
NC |
- |
10 |
Databitti 3 |
NC |
- |
11 |
Databitti 4 |
RD4 |
27 |
12 |
Databitti 5 |
RD5 |
28 |
13 |
Databitti 6 |
RD6 |
29 |
14 |
Databitti 7 |
RD7 |
30 |
15 |
LED positiivinen |
+ 5 V |
11 |
16 |
LED negatiivinen |
Maa |
12 |
Tehkäämme nyt yksinkertaisesti yhteydet, pudota koodi MCU: lle ja tarkista lähtö.
Jos sinulla on ongelmia tai epäilyksiä, käytä kommenttiosaa. Tarkista myös alla oleva esittelyvideo.