Koble til LSD 1602. Tilkobling og arbeid med WH1602-skjermen. LCD-tilkoblingskrets til Arduino Board uten I2C

LCD-skjermer fra Winstar har vært en integrert del av moderne elektroniske produkter i flere år, og ikke bare i det russiske markedet. De er billige, svært vanlige (ikke sett butikker, hvor de ikke ville være), deres mangfold gir utvikleren å velge en egnet avhengig av operasjonelle forhold. Deres forskjell er i områder av driftstemperaturer, antall rader for å vise informasjon, mengden bekjent i strengen, standarden som er verdier på 8, 12, 16, 20, 24 og 40 tegn per linje, også avvike i størrelsen på symbolet, dens oppløsning, størrelser viser seg etc. Winstar produserer ikke bare alfanumeriske tegn på LCD-modulene, men også grafisk. De har i sin tur også forskjellige parametere, som gir brukeren muligheten til å velge riktig basert på oppgaven.

Mange nybegynnere radio amatører som nettopp har begynt å mestre digitale teknikker, mikrokontroller, før eller senere bli utsatt for et problem som er knyttet til å koble til og kontrollere denne skjermen. Litt forenkling av situasjonen med datasettet på WH1602B-skjermen, prøvde jeg å beskrive prosessen med å koble til og kontrollere modulen så lett som mulig for å forstå.

Standard WH1602B-skjermen ser slik ut:

16 utgangslinjer, hvorav 11 - styrelinjer er plassert på rad i et trinn på 2,54 mm, noe som gjør at utvikleren direkte slipper sløyfen eller legger kontakten, og tar sløyfen til kontrollkortet, avhengig av utformingen av sluttinnretningen.

Ikke sjeldne er skjermen med sidestedet til kontaktene.

Avhengig av utformingen av radio elektronisk enhet, kan utvikleren bruke noen form for konklusjoner - forskjeller mellom programvare absolutt ikke.
Modulene kan fylles ut med baklyset baklyset, og typen av bakgrunnsbelysningskilde fra forskjellige moduler er annerledes. Noen skjermer bruker elektroluminescent-belysningen, som gir en jevn fordeling av gløden gjennom den viste overflaten på skjermen. Den største ulempen ved displayet med en slik bakgrunnsbelysning er kanskje en ting: En variabel strøm av høy spenning er nødvendig for å drive denne skjermen. LED-baklys ulemper er praktisk talt nei, modulene som bruker LED-bakgrunnsbelysning kan brukes i applikasjoner som arbeider med brede temperaturområder. Produsenten gir et bredt utvalg i forhold til fargen på bakgrunnsbelysningen - siden LED-matrisene kan installeres nesten hvilken som helst farge.

En viktig ulempe med WH1602B-skjermer er forbrukstrøm, så det er helt ulønnsomt å bruke denne typen skjermer i autonome oppringingsenheter.

WH-linjens skjermer er bygget på grunnlag av den spesialiserte HD44780 LCD-modulkontrollen, som bare ble utviklet for å kontrollere Sign-Sensing LCD-panelene.

Med en liten beskrivelse, kanskje er det verdt å fullføre, og fortsett til den praktiske delen. Nummerering av konklusjoner, hvis du ser på den fra oven (dvs., når vi ser på det når vi leser informasjon), går den fra den mest ekstreme venstre utgangen. Dette er 1.

Tilkobling 1602:

pickup 1602.:
1) GND - Felles ledning
2) VCC - Supply Spenage + 5V
3) v0 - Kontrast
4) RS - Register Selection Line
5) RW - Data Sendingslinje (les eller skriv)
6) E - Synkroniseringslinje
7) DB0 - 14) DB7 - Databuss linjer
15) A - Bakgrunnsbelysning anode (plugg her + 5V via motstand 100)
16) K - Bakgrunnsbelysningen (Koble til den overordnede ledningen)

Displayet kan fungere i 2 moduser: I modusen for 8-bits dataoverføring når dataene overføres av grupper på 8 biter (det sikres topphastighet Interaksjon med displayet), og i 4-biters overføringsmodus, når 8-bits data er delt inn i to grupper med fire sifre og overføres i rekkefølge i fire eldre DB4-DB7-datalinjer.

For å begynne å jobbe med skjermen, må den initialiseres. Initialiseringsprosessen er en sekvensiell overføring av HD44780-kontrolleren av visse data. Etter deres deteksjon vil det være forberedt på å motta data som skal vises på skjermen.

Vi vil vurdere initialiseringsprosessen til WH1602B-skjermen i 8-biters modus ved hjelp av kontrollkortet basert på ATRIBLINE ATTRIBUTE2313 mikrokontroller.

Så, hvilke handlinger må utføres for pålitelig initialiseringsprosessen:
1) Slå på strømdisplayene
2) tåle pause 20ms
3) For å gi kommandoen 00110000 med Rs \u003d 0 RW \u003d 0
4) tåle en pause på minst 40μs
5) Med forbehold om kommandoen 00110000 med Rs \u003d 0 RW \u003d 0
6) motstå en pause på minst 40μs
7) Med forbehold om kommandoen 00110000 med Rs \u003d 0 RW \u003d 0
8) tåle en pause på minst 40μs
9) Med forbehold om kommandoen 00111000 med Rs \u003d 0 RW \u003d 0
10) motstand pause på minst 40μs
11) Med forbehold om kommandoen 00001000 med Rs \u003d 0 RW \u003d 0
12) tåle en pause på minst 40μs
13) Med forbehold om kommandoen 00000001 med Rs \u003d 0 RW \u003d 0
14) For å motstå en pause på minst 1,5 ms
15) Send kommandoen 00000110 med Rs \u003d 0 RW \u003d 0.

Jeg vil forklare: Rs - som nevnt ovenfor - Registeret til registret (0 - Registeret til kommandoene der vi registrerer skjermkommandoene, et strengskift, sett markøren osv.; 1 - Det interne minnet er adressert der byte og vises på skjermen).

RW - Data Selection Retningslinje (0 - Opptak for å vise, 1 - Les data fra displayet).
Etter utstedelse av data til DB0-DB7-datalinjen og innstillingsverdiene på RS, RW-linjene, er det nødvendig å låse disse dataene - for dette må du installere linjen E i 1, og tilbakestill deretter igjen til originalen posisjon - i 0.

Koble PD0-mikrokontrolleren til RS LCD-linjen, PD1-utgangen til mikrokontrolleren til henholdsvis RW-skjermen, men PD2 - henholdsvis til linjen E på displayet, og DB0-DB7-databuslinjen til de tilsvarende linjene i mikrokontrollerporten . Koble til displayet selv i henhold til kretsen øverst.

Nå handler det om programdelen:

Inkludere "tn2313def.inc"; Attinine2313, 1 MHz Clock .CSEG .ORG 0 RJMP RESET; ************************************** *******************************; Standardovergang til den initialiserte delen av tilbakestillingsprogrammet: LDI R16, lav (Ramend) ; Initialisering av stakken MK OUT SPL, R16 RCALL LCD_INIT; Vis initialisering; Her initialiserte vi stabelen med mikrokontrolleren og byttet til initialiseringen av LCD-modulen; *************************************** **** ********************************* LCD_INIT: LDI R16, 0B10000000; Tilbakestill alle stramningsmotstandene ut MCUCR, R16 LDI R16, 0B11111111; Sette opp port b ut DDRB, R16 LDI R16, 0B00000111; Angi porten D ut DDRD, R16; Tilpass I / O-portlinjer: Tilbakestille pull-up motstander og bestemme; PB0-PB7, PD0-PD2 som datautgangslinjer; ************** *** ************************************************ *** *; Basert på ovennevnte initialiseringsprosedyre, utfør operasjoner: LDI R16, 0B00000000; Adressering IR LDI R17, 0B0015000; Installere datalinjen RCALL DELAINT_20000MKS BIT; Pause før du initialiserer LCD RCALL WRITE_LCD; Dataopptak i LCD RCALL DELAY_40MKS; Forsinkelse før du utfører operasjoner med LCD RCALL WRITE_LCD; Dataopptak i LCD RCALL DELAY_40MKS; Forsinkelse før du utfører operasjoner med LCD RCALL WRITE_LCD; Dataopptak i LCD RCALL DELAY_40MKS; Forsinkelse før du utfører operasjoner med LCD LDI R17, 0B00111000; Sette LCD-parametrene på LCD RCALL_LCD; Dataopptak i LCD RCALL DELAY_40MKS; Forsinkelse før du utfører operasjoner med LCD LDI R17, 0B00001000; Slå av RCALL WRITE_LCD-skjermen; Dataopptak i LCD RCALL DELAY_40MKS; Forsinkelse før du utfører operasjoner med LCD LDI R17, 0B00000001; Clearing RCALL WRITE_LCD DISPLAY; Dataopptak i LCD RCALL DELAY_1500MKS; Forsinkelse før du utfører operasjoner med LCD LDI R17, 0B00000110; Angi RCALL WRITE_LCD DATA ENTRY MODE; Dataopptak i LCD RCALL DELAY_40MKS; Forsinkelse før du utfører operasjoner med LCD RET; Exit subrutine; ********************************************** * ********************* DELAY_20000MKS: LDI R18, 0B10110010; Angi variabel forsinkelse LDI R19, 0B00000101; Sette opp RJMP init_delay Delay_1500mks: LDI R18, 0B11111010; Angi variabel forsinkelse LDI R19, 0B00000101; Justering av RJMP init_delay Delay_40mks: LDI R18, 0B11011000; Angi variabel forsinkelse LDI R19, 0B00000010; Stille inn init_delay: Out TCNT0, R18 Initialisering TCNT0 ut TCCR0B, R19; Start t0 test_tifr: i R18, TIFR; Lesing TIFR SBRS R18, 1; Overgang hvis "overløp t0" rjmp test_tifr; Uendelig sjekker tov0 LDI R20, 0b00000000; Stopp T0 OUT TCCR0B, R20 LDI R20, 0B00000010; Laster TOV0 \u003e\u003e 0 ut TIFR, R21 RET; Exit subrutine; ********************************************** * ********************* WRITE_LCD: Out Portd, R16; Sette RS ut portb, R17 linje verdi; DB0-DB7 Nop Data Byte-utgang; Beskyttelse mot støy på SBI portd, 2 gating linje; E \u003e\u003e 1 nop; Beskyttelse mot støy på linjen i linjen i CBI Portd, 2; E \u003e\u003e 0 nop; Beskyttelse mot støy på RET GATING LINE; Exit subrutine; ********************************************** * ********************* user_write_ir: LDI R16, 0B00000000; Adressering ir rcall write_lcd; Dataopptak i LCD RCALL DELAY_40MKS; Forsinkelse før du utfører operasjoner med LCD RET; Exit subrutine; ********************************************** * ********************* user_write_dr: LDI R16, 0B00000001; Adressering drcall write_lcd; Dataopptak i LCD RCALL DELAY_40MKS; Forsinkelse før du utfører operasjoner med LCD RET; Exit subrutine; ********************************************** * ********************* LCD_CLEAR: LDI R16, 0B00000000; Adressering IR LDI R17, 0B00000001; Clearing RCALL WRITE_LCD DISPLAY; Dataopptak i LCD RCALL DELAY_1500MKS; Forsinkelse før du utfører operasjoner med LCD RET; Exit subrutine; ********************************************** * *********************

Slik bruker du denne koden. For å nyte symbolet må du skrive en byte på skjermen, som tilsvarer koden til dette symbolet, i R17-registeret. I Register 17 kom vi inn 0x1 - hvis vi vil skrive et symbol på skjermen, eller kassere i 0x0 hvis vi vil ta opp noen kommando til LCD-skjermkommandoregisteret.

Jeg ga underrutiner som brukeren anrop:
user_write_ir - Opptak av kommandoen til LCD-kommandoregisteret;
user_write_dr - Dataopptak for å vise på LCD;
LCD_CLEAR - SUBROUTINE / COMMAND Hvis anrop er å rengjøre skjermen.

Hvordan jobbe med en samtale til Subroutines:

LDI R17, 0x24; Symbol med 0x24 rcall user_write_dr; Opptak av symbolet på displayet LDI R17, 0x2; Team 0x2 rcall user_write_ir; Vi skriver i registret.

Jeg merker at når du bruker LCD_Clear Subroutine, er forhåndsinngangen i R17 ikke nødvendig.
Hvor skal du skrive koden din? Her:

Tilbakestill: LDI R16, lav (ramend); Initialisering av stakken MK OUT SPL, R16 RCALL LCD_INIT; Vis initialisering; koden din! For eksempel: LDI R17, 0xC; Slå på LDI-bildet R17, 0x24; Symbol med 0x24 rcall user_write_dr; Skriv symbol for å vise

Jeg vil legge til at nylig data har datamoduler med et sekvensielt omformerbrett, slik at du kan koble LCD-skjermen 1602 til et 4-kittet diagram og operere i henhold til I 2 C-grensesnitt. Så Litt forenkler tilkoblingen og lagrer kontrolleren konklusjonene. Modulen kan kjøpes separat og kobles til den allerede eksisterende LCD-skjermen 1602.

Last ned kilder og firmware du kan under

I leksjonen, la oss snakke om signalyntetiske flytende krystallindikatorer, om å koble dem til Arduino-styret og kontrollindikatorene ved hjelp av Liquidcrystal Biblioteker og Liquidcrystalrus.

LED syv indikatorer, selv om det er det billigste visningsalternativet for elektroniske enheterMen deres bruk er begrenset til to betydelige ulemper.

  • Det er praktisk talt vanskelig å koble til mikrokontrolleren mer enn 8 siffer i LED-indikatorene. Et stort antall konklusjoner kreves, signifikante indikatorstrømmer, komplekse nøkler, lav frekvens Regenerering, etc.
  • Kan ikke vise symbolsk informasjon på syv indikatorer.

For å vise tekstinformasjon eller tall, er mer enn 4 utslipp mye mer praktisk å bruke flytende k(skjermer). Disse fordelene skal tilskrives:

  • praktisk å koble til mikrokontroller grensesnitt;
  • liten strømforbruk;
  • lav forsyningsspenning;
  • varighet.

Det finnes et stort antall varierte likvide krystall (LCD) indikatorer på forskjellige produsenter på markedet. Nesten alle av dem er like i parametere, grensesnittsignaler, kontrollkommandoer. For øyeblikket er de vanligste LCD-indikatorene på det russiske markedet produsert av Winstar, Taiwan. Jeg vil referere til indikatorene på dette selskapet. Men informasjonen gjelder også for symbolske LCD-skjermer av andre produsenter.

Generell.

Sign-synthesizing eller symbolske indikatorer viser informasjon som en bekjent av en bestemt bit. En bekjent viser ett tegn. Antall bekjentskap bestemmer utslipp av indikatoren. Informasjon om indikatorer kan vises på flere linjer, slik at antall tegn i strengen og antall rader alltid indikerer for indikatorer på denne typen.

Visningen av informasjon oppstår på en flytende krystallmatrise med LED-bakgrunnsbelysning. Baklyset er av en rekke farger som betydelig gjenoppliver monokrome tekstinformasjon.

For å kontrollere væskekrystallmatrisen og organisasjonen av indikatorgrensesnittet, brukes den innebygde HD44780-kontrolleren eller dens komplette kolleger. Denne kontrolleren bestemmer indikatorgrensesnittet Signals og kontrollkommandoer.

HD44780 har blitt en de facto standard for symbolsk flytende krystall (LCD) skjermer. Teknisk dokumentasjon for HD44780-kontrolleren i PDF-format kan vises på denne lenken. Kanskje noen vil like dokumentasjonen til en av analogene i denne kontrolleren - SPLC780D. Link i PDF-format -.

Winstar Symbolske LCD-indikatorer.

Jeg vet følgende alternativer for LCD-indikatorer på dette selskapet.

Type indikator Visformat, symboler X strenger Gabaritter, mm. Dimensjoner av det synlige området, mm Link til dokumentasjon, PDF-format
WH0802A1. 8 x 2. 58 x 32. 38 x 16.
Wh1202a. 12 x 2. 55,7 x 32. 46 x 14.5.
Wh1601a. 16 x 1. 80 x 36. 66 x 16.
Wh1601b. 16 x 1. 85 x 28. 66 x 16.
WH1601L. 16 x 1. 122 x 33. 99 x 13.
Wh1602a. 16 x 2. 84 x 44. 66 x 16.
Wh1602b. 16 x 2. 80 x 36. 66 x 16.
Wh1602c. 16 x 2. 80 x 36. 66 x 16.
Wh1602d. 16 x 2. 85 x 30. 66 x 16.
Wh1602j. 16 x 2. 80 x 36. 66 x 16.
Wh1602l1. 16 x 2. 122 x 44. 99 x 24.
Wh1602m. 16 x 2. 85 x 32,6. 66 x 16.
Wh1602o. 16 x 2. 85 x 25.2. 66 x 16.
Wh1602p. 16 x 2. 85 x 25.2. 66 x 16.
Wh1602s. 16 x 2. 59 x 29.3. 52 x 15.
Wh1602t. 16 x 2. 65,4 x 28,2. 54,8 x 19.
Wh1602w. 16 x 2. 80 x 36. 66 x 16.
Wh1602v2. 16 x 2. 66,7 x 23,3. 61 x 15.9.
Wh1604a. 16 x 4. 87 x 60. 62 x 26.
Wh1604b. 16 x 4. 70,6 x 60. 60 x 32,6.
Wh2002a. 20 x 2. 116 x 37. 85 x 18.6.
WH2002D. 20 x 2. 89 x 21.5. 75 x 15.
WH2002L. 20 x 2. 180 x 40. 149 x 23.
Wh2002m. 20 x 2. 146 x 43. 123 x 23.
WH2004A. 20 x 4. 98 x 60. 77 x 25.2.
Wh2004b. 20 x 4. 98 x 60. 77 x 25.2.
Wh2004d. 20 x 4. 77 x 47. 60 x 22.
Wh2004g. 20 x 4. 87 x 58. 74,4 x 24,8.
Wh2004h. 20 x 4. 87 x 58. 74,4 x 24,8.
WH2004L. 20 x 4. 146 x 62.5. 123,5 x 43.
WH2402A. 24 x 2. 118 x 36. 94,5 x 16.
WH4002A. 40 x 2. 182 x 33.5. 154,4 x 16,5.
WH4004A. 40 x 4. 190 x 54. 147 x 29.5.

Koble LCD-indikatoren til mikrokontrolleren.

Tilkoblingsordninger, midlertidige diagrammer, signalinnstillinger, kontrollkommandoer, tegnkoder er beskrevet i detalj i dokumentasjonen for HD44780-kontrolleren. Jeg vil bare gi de mest nødvendige dataene om tilkobling av indikatorer til mikrokontroller.

Som regel har LCD-indikatorene 16 konklusjoner.

Utgangsnummer Signal Jeg - Inngang O - Avslutt Tildele et signal
1 Vss. - Jord (delt wire)
2 Vdd. - Mat + 5 v
3 Vo. - Vis kontrastadministrasjon. Inngangen for tilkobling av gjennomsnittlig utgang fra spenningsdeleren + 5 V. Du kan bruke en slagmotstand med en motstand på 10-20 com.
4 Rs. JEG. Registreringsvalg: 0 - Kommando Register; 1 - Data Register. Lav signalnivå betyr at en kommando er dannet på databussen, høy level - På bussen dekk.
5 R / w. JEG. Dataoverføringsretning:

0 - Opptak;

1 - Lesing.

I mange applikasjoner blir ikke lesfunksjonen brukt, slik at signalet ofte er koblet til bakken.

6 E. JEG. Strobe dekkoperasjoner (på en negativ front).
7 DB0. I / O. De yngre biter med åtte bit regime. Med fire bits grensesnitt brukes ikke.
8 DB1. I / O.
9 DB2. I / O.
10 DB3. I / O.
11 DB4. I / O. Eldre biter med åtte bit modus eller databiter av fire bits grensesnitt.
12 DB5. I / O.
13 DB6. I / O.
14 DB7. I / O.
15 EN. - Anode Power Backlight (+).
16 K. - Katode av bakgrunnsbelysningen (-). Nåværende må være begrenset.

Output nummer (første kolonne) er gitt for det vanligste alternativet. Bedre sjekk ved å laste ned dokumentasjonen for din type indikator fra tabellen i forrige avsnitt.

Symbolske LCD-skjermer Støtte To MicroController Tilkoblingsalternativer:

  • Bruker 8-bits databuss. Alle DB0-DB7-dekksignaler er tilkoblet. Byteinformasjon overføres i en utvekslingssyklus.
  • Bruker 4-bits databuss. Bare 4 senior DB4-DB7-utslipp er tilkoblet. Informasjon overføres fire biter per buss takt.

Det første alternativet gir dataoverføring til displayet med større hastighet. Den andre er nødvendig for å koble indikatoren for 4 utganger mindre. Utvilsomt er det viktigere å redusere antall konklusjoner for å koble til enn å øke valutakursen. Videre er LCD-indikatorer ganske sakte enheter med en 10-20 ms regenereringssyklus tid.

Koble til en symbolsk LCD (LCD) skjerm til Arduino-brettet.

Jeg vil koble WH2004A-indikatoren (4 linjer på 20 tegn) i fire biters byttemodus til Arduino UNO R3-kortet. LCD-dokumentasjon WH2004-skjermen kan vises på denne linken.

Ordningen ser slik ut.

Motstandene R2 og R3 definerer kontrasten på indikatoren. Du kan koble en trim motstand og sette den nødvendige bildeklarheten. Jeg bruker ofte indikatorene WH2004, og i dine ordninger velger jeg slike motstandsrenter.

LED-belysningsindikator I tilkoblet en strømkilde 5 V gjennom en motstand R1 (30 ohm). Dette spurte jeg en strøm på ca 25 mA. Kjedelig, men lyser. Mørket viser godt. Selv om WH2004-indikatorene tillater en bakgrunnsbelysningsstrøm opptil 580 mA.

LCD-kontrollbiblioteksindikatorer i Arduino-systemet Liquidcrystal.

Det er et standardbibliotek for å kontrollere LCD-indikatorene basert på HD44780-kontrolleren. Jeg vil beskrive sine metoder i detalj.

LiquidCristal (...)

Klasse designer. Kan ha et annet antall argumenter.

  • LiquidCristal (RS, EN, D4, D5, D6, D7) - Fire-bits grensesnitt, RW-signal brukes ikke (koblet til jorden).
  • LiquidCristal (RS, RW, EN, D4, D5, D6, D7) - Fire bits grensesnitt, RW-signal brukes.
  • LiquidCristal (RS, EN, D0, D1, D2, D3, D4, D5, D6, D7) - Åtte bits grensesnitt, RW-signal brukes ikke (koblet til jorden).
  • Liquidcristal (RS, RW, EN, D0, D1, D2, D3, D4, D5, D6, D7) - Åtte bits grensesnitt, RW-signal brukes.

Argumenter:

  • rs - rs utgang nummer;
  • rW - RW signalutgangsnummer;
  • eN - Signalutgangsnummer E;
  • d0, D1, D2, D3, D4, D5, D6, D7 - DATA BUS PIN-nummer.

Liquidcrystal Disp (6, 7, 2, 3, 4, 5);

void begynner (Cols, rader)

Initialiserer indikatorgrensesnittet. Angir dimensjonen av indikatoren. Metoden må først kalles for å bruke andre funksjoner i klassen.

Argumenter:

  • cols - antall tegn i strengen;
  • rader - antall linjer.

disp.begin (20, 4); // bruk skjermen - 4 linjer med 20 tegn

ugyldig klart ()

Rengjøre skjermen, installer markøren til øvre venstre hjørne.

disp.clear (); // Displays

ugyldig hjem ()

Installere markøren til øvre venstre hjørne.

disp.home (); // Tilbake til starten på skjermen

void setcursor (col, rad)

Setter markøren til den angitte posisjonen.

  • col - x koordinat, nummerering fra 0;
  • row - Y-koordinat, nummerering fra 0.

setcursor (0,1); // markør til begynnelsen av den andre linjen

byte skrive (data)

Viser et symbol på skjermen. Returnerer antallet bestått byte.

Neste stave viser data fra seriell port. Data kan overføres av Arduino IDE-skjermen.

// konklusjon av serielle portdata på LCD-indikatoren
#Inkludere.


char data;

void Setup ()
{
Serial.Begin (9600); // initialiser sekvensiell port
disp.begin (20, 4); //
}

void loop ()
{
hvis (seriell.available ()) (// hvis det er data
Data \u003d seriell.read (); // Les symbolet
Hvis ((data! \u003d 0xD) && (data! \u003d 0xa)) (// radoverføring
Disp.write (data); // vis et symbol på skjermen
}
}
}

Jeg har en stor indikator - 4 linjer med 20 tegn. Den har to HD44780-kontroller installert. Derfor fylles konsekvent overførte tegn først den første linjen, deretter den tredje, deretter den andre og fjerde. De. Gjennom en streng. Det er nødvendig å ta hensyn til denne egenskapen for visse typer indikatorer. I dokumentasjonen for hver LCD, indikerer indikatoren av adressering av tegn.

byte utskrift (data)

Viser teksttekst. Returnerer antallet bestått byte.

Funksjonen har ulike former Ring for forskjellige formater og datatyper.

skriv ut (char d) Hvis tegntype-argumentet viser symbolkoden

char d \u003d 83;
disp.print (d); // Viser S-symbolet
disp.print ('s'); // Viser S-symbolet

skriv ut (int d) Hvis argumentet er en hel type, viser deretter en streng med en desimal representasjon av tallet

int d \u003d 83;
disp.print (d); // viser strengen "83"
disp.print (83); // viser strengen "83"

skriv ut (Float) Ekte typer vises av ASCII-symboler, to desimalskilt

float d \u003d 7,65432;
disp.print (d); // viser strengen "7,65"
disp.print (7.65432); // Viser strengen “7.65”

skriv ut (* str) Hvis argumentet er pekeren til strengen, vises tekststrengen.

karbokstaver \u003d (65, 66, 67);
disp.print ("bokstaver"); // viser bokstavstrengen
disp.print (bokstaver); // viser en streng med 3 tegn med koder 65, 66, 67

skriv ut (Int D, DEC) Viser ASCII-strengen - en desimalrepresentasjon av tallet

int d \u003d 83;
disp.print (D, DEC); // konklusjon av strengen "83"

skriv ut (Int D, Hex) Viser ASCII-strengen - en heksadesimal representasjon av tallet

int d \u003d 83;
disp.print (d, hex); // konklusjon av strengen "53"

skriv ut (int d, oktober) Viser ASCII-strengen - OCTAL-representasjonen av nummeret

int d \u003d 83;
disp.print (d, okt); // konklusjon av strengen "123"

skriv ut (int d, bin) Viser ASCII-strengen - binær representasjon av tallet

int d \u003d 83;
disp.print (d, bin); // konklusjon av strengen "01010011"

skriv ut (float d, n) For ekte tall setter parameteren n antall tall etter kommaet.

disp.print (7.65432, 0); // viser strengen "7"
disp.print (7.65432, 2); // viser strengen "7,65"
disp.print (7.65432, 4); // viser strengen "7.6543"

Et eksempel på et programutskrift på skjermtekststrengen.

// tekststrengutgang på LCD-indikator
#Inkludere.

Liquidcrystal Disp (6, 7, 2, 3, 4, 5); // Lag et objekt

void Setup ()
{
disp.begin (20, 4); // initialiser Display 4 linjer for 20 tegn
disp.print ("teststreng");
}

void loop ()
{ }

void cursor ()

Inkluderer markørvisningsmodus. Posisjon der følgende tegn vil bli vist, legges vekt på.

disp.cursor (); // tillat kartleggingen av markøren

void nocursor ()

Forbyder visning av markøren.

disp.nocursor (); // forbyr kartleggingen av markøren

void blink ()

Inkluderer blinkende markørmodus. Brukes i forbindelse med markøren () -funksjonen. Resultatet avhenger av den spesifikke indikatormodellen.

disp.blink (); // tillat blinkende markøren

ugyldig noblink ()

Deaktiverer blinkende markørmodus.

disp.noblink (); // forby blinkende markøren

void Display ()

Inkluderer skjermen etter at den er slått av funksjonen Nodisplay (). Skjermen viser informasjonen som ble slått av.

disp.display (); // slå på skjermen

ugyldig noodisplay ()

Slår av skjermen. Informasjonen lagres i minnet og vises når skjermen er slått på.

disp.nodisplay (); // slå av skjermen

void scrolldisplayleft ()

Ruller innholdet på skjermen på ett symbol til venstre.

dISP. scrolldisplayleft (); // vi skifter alt igjen

void scrolldisplayright ()

Ruller innholdet på skjermen til ett tegn til høyre.

dISP. Scrolldisplayright (); // weching alt til høyre

void autoscroll ()

Aktiver automatisk rulle tekst. Når du viser hvert tegn, vil all tekst på skjermen bevege seg på ett tegn. I hvilken retning er informasjonen skiftet, definere funksjonene til lefttoright () og RightToLeft ().

dISP. Autoscroll () (); // slå på den automatiske kontrakten

void noautoscroll ()

Slå av automatisk rullingstekst.

dISP. noautoscroll () (); // forby auto-kontrakt

void lefttoright ()

Angir testmodus fra venstre til høyre. Nye tegn vil vises til høyre for de forrige.

venstre til høyre (); // modus fra venstre til høyre

void RightToLeft ()

Angir testmodus for testen til venstre. Nye tegn vil vises til venstre for de forrige.

høyre til venstre (); // høyre til venstre modus

void createchar (num, data)

Metode for å lage et brukersymbol. Kontrolleren lar deg lage opptil 8 tegn (0 ... 7) 5x8 piksler. Bildet av symbolet er satt av en array dimensjon på 8 byte. 5 yngre biter av hver byte bestemmer statusen til pikselstrengen.

For å vise et brukerkarakter, kan du bruke funksjonen Skriv () med tegnnummeret.

// opprette et egendefinert symbol
#Inkludere.

Liquidcrystal Disp (6, 7, 2, 3, 4, 5); // Lag et objekt

byte smil \u003d (
B00000000,
B00010001,
B00000000,
B00000000,
B00010001,
B00001110,
B00000000,
B00000000.
};

void Setup ()
{
Disp.createchar (0, smil); // Lag et symbol
disp.begin (20, 4); // initialiser Display 4 linjer for 20 tegn
disp.print ("smil");
Disp.write (byte (0)); // Vis symbol
}

void loop ()
{ }

Her er et eksempel på et program som viser det russiske alfabetet.

// tilbaketrekking av det russiske alfabetet
#Inkludere.

Liquidcrystalrus Disp (6, 7, 2, 3, 4, 5); // lage et objekt

void Setup ()
{
disp.begin (20, 4); // initialiser Display 4 linjer for 20 tegn
disp.print ("abvgdezhziylmnoprst");
disp.print ("abvgdezhziylmnoprst");
Disp.print ("ufhazchchsyyuyuya");
Disp.print ("ufhazchshcheyuya");
}

void loop ()
{ }

Arduino Nano ankom, Keith kom, hvor LaySet (Bradbord) og LCD-skjermen. Skjermen på brettet er skrevet - 1602A, under - Qapass. Begynte å bære den første enheten, og selvfølgelig ønsket jeg å vise informasjon på displayet, og ikke blinke lysdiodene.

Google hjalp, fortalte at dette er en symbolsk skjerm; Hvis du ikke forvrenger, er mest sannsynlig ASCII-tegn tilgjengelige - tall, Latice, noe fra de grunnleggende tegnene.

Følgende materialer ble bidratt til å starte skjermen: kjører en tegntype LCD fra en PC-skriverport; Hvordan koble Arduino med en tegn LCD; PWM Servo Driver Motor Control PDF.

Skjermen er ganske vanlig, og for ham allerede kalt Shinds - det er alternativer med SPI som, og / eller fra I2C, og Internett er full av oppskrifter for disse tilfellene. Men jeg hadde bare den opprinnelige skjermen på 16x2 og Arduinka, som jeg ønsket å feste den på.

Displayet har modusen for drift og dataoverføring av glitter, 4 bits, og de yngre dekkutslippene blir ikke brukt. Koble til bare halvparten av databussen er mye der den er beskrevet, og jeg forsto ikke hvordan du koblet til skjermen og fungerer med den til 8 linjer. Jeg var fullt ordnet at den fungerer så.

En god beskrivelse av displayene av denne typen jeg fant her - http://greathard.ucoz.com/44780_rus.pdf. Og her (http://arduino.ru/forum/programmirovanie/lcd-i2c-partizanitocomment-40748) er et eksempel på en set-generatorinnstilling.

Forbindelse

Skjermen min ble levert med uløste kontakter. Fra begynnelsen ønsket jeg å lodde toget, kuttet 16 ledninger med DuPont, rengjort. Og så fløy jeg i Kita, og fant en ridge av dupper for lodding på et gebyr. Derfra og brøt 16 kontakter og loddet dem.
Ser ut (før loddet av kontaktene) skjermen min er noe som dette:

Først tilkoblet kontakt 15 (A) til + 5V, 16 (k) til bakken, og sørget for at bakgrunnsbelysningen fungerer. Generelt er katoden riktig forbundet med bakken gjennom motstanden 220, som jeg senere gjorde.

Så koblet jeg jorden (1) og strømmen (2). Arduino kan mate fra USB, fra den stabiliserte spenningen på 5V og fra den ikke-stabiliserte 6-12V, den største spenningen blir automatisk valgt. Nå blir Arduinka spist fra USB, og jeg trodde hvor 5 volt trekker der ute. Det viste seg at 5V er på kontakt med arduiner, hvor den eksterne stabiliserte 5V er tilkoblet. Snarere viste det seg å være 4,7V, men jeg hadde nok.

Etter å ha koblet strømmen, hvis alt er greit, lyser den øverste raden med faste rektangler bekjentskap.

Koble deretter kontrastpotensiometeret (Pin 3 V0). En av de ekstreme konklusjonene av potensiometeret kastet på bakken, den andre - på + 5V, midten - på tappen 3 på displayet. Potentiometer 10K anbefales. Jeg hadde 50k fra hval, først brukte jeg det. Justeringen var bare på en kant, det var ganske subtilt regnelt for ønsket kontrast. Deretter fant i en annen drage en lignende på 5k, og satte den. Innstillingen strukket fra en kant til halvparten av svinget. Tilsynelatende er det mulig å ta et potensiometer enda mindre. 10k anbefales sannsynligvis at den mindre kretsenkrevende. Ja, jeg måtte drikke litt, loddet til konklusjonene av potensiometre av ledninger med DuPonts.

Test skikket

Testskisse Vi tar i eksemplene fra Arduino Studios - "C: \\ Programfiler (X86) \\ Arduino \\ Biblioteker \\ LiquidCrystal \\ Ex amples \\ HelloLorld \\ HellowOrld.ino", bare du trenger å endre kontakter til vår - Liquidcrystal LCD (7 , 6, 5, 4, 3, 2);

I prinsippet er det en beskrivelse i denne skissen, som er der du skal koble til. Du kan koble til, som det er angitt, så trenger ingenting å bli endret.

// Inkluder bibliotekskoden: #include // initialiser bibliotekspinnene til tallene til grensesnittspinnene Liquidcrystal LCD (7, 6, 5, 4, 3, 2, 2); Void Setup () (// Sett opp LCD-skjermen på antall kolonner og rader: LCD.BEGIN (16, 2); // Skriv ut en melding til LCD-skjermen. LCD.Print ("Hei, World!");) Void loop () (// Still markøren til kolonne 0, linje 1 // (MERK: Linje 1 er den andre raden, siden teller begynner med 0): LCD.SetCursor (0, 1); // Skriv ut antall Sekunder siden tilbakestill: LCD.Print (Millis () / 1000);)

Det viser seg noe som dette:

Forresten, skjermen som kom inn i hendene mine virker ikke uten bakgrunnsbelysning. I den forstand fungerer det, men praktisk talt kan ingenting bli sett.

Vis kontakter 1602A.

# ta kontakt med Navn Slik kobler du til
1 Vss. Gnd.
2 Vdd. + 5V.
3 V0. Kontrast - På den gjennomsnittlige produksjonen av potensiometeret
4 Rs (register velg) D7 Arduino.
5 R / w (les eller skriv) Gnd.
6 E (Aktiver signal) D6 Arduino.
7-14 D0-D7. D0-D3 - ikke tilkoblet; D4-D7 - Koblet til kontakter D5-D2 Arduino
15 EN. Anode av bakgrunnsbelysning, kobles til + 5V
16 K. Katoden til bakgrunnsbelysningen, kobles til bakken gjennom motstanden 220

Hver radio amatør etter et visst antall enkle hjemmelaget kommer til målet om å konstruere noe ambisiøst med bruk av sensorer og knapper. Tross alt er det mye mer interessant å vise data på skjermen, i stedet for på portmonitoren. Men da oppstår spørsmålet: Hvilken skjerm å velge? Og generelt, hvordan du kobler den til, hva som trengs for å koble til? Svar på disse spørsmålene vil bli diskutert i denne artikkelen.

LCD 1602.

Blant settene med alternativer blant skjermene, vil jeg gjerne merke LCD1602-skjermen basert på HD4478-kontrolleren. Det er denne skjermen i to farger: hvite bokstaver på blå bakgrunn, svarte bokstaver på en gul bakgrunn. LCD-1602-tilkoblingen til Arduino vil heller ikke forårsake noen problemer, da det er et innebygd bibliotek, og du trenger ikke noe i tillegg. Viser varierer ikke bare på pris, men også størrelsen. Uavhengige radioamatører brukte 16 x 2, det vil si 2 linjer på 16 tegn. Men det er også 20 x 4, hvor 4 linjer med 20 tegn. Størrelser og farge Ikke spill noen rolle i å koble skjermbildet LCD 1602 til Arduno, de er tilkoblet likt. Synvinkelen er 35 grader, responstiden på displayet er 250 ms. Det kan fungere ved temperaturer fra -20 til 70 grader Celsius. Når du arbeider, bruker 4 MA på skjermen og bakgrunnsbelysning 120 mA.

Hvor brukes?

Denne skjermen har sin egen popularitet ikke bare i radioamatører, men også i store produsenter. For eksempel bruker skrivere, kaffemaskiner også LCD1602. Dette skyldes sin lave pris, det er verdt denne skjermen på de kinesiske stedene i 200-300 rubler. Det er verdt å kjøpe der, siden i våre butikker merker på denne skjermen veldig høy.

Koble til Arduino.

Koble LCD 1602 til Arduino Nano og Uno er ikke annerledes. Du kan jobbe med skjermen i to moduser: 4 biter og 8. Når du arbeider med 8-bit, brukes yngre og eldre biter, og med 4-bit bare yngre. Det er ingen spesiell følelse å jobbe med en 8-biters følelse, da den er lagt til for å koble til en annen 4 kontakter, som ikke er tilrådelig, fordi det ikke vil være hastighet over, vises displayet på skjermoppdateringene 10 ganger per sekund. Generelt, for å koble LCD 1602 til Arduino, bruker mange ledninger, som gir visse ulemper, men det er spesielle skjold, men om det senere. Bildet viser visningen av Arduino Uno:

Eksempelprogramkode:

#Inkludere. // Legg til det nødvendige biblioteket Liquidcrystal LCD (7, 6, 5, 4, 3, 2); // (RS, E, DB4, DB5, DB6, DB7) Void Setup () (LCD.BEGIN (16, 2); // Sett dimensjonen til LCD.SetCursor-skjermen (0, 0); // Sett Markør til topp 1 LCD.Print Strings ("Hei, World!"); // Vis tekst LCD.SetCursor (0, 1); // Sett markøren til begynnelsen av 2 LCD.Print Strings ("Site"); // Fortell tekst) Void Loop () ()

Hva gjør koden? Det første er koblet til et bibliotek for å jobbe med skjermen. Som nevnt ovenfor er dette biblioteket allerede en del av Arduino IDE og i tillegg nedlasting og installasjon er det ikke nødvendig. Følgende er kontaktene som er koblet til konklusjonene: RS, E, DB4, henholdsvis DB5, DB6, DB7. Etter det er dimensjonen på skjermen satt. Siden vi jobber med en versjon, hvor 16 tegn og 2 linjer, så skriver vi slike verdier. Vi etablerer markøren til begynnelsen av den første linjen og viser vår første tekst Hello World. Deretter setter vi markøren på den andre linjen og viser nettstednavnet. Det er alt! LCD-skjermen 1602 tilkobling til Arduino Uno ble vurdert.

Hva er i2c og hvorfor er det nødvendig?

Som nevnt ovenfor tar displayet på displayet mange kontakter. Når du for eksempel jobber med flere sensorer og LCD-skjermen, kan 1602 kontakter ganske enkelt ikke være nok. Ofte brukes radio Amateries av Uno eller Nano-versjoner, hvor det ikke er så mange kontakter. Da kom folk opp med spesielle skjold. For eksempel I2C. Det lar deg koble skjermen på bare 4 kontakter. Dette er to ganger mindre. I2C-modulen er til salgs separat, hvor den selv må lodde og allerede loddes til LCD-skjermen 1602.

Tilkobling ved hjelp av I2C-modulen

LCD 1602 Tilkobling til Arduino Nano med I2C tar opp lite plass, bare 4 kontakter: jord, måltider og 2 utganger for dataoverføring. Kraft og land Kobler vi til 5V og GND på henholdsvis Arduino. De resterende to kontaktene: SCL og SDA kobles til en hvilken som helst analog PIN-kode. Du kan se et eksempel på å koble LCD 1602 til Arduino med I2C-modulen:

Programkode

Hvis du trenger bare å bruke ett bibliotek til å fungere med displayet uten en modul, trenger du to biblioteker for å jobbe med modulen. En av dem har allerede en Arduino IDE - Wire. Annet bibliotek, Liquidcrystal I2C, du må laste ned separat og installere. For å installere biblioteket i Arduino må innholdet i det nedlastede arkivet lastes ned til rotmappebibliotekene. Eksempelprogramkode ved hjelp av I2C:

#Inkludere. #Inkludere. Likviditetscrystal_i2c LCD (0x27,16,2); // Still inn voidoppsettet (LCD.INIT (); LCD.bbebrudd (); // Slå på LCD-skjermen (// installere markøren på den andre strengen og null symbolet. LCD.SetCursor (0, 1); // Vis antall sekunder fra øyeblikket for å lansere Arduins LCD.Print (Millis () / 1000);)

Som du kan se, er koden nesten ikke annerledes.

Hvordan legge til ditt eget symbol?

Problemet med disse skjermene er at det ikke er noen støtte for kyrillisk og symboler. For eksempel trenger du noe tegn å laste inn i displayet slik at det kan gjenspeile det. For denne skjermen kan du lage opptil 7 av tegnene dine. Tenk deg et bord:

0 0 0 1 0
0 0 0 0 1
1 1 0 0 1
0 0 0 0 1
1 1 0 0 1
0 0 0 0 1
0 0 0 1 0
0 0 0 0 0

Hvis 0 - det ikke er noe der, hvis 1 er et malt område. I eksemplet ovenfor kan du se opprettelsen av et smilende smilsymbol. På eksempelet på programmet i Arduino vil det se slik ut:

#Inkludere. #Inkludere. // hund det nødvendige biblioteket // bit maske smile tegn byte smil \u003d (b00010, b00001, b11001, b00001, b11001, b00001, b00010,); Liquidcrystal LCD (7, 6, 5, 4, 3, 2); // (RS, E, DB4, DB5, DB6, DB7) Void Setup () (LCD.BEGIN (16, 2); // Still inn dimensjonen til LCD.CreateChar-skjermen (1, SMILE); // Opprett a tegn på nummer 1 LCD.SetCursor (0, 0); // Sett markøren til begynnelsen av 1 LCD.Print String ("\\ 1"); // Vis uttrykksikoner (Symbol på nummer 1) - "\\ 1") Void loop () ()

Som du kan se, ble det opprettet litt maske det samme som bordet. Etter at du har opprettet den, kan du sende ut som en variabel i displayet. Husk at bare 7 tegn kan lagres i minnet. I prinsippet skjer dette nok. For eksempel, hvis du trenger å vise graden symbolet.

Problemer der displayet kanskje ikke virker

Det er slike tilfeller når skjermen ikke virker. For eksempel slår den på, men viser ikke tegn. Eller slår ikke på i det hele tatt. Først, se om du koblet kontaktene riktig. Hvis du brukte LCD-skjermen 1202 tilkobling til Arduino uten I2C, er det veldig enkelt å bli forvirret i ledningene, noe som kan forårsake feil visning av displayet. Du bør også sørge for at skjermkontrasten økes, siden det med minimal kontrast, er det ikke engang synlig, om LCD-1602 er aktivert eller ikke. Hvis det ikke hjelper noe, kan problemet kanskje løfte i kontaktlodingen, det er når du bruker I2C-modulen. En hyppig grunn til hvilken skjermen kanskje ikke fungerer, er feil I2C-adresser. Faktum er at det er mange produsenter, og de kan sette en annen adresse, du må rette opp her:

Likviditetscrystal_i2c LCD (0x27,16,2);

I parentes kan du se to verdier, 0x27 og 16.2 (16, 2 - er størrelsen på skjermen, og 0x27 bare den samme adressen I2C). I stedet for disse verdiene kan du prøve å sette 0x37 eller 0x3f. Vel, en annen grunn er bare defekt LCD 1602. Gitt at nesten alt for Arduino er produsert i Kina, er det umulig å være 100% sikker på at det kjøpte produktet ikke er et ekteskap.

Fordeler og ulemper LCD 1602

Vurder proffene og ulemperens display LCD 1602.

  • Pris. Denne modulen kan kjøpes til en svært demokratisk pris i kinesiske butikker. Prisen er 200-300 rubler. Noen ganger solgt selv med I2C-modulen.
  • Lett å koble til. Sannsynligvis ingen kobler nå LCD 1602 uten I2C. Og med denne modulen tar forbindelsen bare 4 kontakter, ingen "pawite" fra ledningene vil ikke være.
  • Programmering. Takket være de ferdige bibliotekene er det enkelt å jobbe med denne modulen, alle funksjoner er allerede stavet ut. Og om nødvendig, legg til din karakter brukt bare et par minutter.
  • Under bruk av tusenvis av radioamatører ble det ikke identifisert noen store minuser, bare det er tilfeller av å kjøpe ekteskap, da de kinesiske skjermene hovedsakelig brukes.

Denne artikkelen diskuterte forbindelsen 1602 til Arduino, og eksempler på programmer for å jobbe med denne skjermen ble presentert. Han er virkelig i sin kategori en av de beste, ikke bare så du velger tusenvis av radioamatører for sine prosjekter!

Hva er en integrert del stort nummer elektroniske enheter? Selvfølgelig, midler for indikasjon og grafisk utgang av data. Brukeren er alltid mer praktisk og mer behagelig når resultatet av det smarte boksen kan ses visuelt. Derfor vil vi i dag koble skjermen til STM32 for å sende tekst og tall. Heltet i våre eksperimenter vil være ganske populær visning fra Winstar. Forresten, en viktig avklaring dukket opp i kommentarene som teknikken i prinsippet er i prinsippet det samme for alle skjermer basert på HD44780.Takk Jekakey for et viktig tillegg)

For å starte skjermen må du faktisk koble til kontrolleren. Last ned datasettet og leter etter WH1602 Pinout. Se:

Som du vet, vis WH1602. Den har 16 konklusjoner. Vurder hver individuelt ...

Pins vss, vdd og k trenger å koble til bakken og til strømmen, det er, akkurat som angitt i tabellen, her uten overraskelser og til og med ingenting å diskutere)

Utgangsnummeret 3 tjener til å justere kontrasten - hvis vi gir + 5V, vil vi ikke se absolutt ingenting, og hvis du forkorter produksjonen til bakken, vil vi beundre de to radene med svarte firkanter 😉 naturlig, det passer ikke til oss , så du må henge et potensiometer der (motstand med variabel motstand) for å justere kontrasten. Den beste synligheten til tegnene er utstyrt med en spenning på 0,5-0,7 i denne skjermutgangen.

Pin Rs er den konklusjonen at vi selv vil klare seg ved hjelp av en mikrokontroller. Lavspenningsnivået (0) på denne utgangen betyr at kommandoen vil bli fulgt, høyt nivå (1) - det betyr at det nå vil være data for opptak i displayet.

Pin r / w - her er det klart, eller vi leser dataene (visning av visningen på skjermen, for eksempel), i dette tilfellet, på denne utgangen 1, eller skriv kommandoen / dataene i displayet, så her har 0.

DB7 - DB0 - Databuss, og det sier alt)

Pin E er det såkalte aktiveresignalet. Jeg trenger det for hva. For å jobbe med displayet - skriv data eller send en kommando - vi må utstede en positiv drivkraft til denne produksjonen. Det vil si at prosedyren vil se slik ut:

  1. På Pins Rs, R / W, DB7 - DB0 - de ønskede signalene som svarer til vårt team.
  2. Påfør enheten til utgangen E.
  3. Zhdems (på databladet - minst 150 ns)
  4. Sende til utgangen E Lavt nivå (0).

A / Vee er nødvendig for å stable 4,2 i for å drive bakgrunnsbelysningen.

Det er slik kommunikasjon med displayet wh1602 forekommer.

Med forbindelsen til WH1602 funnet ut, men før du bytter til for eksempel, bør du vurdere hvilke kommandoer som vanligvis forstår skjermen vår. For å gjøre dette klatrer vi seg inn i et datablad og finner et interessant bord:

Den beskriver alle kommandoer og signaler som skal være på riktige WH1602 konklusjoner for hver bestemt kommando. Her vil vi for eksempel rengjøre skjermen, se på bordet, og her er det ønsket lag! Klar skjerm!

Vi søker på konklusjonene Rs, R / W, DB7, DB6, DB5, DB4, DB3, DB2, DB1, DB3, DB2, DB1, og bunnen av DB0 er en. Ferdig! Hva er neste? Det er sant, en på pin e, så forventer vi litt tid og omgir igjen i null. Alt, skjermen er bare slettet 😉 før du kjører neste kommando, må du tåle pause som er angitt i datasettet for hver kommando. En mer effektiv vil være en ansettelsesflaggundersøkelse, så snart han falt på 0 - du kan jobbe videre. For å lese dette flagget, er det også et spesielt lag, så alt er klart med det) gå på ...

Og faktisk, alt med teori, kan du allerede prøve å skrive noe. Jeg lagde et lite bibliotek for å lette arbeidet med skjermen, nå la oss se hvordan det kan brukes. Å begynne å laste ned

Vi får til disposisjon 2 filer, mt_wh1602.c og mt_wh1602.h. Vi rive den andre, her må vi velge konklusjonene og kontrolleren som brukes.

Skjermen min, forresten, er koblet som dette:

RS - PC2.
R / W - PB10
E - PB14.
DB7 - PD2.
DB6 - PC12.
DB5 - PA8.
DB4 - PA10.
DB3 - PA15.
DB2 - PD11.
DB1 - PA3.
DB0 - PA5.

Åpne filen mt_wh1602.h:

#Define plattform (STM32F10X)

Deretter velger du konklusjonene av mikrokontrolleren som skjermen er tilkoblet. Bare først som porter er involvert. Her, med min forbindelse, bruker jeg GPIAA, GPIOB, GPIOC og GPIOD, vi skriver:

På samme måte, for andre ben av en mikrokontroller.

Med innstillingen er vi ferdig, fortsett) for å ringe kommandoene som vises i begynnelsen av artikkelen i MT_WH1602.c-filen inneholder følgende funksjoner (de kalles av navnene på lagene, slik at jeg tror alt er klart) :

Void mt_wh1602_cleardisplay (tomrom); Void mt_wh1602_returnhome (tomrom); Void mt_wh1602_entrymodeset (bool idaddress, bool skift); Void mt_wh1602_displayonoff (bool dit, bool cbit, bool bbit); Void mt_wh1602_cursorordisplayShift (bool scbit, bool rlbit); Void mt_wh1602_funksjonssett (bool dlbit, bool nbit, bool fbit); void mt_wh1602_setcgramaddress (uint8_t adresse); void mt_wh1602_setDdramaddress (uint8_t adresse); Bool mt_wh1602_redbusy (tomrom); Void mt_wh1602_writhata (uint8_t data);

For noen kommandoer må vi passere i parametrene, for eksempel:

Void mt_wh1602_displayonoff (bool dit, bool cbit, bool bbit);

Vi ser på lagbordet:

Vi ser at kommandoen på skjermen på / av ikke bare inneholder / deaktiver skjermen, men aktiverer også / deaktiverer markøren og blinker markøren. I dataene er disse kommandosbitene angitt som D, C og B, så overfører vi dem som parametere til funksjonen. Hvis vi må slå på skjermen og markøren, men deaktiver markøren blinker, ring kommandoen som følger:

Mt_wh1602_displayonoff (1, 1, 0);

Generelt er alt enkelt 😉

Kort sagt, skaper nytt prosjekt, Legg til et bibliotek for å jobbe med WH1602-skjermen, opprett en tom .c-fil og begynn å fylle den med koden:

// Koble biblioteksfilen #Include "mt_wh1602.h" /*******************************************************************/ Int Main (Void) ( // Ring initialiseringsfunksjonen, uten dette ingensteds \u003d)() ; // Nå må du lage en innledende skjermkonfigurasjon. // Dokumentasjon og Internett anbefales å gjøre det;) Mt_wh1602_functionset (1, 0, 0); Mt_wh1602_delay (1000); Mt_wh1602_functionset (1, 0, 0); Mt_wh1602_delay (1000); Mt_wh1602_functionset (1, 0, 0); Mt_wh1602_delay (1000); Mt_wh1602_functionset (1, 1, 1); Mt_wh1602_delay (1000); Mt_wh1602_displayonoff (1, 0, 0); Mt_wh1602_delay (1000); Mt_wh1602_cleardisplay (); Mt_wh1602_delay (2000); // jeg her forsinkelsesverdiene for eksemplet tok den første kommet til tankene) // Generelt må du sjekke skjermflagget // la oss nå ta med noe til skjermen, for eksempel navnet på nettstedet vårt Mt_wh1602_writhata (0x6d); Mt_wh1602_delay (100); Mt_wh1602_writhata (0x69); Mt_wh1602_delay (100); Mt_wh1602_writhata (0x63); Mt_wh1602_delay (100); Mt_wh1602_writhata (0x72); Mt_wh1602_delay (100); Mt_wh1602_writhata (0x6f); Mt_wh1602_delay (100); Mt_wh1602_writhata (0x74); Mt_wh1602_delay (100); Mt_wh1602_writhata (0x65); Mt_wh1602_delay (100); Mt_wh1602_writhata (0x63); Mt_wh1602_delay (100); Mt_wh1602_writhata (0x68); Mt_wh1602_delay (100); Mt_wh1602_writhata (0x6e); Mt_wh1602_delay (100); Mt_wh1602_writhata (0x69); Mt_wh1602_delay (100); Mt_wh1602_writhata (0x63); Mt_wh1602_delay (100); Mt_wh1602_writhata (0x73); Mt_wh1602_delay (100); Mt_wh1602_writhata (0x2e); Mt_wh1602_delay (100); Mt_wh1602_writhata (0x72); Mt_wh1602_delay (100); Mt_wh1602_writhata (0x75); Mt_wh1602_delay (100); Mens (1) (__nop ();)) /*******************************************************************/

Klar, sjekk)


Som du kan se, fungerer alt riktig)

Forresten, jeg savnet på en eller annen måte spørsmålet om hva du skal skrive i displayet for å utlede ett eller et annet symbol. Her er et tegn på datablad:

Så, for å finne ut hvilken verdi som skal skrives i displayet på skjermen, må du ta tall som er skrevet fra ovenfor for et bestemt symbol i denne tabellen. For eksempel, karakteren "A". Vi ser - dette symbolet tilsvarer kolonnen 0100 (0x4) og rad 0001 (0x1). Det viser seg at for å vise "A" -symbolet må du skrive en verdi på 0x41 i displayet.

Nå ser alt ut til å være alt \u003d) Vi skjønte med forbindelsen og driften av skjermen WH1602, slik at før snart!

P.S. Når du arbeider med biblioteket, testet ikke funksjonen for å lese ansettelsesflagget, så hvis noe plutselig vil fungere ikke etter behov, skriv, vil vi forstå)