Ovládajte LCD displej pomocou funkcií CodeVisionAVR. STM32 a LCD. Pri práci s grafickým displejom si myslím, že niečo chýba

Lekcia 12

5. časť

LCD indikátor 16×2

Dnes budeme pokračovať v štúdiu LCD indikátor znakov, ktorý dokáže vypísať určité znaky v dvoch riadkoch po 16 znakoch.

V minulej časti sme dokončili a skontrolovali písanie kódu pre funkciu, ktorá zobrazuje ľubovoľný znak na displeji.

Teraz je čas napísať funkciu na zobrazenie celého riadku na obrazovke, pretože jej výstup znak po znaku nie je úplne pohodlný. Pridajme túto funkciu priamo pred funkciu main() a odovzdáme jej pole znakov neurčitej veľkosti

//—————————————-

neplatnéstr_lcd( charstr1)

{

}

//—————————————-

Zavolajme túto funkciu v main(), keď sme najprv odstránili všetok zobrazovaný kód po znakoch

LCD_ini(); //Inicializácia displeja

setpos(0,0);

str_lcd( "Ahoj Svet!");

Ďalej začneme písať telo funkcie výstupu reťazca. Deklarujme premennú pre symbol v tele funkcie. Naša premenná bude trochu iného typu. Pri tomto type sa spravidla lepšie rozpoznávajú kódy znakov. Samozrejme môžete experimentovať aj s inými typmi

neplatnéstr_lcd( charstr1)

wchar_tn;

Ďalej podľa toho usporiadame slučku a budeme striedavo iterovať všetky prenášané znaky v poli a zobrazovať ich na displeji. Využijeme aj možnosť reprezentácie nulového znaku "n" a až do tohto bodu budeme triediť postavy

Wchar_tn;

pre( n=0; str1[ n]!=""; n++)

sendchar( str1[ n]);

Poďme zhromaždiť kód a skontrolovať fungovanie kódu v Proteus

Teraz môžete skúsiť zobraziť riadok na inom mieste na obrazovke. Napíšme kód do main()

str_lcd( "Ahoj Svet!");

setpos(2,1);

str_lcd( "reťazec 2");

zatiaľ čo(1)

Zozbierajme kód a uvidíme výsledok

Všetko funguje! Skvelé!

No, samozrejme, ešte musíme vidieť, ako bude kód fungovať na živom displeji so živým ovládačom. Za týmto účelom flashneme ovládač

Funkcie formulujeme do samostatného modulu

S kódom sme sa dostali do takého stavu, že náš hlavný a jediný súbor s kódom sa natoľko zaplnil, že je teraz ťažké v ňom vôbec niečo nájsť. Ako s tým môžeme bojovať? Budeme proti tomu bojovať tak, že kód funkcie pre jedno zariadenie alebo zbernicu alebo nejakú technológiu naformátujeme do samostatného modulu. Kompetentný modul zvyčajne pozostáva zo súboru hlavičky a súboru implementácie funkcie. Urobme to teda pre náš LCD displej. Toto celé je potrebné aj preto, že ak píšeme nový projekt, tak tieto súbory k nemu jednoducho pripojíme, ak budeme potrebovať LCD displej. Toto bude naša takzvaná zobrazovacia knižnica. Samozrejme, knižnice sú zvyčajne napísané a zostavené do samostatného súboru lib, ale v tomto prípade zvyčajne neexistuje zdrojový kód a údaje knižnice sa nedajú upravovať. A naša knižnica bude úplne opraviteľná a bude nám v budúcnosti veľmi užitočná.

Pred vytvorením tejto knižnice však vytvoríme hlavný hlavičkový súbor a nazveme ho main.h, aby sme do tohto súboru vložili všetky zahrnuté knižnice, rôzne globálne premenné a substitúcie makier.

Ak to chcete urobiť, kliknite pravým tlačidlom myši na náš projekt v strome projektu Test09 a vyberte podponuku v kontextovej ponuke Pridať, a v ňom už položku vyberieme Nová vec

A v dialógovom okne, ktoré sa otvorí, vyberte typ súboru, ktorý vytvoríme, " Zahrnúť súbor" A v spodnej časti názvu súboru zmeníme IncFile1 na Hlavná, potom stlačte tlačidlo Pridať.

Podľa toho vytvoríme súbor main.c s nasledujúcim obsahom

#ifndefMAIN_H_

#definovaťMAIN_H_

#koniec Ak/* MAIN_H_ */

Toto je veľmi dobré. Napríklad. V Keile, keď programujeme ovládače STM, musíme to všetko napísať ručne. Tu táto smernica hovorí, že ak už bol súbor zahrnutý do spustiteľného kódu, tak ho preprocesor znova nezahrnie.

Do tohto súboru umiestnime pripojenia všetkých hlavičkových súborov knižnice a všetkých makro substitúcií a v súbore Test09.c toto všetko samozrejme vymažeme

#ifndefMAIN_H_

#definovaťMAIN_H_

#definovaťF_CPU8 000 000 UL

#include

#include

#include

#include

#include

//—————————————-

#definovaťe1PORTD|=0b00001000// nastavte riadok E na 1

#definovaťe0PORTD&=0b11110111// nastavíme riadok E na 0

#definovaťrs1PORTD|=0b00000100// nastaviť riadok RS na 1 (údaje)

#definovaťrs0PORTD&=0b11111011// nastaviť riadok RS na 0 (príkaz)

//—————————————-

#koniec Ak/* MAIN_H_ */

Nestačí však zahrnúť tento hlavičkový súbor do Prieskumníka riešení, musíme ho tiež zahrnúť do súboru Test09.c zahrnúť do kódu hneď na začiatku

#include"main.h"

//—————————————-

Poďme zostaviť projekt a znova skontrolovať jeho funkčnosť.

Teraz začnime vytvárať našu knižnicu displejov.

Za týmto účelom vytvoríme hlavičkový súbor rovnakým spôsobom ako main.h lcd.h

#include

#include"lcd.h"

A naopak do súboru lcd.h zahrnieme súbor hlavná.h

#ifndefLCD_H_

#definovaťLCD_H_

#include"main.h"

Netreba sa obávať možnosti nejakého krížového zacyklenia – smernice tomu zabránia.

Taktiež prevezmeme všetky náhrady makier zo súboru main.h do súboru lcd,h a vymažeme ich v main.h

#include"main.h"

//—————————————-

neplatnéLCD_ini( neplatné);

neplatnésetpos( nepodpísanécharX, nepodpísanér);

neplatnéstr_lcd( charstr1);

neplatnésendchar( nepodpísanécharc);

//—————————————-

A aby sme prebrali všetky funkcie pre prácu s displejom zo súboru Test09.c, vytvoríme si teraz ďalší súbor - lcd.c. Bude obsahovať kód na implementáciu všetkých funkcií

Súbor je vytvorený presne rovnakým spôsobom, len namiesto „Include File“ vyberieme typ súboru „C File“.

Súbor lcd.c bol vytvorený. Už v nej nebudú žiadne smernice, bude len komentár autora, ktorý zmažeme, aby nezasahoval.

Do tohto súboru zahrnieme aj hlavičkový súbor lcd.h

#include"lcd.h"

//—————————————-

Teraz do tohto súboru prenesieme kompletne všetky funkcie určené na prácu s displejom zo súboru Test09.c. Zostanú v ňom iba dve funkcie - port_ini A Hlavná().

Preto vážne uvoľníme hlavný súbor aplikácie, čím sa stane čitateľnejším.

To nám však nestačí. V súbore Test09.c teraz nebude „viditeľná“ žiadna funkcia. Preto musíme deklarovať funkcie, ktoré budeme používať v iných súboroch, alebo, ako sa hovorí, vytvárať na nich prototypy. Zvyčajne sa to robí v hlavičkovom súbore. Preto vytvoríme prototypy v hlavičkovom súbore lcd.h. Výroba prototypu je veľmi jednoduchá. Hlavička funkcie so všetkými argumentmi (všetko okrem tela) sa zapíše alebo zvyčajne skopíruje a na koniec sa umiestni bodkočiarka. Budeme potrebovať funkcie na inicializáciu displeja, umiestnenie na displeji a zobrazenie riadku na displeji. Zatiaľ nebudeme vypisovať symboly samostatne, takže nevytvárame prototyp pre zodpovedajúcu funkciu. Tu sú naše prototypy

#include"main.h"

//—————————————-

neplatnéLCD_ini( neplatné);

neplatnésetpos( nepodpísanécharX, nepodpísanér);

neplatnéstr_lcd( charstr1);

//—————————————-

#definovaťe1PORTD|=0b00001000// nastavte riadok E na 1

Teraz zhromaždíme súbor, spustíme ho v Proteuse a skontrolujeme jeho funkčnosť. Overme si to aj v praxi. Ak všetko funguje, urobili sme všetko správne. Projekt na celú lekciu je priložený nižšie a je dostupný cez odkaz „Zdrojový kód“.

V dnešnej lekcii sme sa teda veľa naučili. Naučili sme sa pracovať so znakovým displejom a pripojiť ho k AVR ovládaču. V rámci tejto lekcie sme sa tiež naučili, ako správne písať kód a používať modulárne programovanie.

Zobrazenia príspevku: 11 438

Používateľ často potrebuje získať nejaké vizuálne informácie z elektronického zariadenia. Ak je možné informácie prezentovať v symbolickej forme, potom jednou z možností na ich zobrazenie je použitie symbolických indikátorov tekutých kryštálov (LCD, alebo v cudzom označení LCD). Dnes si povieme niečo o symbolických ukazovateľoch realizovaných na báze regulátorov Hitachi HD44780, Samsung KS 0066 a podobne.

Ako príklad uvediem LCD Winstar Wh1602D-TMI-CT#, ktoré mám k dispozícii na vykonávanie experimentov. O tomto LCD som sa už zmienil v článku, ktorého grafické rozvinutie dnes použijem.

Podrobné dátový hárok Komu LCD WINSTAR WH1602D-TMI-CT:

Kategória: Dokumenty
Dátum: 22.03.2015

Zjednodušený obvod LCD možno znázorniť takto:

Základom indikátora je matrica z tekutých kryštálov, ktorej privedením napätia na prvok môžeme pozorovať bod na obrazovke. V znakových LCD sa táto matica skladá z určitého počtu známych miest, ktoré sú zoskupené do riadkov a stĺpcov. Veľkosť známeho miesta v pixeloch je často 5x8 pixelov. Označenie môjho indikátora obsahuje čísla 1602 a to znamená, že môj indikátor môže zobraziť 2 riadky po 16 znakoch. Kódovanie tiež zahŕňa: kód výrobcu a typ indikátora, prítomnosť podsvietenia, farbu, tabuľku kódov atď.

Systém označovania indikátorov WINSTAR

Zobraziť/skryť legendu

1. Kód výrobcu: WINSTAR DISPLAY CO,LTD

2. Typ indikátora:

  • H- symbolický (syntetizujúci znaky)
  • C- grafická farba s pasívnou matricou CSTN (FarbaSTN)
  • X- grafika s matricou TAB (Automatické lepenie pásky– kryštál je namontovaný na trojvrstvovej polyamidovej podkladovej páske)
  • O- grafika s matricou COG (Čip na skle- krištáľ na skle)

3. Horizontálne rozlíšenie:

  • počet znakov na riadok pre indikátory typu znakov
  • počet vodorovných bodov pre indikátory grafického typu

4. Vertikálne rozlíšenie:

  • počet riadkov pre indikátory typu postavy
  • počet zvislých bodov pre indikátory grafického typu

5. Kód modelu

  • Kóduje geometrické rozmery používané ovládačom

6. Typ podsvietenia:

  • N- bez podsvietenia
  • B- elektroluminiscenčné, farba žiary - modrá
  • D- elektroluminiscenčné, farba žiary - zelená
  • W- elektroluminiscenčná, farba žiary - biela
  • Y— LED, farba žiary — žltozelená
  • A— LED, farba žiary — jantárová
  • R— LED, farba žiary — červená
  • G— LED, farba žiary — zelená
  • T— LED, farba žiary — biela
  • P- LED, farba žiary - modrá
  • F— lampa so studenou katódou (CCFL), farba svetla — biela

7. Technológia výroby LCD

  • B- TN sivá, kladná
  • N— TN, zápor
  • G- STN sivá, klad
  • Y— STN žltozelená, kladná
  • M— STN modrá, negatív
  • F— FSTN pozitívny
  • T- FSTN negatívny
  • H- HTN sivá, pozitívna
  • ja— HTN čierna, negatív
  • TN (Twisted Nematic - Kryštálová štruktúra má špirálový typ
  • STN (Super Twisted Nematic) - matrica pozostávajúca z LCD prvkov s premenlivou priehľadnosťou
  • FSTN (Filmom kompenzované STN) — STN-matica s filmovou kompenzáciou. Táto technológia umožňuje väčší pozorovací uhol
  • HTN (Homeotropic Twisted Nematic) - displeje sú založené na silnejšom molekulárnom skrútení (typicky 110°) v porovnaní s konvenčnými TN skrútenými nematicami (90°). Poskytuje široký pozorovací uhol a vylepšený kontrast. Charakteristiky sú lepšie ako technológia STN. Nízke prevádzkové napätie (2,5 V a najnižšie náklady medzi nematikami robia ich použitie v prenosných samostatných zariadeniach).

8. Polarizátor, pozorovací uhol, rozsah prevádzkových teplôt

  • A— RF, 6:00, N.T.
  • D- RF, 12:00, N.T.
  • G- RF, 6:00, W.T.
  • J— RF, 12:00, W.T.
  • B— TF, 6:00, N.T.
  • E— TF, 12:00, N.T.
  • H— TF, 6:00, W.T.
  • K— TF, 12:00, W.T.
  • C— TM, 6:00, N.T.
  • F— TM, 12:00, N.T.
  • ja— TM, 6:00, W.T.
  • L- TM, 12:00, W.T.
  • RF (Reflexný LCD) - LCD indikátor, ktorý funguje výlučne na odraze svetla. Obraz je viditeľný len pri dostatočnom osvetlení okolia.
  • TF - (Transflexný LCD) - displej z tekutých kryštálov, ktorý svetlo odráža aj vyžaruje (sám žiari).
  • TM (Transmisívne LCD) - svetlo vstupuje cez LCD zo strany podsvietenia. Má vysokú kvalitu obrazu v interiéri a zvyčajne veľmi zlú (čierna obrazovka) na slnečnom svetle.
  • N.T.— normálny teplotný rozsah 0...+50ºC W.T.— rozšírený teplotný rozsah -20...+70ºC

9. Ďalšie možnosti

Prvé dva znaky sú generátor znakov:

  • C.T./C.P.— latinčina/cyrilika
  • E.P./ET/E.E./EN/E.C./ES— latinský/európsky
  • J.P./JT/JS/JN- latinčina/japončina
  • HP/H.S.— hebrejsky

3-4 znaky:

  • T- teplotná kompenzácia
  • E alebo EZ— okraj BL (podsvietenie LED sú umiestnené po obvode). Symbol môže tiež chýbať.
  • K alebo LB— eco BL (LED diódy sú umiestnené rovnomerne za obrazovkou)
  • V- vstavaný zdroj záporného napätia
  • N- bez vstavaného zdroja záporného napätia

10. Ďalšie informácie:

# - kompatibilita so štandardom RoHS

Poznámka(výrobca čipu ovládača):

  • xS - Samsung
  • xP - Sunplus
  • xT - Sitronix
  • xE - Epson
  • xU - UMC

Pomocou tohto notačného systému som zistil, že mám v rukách indikátor syntézy znakov Winstar, zobrazenie znakov v 16 stĺpcoch a 2 riadkoch pomocou ovládača KS 0066 alebo jeho ekvivalent, s bielym LED osvetlením po obvode, s modrým negatívom priepustný- matica, pozorovací uhol „na 6 hodinách“, rozsah prevádzkových teplôt -20...+70ºC s generátorom znakov vrátane azbuky a kompatibilný so štandardom RoHS(neobsahuje žiadne škodlivé zložky, čo zrejme znamená, že pri montáži bola použitá bezolovnatá spájka).

Indikátory založené na ovládačoch HD44780, KS066U

Činnosť indikátora je riadená vstavaným ovládačom. Ovládač je zvyčajne Hitachi HD44780, Samsung KS0066U alebo ich početné analógy a klony. Indikátory vyrábané ruskou spoločnosťou MELT využívajú ovládač PCF8576.

Ovládač má jednobajtové pamäťové bunky ( DDRAM), ktorých obsah sa skutočne zobrazuje na obrazovke podľa tabuľky zaznamenanej v CGRAM. Pamäťových buniek je zvyčajne viac ako symbolov na LCD, takže je potrebné venovať pozornosť adresovaniu symbolov dátový hárok. Musíme napísať kód požadovaného symbolu na požadovanú pozíciu a ovládač sa postará sám.

Na výber pozície slúži virtuálny kurzor ovládaný príkazmi (číslo aktuálnej pamäťovej bunky, AC). Dá sa to zviditeľniť. Štandardne sa pri písaní znaku do bunky kurzor posunie o jednu pozíciu dopredu.

Tabuľka kódov indikátorov sa zvyčajne skladá z troch častí:

  • 0×00-0×07 - generátor postáv na stiahnutie, postavy vytvorené vami
  • 0×20-0xFF - ASCII kódy, štandardná sada znakov a anglická abeceda
  • 0xA0-0xFF - symboly národných abecied a iné, s vynechaním znakov, ktoré sa zhodujú s anglickými.

Zobraziť/skryť tabuľku kódov s azbukou

Príklad: hexadecimálny kód 0x4A sa zhoduje s písmenom J, kód 0xB6 - písm a.

Štyri najvýznamnejšie bity určujú stĺpec zvoleného znaku v tabuľke, najmenej významné bity určujú riadok. Svoju vlastnú tabuľku symbolov si môžete vytvoriť tak, že ju zapíšete CGRAM. Každý znak vyžaduje 5 bajtov (jeden bajt na stĺpec). Jednotky v každom byte definujú významné pixely. Napríklad na kódovanie čísel pixel po pixeli 8 budete potrebovať nasledujúcu postupnosť: 0x6c,0×92,0×92,0×92,0x6c.

Konvertor azbuky

Ak chcete previesť text obsahujúci znaky cyriliky na kódy zodpovedajúce tabuľke vyššie, zadajte požadovaný text do textového poľa. Výsledok získaný nižšie je možné skopírovať a použiť vo vašich programoch na zobrazenie tohto textu na LCD.

Pôvodný text:

Kódovaný text:

Tabuľka príkazových kódov:

D7 D6 D5 D4 D3 D2 D1 D0 Účel
0 0 0 0 0 0 0 1 Čistenie obrazovky, A.C.=0, adresovanie A.C. na DDRAM
0 0 0 0 0 0 1 A.C.=0, adresovanie DDRAM, posuny sú vymazané, začiatok riadku je adresovaný na začiatku DDRAM
0 0 0 0 0 1 I/DSVyberie smer pohybu kurzora alebo obrazovky
0 0 0 0 1 DCBVyberte režim zobrazenia
0 0 0 1 S/CR/LPríkaz posunu kurzora/obrazovky
0 0 1 D.L.NFDefinovanie parametrov skenovania a šírky dátovej zbernice
0 1 AC5AC4AC3AC2AC1AC0Priradenie k pultu A.C. adresy v regióne CGRAM
1 AC6AC5AC4AC3AC2AC1AC0Priradenie k pultu A.C. adresy v regióne DDRAM

Tabuľka hodnôt príznakov:

Vlajka Význam
I/DRežim offsetu počítadla AC adresy, 0 - zníženie, 1 - zvýšenie
SPríznak režimu posunu obsahu obrazovky. 0 - obrazovka nie je posunutá, 1 - po zapísaní ďalšieho kódu do DDRAM sa obrazovka posunie v smere určenom príznakom I/D: 0 - doprava, 1 - doľava. Shift nemení obsah DDRAM. Zmenia sa iba interné ukazovatele na umiestnenie viditeľného začiatku riadku v DDRAM
S/CPríkaz Flag, ktorý spolu s príznakom R/L vykoná operáciu posunu obsahu obrazovky (rovnako ako v predchádzajúcom prípade, bez zmien DDRAM) alebo kurzora. Definuje objekt posunutia: 0 — kurzor je posunutý, 1 — obrazovka je posunutá
R/LPríkaz Flag, ktorý spolu s príznakom S/C vykonáva operáciu posunu obrazovky alebo kurzora. Určuje smer posunu: 0 — doľava, 1 — doprava
D/LPríznak definujúci šírku dátovej zbernice: 0 - 4 bity, 1 - 8 bitov
NRežim skenovania obrazu na LCD: 0 - jeden riadok, 1 - dva riadky
FVeľkosť matice znakov: 0 - 5×8 bodov, 1 - 5×10 bodov
DPrítomnosť obrazu: 0 - vypnuté, 1 - povolené
CKurzor podčiarknutia: 0 - vypnuté, 1 - povolené
BKurzor vo forme blikajúceho známeho miesta: 0 - vypnuté, 1 - zapnuté

Priradenie pinov ovládača:

  • DB0-DB7— zodpovedný za prichádzajúce/odchádzajúce údaje
  • R.S.- vysoká úroveň znamená, že signál na výstupoch DB0-DB7 je dátový, nízka úroveň znamená príkaz
  • W/R— určuje smer dát (čítanie/zápis). Keďže operácia čítania údajov z indikátora je zvyčajne nenárokovaná, môžete tento vstup neustále nastaviť na nízku úroveň
  • E— impulz s trvaním aspoň 500 ms na tomto kolíku určuje signál pre čítanie/zápis údajov z kolíkov DB0-DB7, RS a W/R
  • V 0— používa sa na nastavenie kontrastu obrazu
  • A, K- napájanie podsvietenia (anóda a katóda), ak je k dispozícii
  • V CC A GND- napájanie pre LCD indikátor

Na ovládanie LCD indikátora je potrebných 6 alebo 10 pinov, v závislosti od toho, či je zvolený režim výmeny dát 4 alebo 8 bitov. Ak chcete znížiť požadovaný počet pinov mikrokontroléra, môžete pracovať v 4-bitovom režime. V tomto prípade pri záveroch DB4-DB7 Najprv sa prenesú štyri najvýznamnejšie bity údajov/príkazov a potom štyri najmenej významné. závery DB0-DB3 zostane nevyužitá.

Jeden ovládač ovláda obmedzený počet postáv. Na doske indikátora môže byť 1, 2, 4, 8 ovládačov a možno aj viac.

Dokumentácia k ovládaču:

Ovládač Samsung KS0066U

Ovládač Hitachi HD44780

Kategória: Dokumenty
Dátum: 21.03.2015

verzia preložená do ruštiny:

Kategória: Dokumenty
Dátum: 21.03.2015

Indikátory od rôznych výrobcov sú často kompatibilné a vzájomne zameniteľné, môžu sa však líšiť rozmermi, montážou, kontaktmi atď. Preto sa pri výbere nového vývoja a hľadaní náhrady riaďte katalógmi výrobcov:

Tabuľka kompatibility pre znakové LCD indikátory od rôznych výrobcov:

Zobraziť/skryť tabuľku

Typ Winstar TAVIŤ Dátová vízia Bolymin Slnečný Mikrošpičky Wintek impéria
8×2WH0802AMT-8S2ADV-0802BC0802ASC0802AMTC-0802XWM-C0802MAC082A
10×1MT-10S1
12×2WH1202ABC1202A
16×1WH1601ADV-16100BC1601A1SC1601AMTC-16100XWM-C1601MAC161A
WH1601BBC1601BSC1601B
WH1601LMT-16S1ADV-16100BC1601D1SC1601DMTC-16101XWM-C1601QAC161B
DV-16120AC161J
16×2WH1602LMT-16S2RDV-16210BC1602ESC1602EMTC-16201XWM-C1602QAC162E
SC1602N
WH1602DMT-16S2JDV-16230BC1602B1SC1602BMTC-16202XWM-C1602NAC162A
DV-16235MTC-16203X
WH1602CMT-16S2DDV-16236BC1602DSC1602D
WH1602AMT-16S2HDV-16244BC1602HSC1602CMTC-16204XWM-C1602K
WH1602BDV-16252BC1602ASC1602AMTC-16205BWM-C1602M
WH1602MDV-16257BC1602FSC81602F
DV-16275
DV-16276
16×4WH1604AMT-16S4ADV-16400BC1604A1SC1604AMTC-16400XWM-C1604MAC164A
WH1604B
20×1DV-20100
MT-20S1L
20×2WH2002AMT-20S2ADV-20200BC2002ASC2002AMTC-20200XWM-C2002MAC202A
WH2002M
WH2002LMT-20S2MDV-20210BC2002BSC2002CMTC-20201XWM-C2002PAC202B
DV-20211AC202D
DV-20220
DV-20206-1
20×4WH2004AMT-20S4ADV-20400BC2004ASC2004AMTC-20400XWM-C2004PAC204A
SC2004G
SC2004C
WH2004LDV-20410BC2004BMTC-20401XWM-C2004RAC204B
24×1MT-24S1L
24×2WH2402AMT-24S2ADV-24200BC2402ASC2402AMTC-24200XWM-C2402PAC242A
MT-24S2L
40×2WH4002ADV-40200BC4002ASC4002AMTC-40200XWM-C4002PAC402A
40×4WH4004ADV40400BC4004ASC4004AMTC-40400XWM-C4004MAC404A
SC4004C

Napájanie, nastavenie kontrastu a podsvietenia

Treba dávať pozor na polaritu napájacieho pripojenia k LCD indikátoru a tiež dbať na to, aby napájacie napätie bolo v rozsahu +4,5...5,5 V. Nepozornosť voči týmto bodom môže viesť k poruche indikátora!

LCD indikátory umožňujú nastaviť kontrast pomocou deliča napätia. Pred výstupom údajov do indikátora sa musíte uistiť, že napätie riadenia kontrastu je v prevádzkovom rozsahu. Hodnoty rezistorov sa medzi rôznymi výrobcami LCD indikátorov líšia. Niektoré modely indikátorov majú na doske miesta na inštaláciu takéhoto deliča a stačí tam prispájkovať požadované hodnoty odporu. Kontrast indikátora závisí od uhla pohľadu. Ak je indikátor „na dvanástej hodine“, musíte sa na takýto indikátor pozrieť tak, aby bol pod úrovňou očí, ak „nula hodín“, potom je určený na pozorovanie na úrovni očí ( kolmo na rovinu obrazovky). Ak je indikátor „na šiestej hodine“, mal by sa použiť pri pozorovaní nad úrovňou očí. Tento bod je potrebné vziať do úvahy pri nákupe.

Výkon podsvietenia

Ak má indikátor podsvietenie, kolíky preň sú zvyčajne umiestnené samostatne. Je potrebné ho pripojiť k zdroju napájania nastavením menovitého prúdu pomocou externého odporu R (viď. dátový hárok). Pre môj indikátor by menovité napätie na anóde malo byť 3,5 V a prúd 40 mA. Na základe toho je hodnota odporu obmedzujúceho prúd:

Niektorí výrobcovia majú miesto na doske indikátora na inštaláciu takéhoto odporu, musíte spájkovať príslušnú hodnotu, zatvoriť prepojku a podsvietenie bude napájať z rovnakej linky ako indikátor.

Ako hodnotíte túto publikáciu?

  • Modul FC-113 je založený na čipe PCF8574T, čo je 8-bitový posuvný register - vstupno-výstupný „expandér“ pre sériovú zbernicu I2C. Na obrázku je mikroobvod označený DD1.
  • R1 je trimovací rezistor na nastavenie kontrastu LCD displeja.
  • Jumper J1 slúži na zapnutie podsvietenia displeja.
  • Piny 1…16 sa používajú na pripojenie modulu k pinom LCD displeja.
  • Na zmenu I2C adresy zariadenia sú potrebné kontaktné plôšky A1...A3. Prispájkovaním príslušných prepojok môžete zmeniť adresu zariadenia. Tabuľka ukazuje zhodu adries a prepojok: „0“ zodpovedá prerušenému obvodu, „1“ inštalovanej prepojke. Štandardne sú všetky 3 prepojky otvorené a adresa zariadenia 0x27.

2 Schéma pripojenia LCD displeja k Arduinu cez I2C protokol

Modul je pripojený k Arduinu štandardným spôsobom pre zbernicu I2C: pin SDA modulu je pripojený k analógovému portu A4, pin SCL je pripojený k analógovému portu A5 Arduina. Modul je napájaný +5 V z Arduina. Samotný modul je pripojený pomocou pinov 1…16 k príslušným pinom 1…16 na LCD displeji.


3 Knižnica pre prácu cez I2C protokol

Teraz potrebujeme knižnicu na prácu s LCD cez rozhranie I2C. Môžete použiť napríklad tento (odkaz v riadku „Stiahnuť vzorový kód a knižnicu“).

Stiahnutý archív LiquidCrystal_I2Cv1-1.rar rozbaliť do priečinka \libraries\, ktorý sa nachádza v adresári Arduino IDE.

Knižnica podporuje súbor štandardných funkcií pre LCD obrazovky:

FunkciaÚčel
LiquidCrystal() vytvorí premennú typu LiquidCrystal a akceptuje parametre pripojenia displeja (čísla pinov);
začať() inicializácia LCD displeja, nastavenie parametrov (počet riadkov a znakov);
jasný() vymazanie obrazovky a návrat kurzora do východiskovej polohy;
Domov() vrátiť kurzor do východiskovej polohy;
setCursor() nastavenie kurzora na danú pozíciu;
písať () zobrazí symbol na LCD obrazovke;
tlačiť () zobrazuje text na obrazovke LCD;
kurzor() ukazuje kurzor, t.j. podčiarknutie pod miestom ďalšieho znaku;
noCursor() skryje kurzor;
blikať() kurzor bliká;
noBlink() Zrušiť blikanie;
noDisplay() vypnutie displeja pri ukladaní všetkých zobrazených informácií;
zobraziť() zapnutie displeja pri ukladaní všetkých zobrazených informácií;
scrollDisplayLeft() posuňte obsah displeja o 1 pozíciu doľava;
scrollDisplayRight() posuňte obsah displeja o 1 miesto doprava;
automatické posúvanie() povoliť automatické posúvanie;
noAutoscroll() zakázať automatické posúvanie;
zľava doprava() nastavuje smer textu zľava doprava;
zprava doľava() smer textu sprava doľava;
createChar() vytvorí vlastný znak pre LCD obrazovku.

4 Skica pre textový výstup na LCD obrazovku cez I2C zbernicu

Otvorme si ukážku: Súbor vzoriek LiquidCrystal_I2C CustomChars a trochu to prerobíme. Zobrazíme správu, na konci ktorej bude blikajúci symbol. Komentáre ku kódu komentujú všetky nuansy náčrtu.

#include // zahrnie knižnicu Wire #include // pripojenie knižnice LCD #define printByte(args) write(args); // uint8_t srdce = (0x0,0xa,0x1f,0x1f,0xe,0x4,0x0); // bitová maska ​​symbolu “srdca” LiquidCrystal_I2C lcd(0x27, 16, 2); // Nastavte adresu 0x27 pre LCD displej 16x2 void setup() ( lcd.init(); // inicializácia LCD displeja lcd.backlight(); // zapnutie podsvietenia displeja lcd.createChar(3, srdce); // vytvorenie symbolu „srdca“ v pamäťovej bunke 3 lcd.home(); // umiestnite kurzor do ľavého horného rohu na pozíciu (0,0) lcd.!"); // vytlačí riadok textu lcd.setCursor(0, 1); // presunie kurzor na riadok 2, znak 1 lcd.print( " i ") // vytlačí správu na riadok 2 lcd.printByte(3) // vytlačí symbol „srdca“ umiestnený v 3. bunke lcd.print(" Arduino "); } void loop() (// blikanie posledného znaku lcd.setCursor(13, 1); // presuňte kurzor na riadok 2, znak 1 lcd.print("\t"); oneskorenie(500); lcd.setCursor(13, 1); // presuňte kurzor na riadok 2, znak 1 lcd.print(" "); oneskorenie(500); }

Mimochodom, znaky napísané príkazom lcd.createChar();, zostávajú v pamäti displeja aj po vypnutí napájania, pretože zapísané na zobrazenie ROM 1602.

5 Vytvorte si vlastné symboly pre LCD displej

Poďme sa bližšie pozrieť na problematiku tvorby vlastných symbolov pre LCD obrazovky. Každý znak na obrazovke pozostáva z 35 bodov: 5 širokých a 7 vysokých (+1 rezervný riadok na podčiarknutie). V riadku 6 vyššie uvedeného náčrtu definujeme pole 7 čísel: (0x0, 0xa, 0x1f, 0x1f, 0xe, 0x4, 0x0). Prevedieme hexadecimálne čísla na binárne: {00000, 01010, 11111, 11111, 01110, 00100, 00000} . Tieto čísla nie sú nič iné ako bitové masky pre každý zo 7 riadkov symbolu, kde "0" označuje svetlý bod a "1" tmavý bod. Napríklad symbol srdca špecifikovaný ako bitová maska ​​sa objaví na obrazovke, ako je znázornené na obrázku.

6 Ovládanie LCD obrazovky cez zbernicu I2C

Nahrajme skicu do Arduina. Na obrazovke sa objaví nápis, ktorý sme určili s blikajúcim kurzorom na konci.


7 Čo je za tým I2C zbernica

Ako bonus sa pozrime na časový diagram pre zobrazenie latinských znakov „A“, „B“ a „C“ na LCD displeji. Tieto znaky sú uložené v pamäti ROM displeja a zobrazujú sa na obrazovke jednoduchým prenosom ich adries na displej. Schéma je prevzatá z pinov RS, RW, E, D4, D5, D6 a D7 displeja, t.j. už po prevodníku FC-113 “I2C parallel bus”. Dá sa povedať, že sa ponoríme trochu hlbšie do hardvéru.


Časový diagram výstupu latinských znakov „A“, „B“ a „C“ na LCD displeji 1602

Diagram ukazuje, že znaky, ktoré sú na displeji ROM (pozri str. 11 údajového listu, odkaz nižšie) sa prenášajú v dvoch kúskoch, z ktorých prvý určuje číslo stĺpca tabuľky a druhý - číslo riadku. V tomto prípade sú dáta „zachytené“ na okraji signálu na linke E(Povoliť) a riadok R.S.(Výber registra) je v logickom stave, čo znamená, že sa prenášajú dáta. Nízky stav na linke RS znamená, že sa odosielajú inštrukcie, čo vidíme pred odoslaním každého znaku. V tomto prípade sa prenáša inštrukčný kód pre návrat vozíka do polohy (0, 0) LCD displeja, čo je možné zistiť aj preštudovaním technického popisu displeja.

A ešte jeden príklad. Tento časový diagram zobrazuje výstup symbolu srdca na LCD displeji.


Opäť prvé dva impulzy Povoliť dodržiavať pokyny Domov()(0000 0010 2) - vráťte vozík do polohy (0; 0) a druhé dva - výstup na LCD displej uložený v pamäťovej bunke 3 10 (0000 0011 2) symbol „Srdce“ (pokyn lcd.createChar(3, srdce); skica).

A jeho analógy, napríklad S6A0069, KS0066 atď. Tieto LCD indikátory sú založené na texte a môžu zobrazovať textové a pseudografické symboly. Ich známa veľkosť je 5x8 pixelov, LCD indikátory sa dodávajú v rôznych veľkostiach a s rôznym rozlíšením, napríklad: 8 znakov na 2 riadkoch - 8x2, 16x2, 20x2, 40x2, 16x4, 20x4 atď.

V tejto lekcii sa pozrieme na 4-bitové pripojenie LCD indikátora k mikrokontroléru AVR a na písanie programu v .

Tieto indikátory LCD majú nasledujúce závery:
VSS – Gnd (výkon mínus)
VDD – Vcc (Napájanie 5V)
VO – Nastavenie kontrastu matice LCD
RS – riadiaca linka RS
RW (Read/Write) – riadiaca linka RW
E (Enable) – riadiaca čiara E
Dátová linka D0 – D0 (nepoužíva sa v 4-bitovom režime)
Dátová linka D1 – D1 (nepoužíva sa v 4-bitovom režime)
Dátová linka D2 – D2 (nepoužíva sa v 4-bitovom režime)
Dátová linka D3 – D3 (nepoužíva sa v 4-bitovom režime)
D4 – Dátový riadok D4
D5 – Dátový riadok D5
D6 – Dátový riadok D6
Dátová linka D7 – D7
A – Anóda LED podsvietenia displeja
K – katóda LED podsvietenia displeja

Pozor! Rôzne LCD indikátory majú svoje vlastné umiestnenie pinov, presné umiestnenie pinov nájdete v technickej dokumentácii (Datasheet) pre váš LCD indikátor.

LCD indikačný kolík VO riadi kontrast LCD matice v závislosti od napájacieho napätia privádzaného na tento kolík. Ak nie je potrebné čítať informácie z displeja, pin RW je pripojený k zápornému pólu napájania.

Príklad 4-bitového pripojenia LCD indikátora k mikrokontroléru Attiny2313:

Podreťazcový rezistor RV1 upravuje jas LCD indikátora.
V BASCOM-AVR musíte pred spustením LCD indikátora určiť, ktoré piny displeja sú pripojené ku ktorým portom mikrokontroléra, na to slúži príkaz Config Lcdpin, príklad použitia tohto príkazu: Config Lcdpin = Pin, Db4 = Portb .4, Db5 = Portb.5, Db6 = Portb.6, Db7 = Portb.7, E = Portb.3, Rs = Portb.2 a tiež špecifikujte rozlíšenie LCD indikátora príkazom Config Lcd, príklad: Config Lcd = 16 * 2 a inicializujte LCD indikátor príkazom Initlcd, potom bude LCD indikátor pripravený na použitie.

Tu je zoznam príkazov pre prácu s LCD indikátorom v BASCOM-AVR:
KonfigLcdpin– Nastavenie konfigurácie pinov LCD indikátora a mikrokontroléra
Konfigurácia LCD– Nastavenie rozlíšenia LCD indikátora
Initlcd– Inicializácia LCD indikátora
LCD– Zobrazenie textu na LCD indikátore, príklad: LCD „Ahoj“
Cls– Čistenie LCD indikátora
Nájditey,X– Umiestnite kurzor na pozíciu x, y
Dolná čiara– Presuňte kurzor na spodný riadok
Horná línia– Presuňte kurzor na horný riadok
Shiftlcd Vpravo– Posuňte obraz indikátora LCD o jedno správne miesto
Shiftlcd doľava– Posuňte obraz indikátora LCD o jedno miesto doľava
Kurzor vypnutý– Zakázať kurzor
Kurzor zapnutý– Povoliť kurzor
Kurzor bliká– Povoliť blikanie kurzora
Kurzor na Noblink– Zakázať blikanie kurzora

Pozor! Ak používate LCD indikátor s rozlíšením 8x2 v BASCOM-AVR, nakonfigurujte ho ako 16x2, pretože BASCOM-AVR nemá konfiguráciu pre LCD indikátor s rozlíšením 8x2.

Príklad programu v BASCOM-AVR pre vyššie uvedenú schému:

$regfile = "attiny2313.dat" $crystal = 8000000 Config Lcdpin = Pin , Db4 = Portb.4 , Db5 = Portb.5 , Db6 = Portb.6 , Db7 = Portb.7, E = Portb.3, Rs = Portb .2 Config Lcd = 16 * 2 Initlcd Cls Nájdite 1 , 1 Lcd "Ahoj," Lowerline Lcd "world!" Koniec

Tu je návod, ako to všetko funguje s 8x2 LCD indikátorom:

Poistkové bity pre firmvér:

Súbory na lekciu (projekt v , zdroj, firmvér) si môžete stiahnuť nižšie

Na želanie robotníkov a tiež mojich sľubov som sa rozhodol opísať prácu s ikonickým 16x2 LCD v prostredí CodeVisionAVR. Začnime popisom samotného LCD. Alfanumerický LCD displej so vstavaným čipom Hitachi HD44780 dokáže zobraziť znaky v jednom, dvoch alebo štyroch výrazoch po 8, 16, 20 alebo 40 znakoch. V tomto článku sa budem zaoberať LCD 16x2 (16 znakov, 2 riadky). Tento displej pre fyzické pripojenie k MK má 16 pinov (umiestnenie kolíkov závisí od výrobcu). Pozrime sa na tieto zistenia. Bez ďalších okolkov som ukradol nápis v MELT. V zásade je vhodný pre akékoľvek LCD.
No myslím, že netreba vysvetľovať, prečo je potrebný ten či onen špendlík. Všetko je tam napísané v ruštine. Existuje však niekoľko malých ale. 1) LCD displeje môžu byť vyrobené v dvoch verziách: 5 voltov alebo 3,3. 2) Rezistor obmedzujúci prúd nie je vždy nainštalovaný v napájacom obvode. Pozrite sa pozorne, môže tam byť len prepojka. (Takto som vypálil podsvietenie na dvoch displejoch.) 3) Obvod na pripojenie odporu na nastavenie kontrastu.
Tak a teraz ako pripojiť tento zázrak k MK. Budeme pracovať s ATmega8 a quartz na 4 MHz. Tu je skutočný diagram.
Ako vidíte, nie je nič zložité. Prvé tri číslice portu D slúžia na kontrolu a posledné štyri na údaje. S týmito displejmi sa dá pracovať aj na 8-bitovej zbernici, ale rozdávať 4 nohy navyše je podľa mňa zbytočnosť. Preto budeme pracovať na 4-bitovej zbernici. Prišli sme na obvod, teraz sa pozrime na softvérovú časť. Ak chcete inicializovať displej a prepnúť ho do 4-bitového režimu, musíte spustiť niekoľko príkazov. Predtým však chcem vysvetliť, ako fungujú ovládacie bity. Bit RS je zodpovedný za to, čo LCD prijme. Ak RS = 0, potom pošleme príkaz a ak 1 potom údaje. Ak bit RW = 0, potom zapíšeme na LCD, a ak 1 , potom čítame. Trocha E len stroboskop. To znamená, že akonáhle chceme zadať príkaz alebo údaje, potom po nastavení všetkých bitov na nohách ich jednoducho nastavíme na 1 trocha E a potom to znova pustíme 0 . 1 - Zapnite napájanie 2 - Pauza na minimálne 20 ms 3 - Príkaz na 4 bity. zbernica 4 - Udržujte pauzu aspoň 40 µs 5 - Príkaz pre 4 bity. pneumatiky (RS=0), (RW=0), (D7=0), (D6=0), (D5=1), (D4=1) 6 - Udržujte pauzu aspoň 40 µs 7 - Príkaz pre 4 bity. pneumatiky (RS=0), (RW=0), (D7=0), (D6=0), (D5=1), (D4=1) 8 - Udržujte pauzu aspoň 40 µs 9 - Príkaz pre 4 bity. pneumatiky (RS=0), (RW=0), (D7=0), (D6=0), (D5=1), (D4=0) 10 - Udržujte prestávku aspoň 40 µs. 11 - Nastavte parametre (RS=0), (RW=0), (D7=0), (D6=0), (D5=1), (D4=0) (RS=0), (RW=0), (D7= 1), (D6=0), (D5=0), (D4=0) 12 - Vypnite displej (RS=0), (RW=0), (D7=0), (D6=0), (D5=0), (D4=0) (RS=0), (RW=0), (D7= 0), (D6=0), (D5=1), (D4=0) 13 - Vyčistite obrazovku (RS=0), (RW=0), (D7=0), (D6=0), (D5=0), (D4=0) (RS=0), (RW=0), (D7= 0), (D6=0), (D5=0),(D4=1) 14 - Režim zadávania údajov (RS=0), (RW=0), (D7=0), (D6=0), (D5=0), (D4=0) (RS=0), (RW=0), (D7= 0), (D6=1), (D5=1),(D4=0) Ach ako. Teraz, po tejto hlúposti, je náš displej pripravený prijímať dáta. Čo bude ďalej. A potom sa pozrime na príkazy na LCD. Na prenos príkazov/údajov na LCD cez 4-bitovú zbernicu sú potrebné dva prechody. Najprv prenesieme najvýznamnejšie 4 bajty a ako druhé prenesieme nižšie 4 bajty. Odteraz budem všetky príkazy písať v pároch. Príkaz na vymazanie indikátora a umiestnenie kurzora do ľavého horného rohu. RS=0, RW=0, D4=0, D5=0, D6=0, D7=0 (E=1 potom 0) RS=0, RW=0, D4=0, D5=0, D6=0, D7=1 (E=1 potom 0) Príkaz na presunutie kurzora na ľavú pozíciu. (X znamená, koho to zaujíma, aká je hodnota) RS=0, RW=0, D4=0, D5=0, D6=0, D7=0 (E=1 potom 0) RS=0, RW=0, D4=0, D5=0, D6=1, D7=X (E=1 potom 0) Príkaz nastaví smer posunu kurzora (ID=0/1 doľava/doprava). Pri zápise do DDRAM tiež zobrazte rozlíšenie posunu (SH=1). RS=0, RW=0, D4=0, D5=0, D6=0, D7=0 (E=1 potom 0) RS=0, RW=0, D4=0, D5=1, D6=ID, D7=SH (E=1 potom 0) Príkaz na zapnutie displeja (D=1) a výber kurzora (A, B). A = 0, B = 0 Neexistuje žiadny kurzor, nič nebliká A = 0, B = 1 Neexistuje žiadny kurzor, celý symbol bliká A = 1, B = 0 Kurzor vo forme podčiarknutia, nebliká A = 1, B = 1 Kurzor sa zobrazí ako podčiarknutie a bliká RS=0, RW=0, D4=0, D5=0, D6=0, D7=0 (E=1 potom 0) RS=0, RW=0, D4=1, D5=D, D6=A, D7=B (E=1 potom 0) Príkaz na zobrazenie/posun kurzora (SC=0/1 kurzor/zobrazenie RL=0/1 doľava/doprava). RS=0, RW=0, D4=0, D5=0, D6=0, D7=1 (E=1 potom 0) RS=0, RW=0, D4=SC, D5=RL, D6=X, D7=X (E=1 potom 0) Príkaz na nastavenie šírky zbernice (DL=0/1 4/8 bitov) Rovnako ako stránky generátora znakov R. RS=0, RW=0, D4=0, D5=0, D6=1, D7=DL (E=1 potom 0) RS=0, RW=0, D4=1, D5=0, D6=P, D7=0 (E=1 potom 0) Príkaz na nastavenie adresy ďalšej operácie s umiestnením kurzora tam a výberom oblasti CGRAM (Vaše vlastné vymyslené znaky). RS=0, RW=0, D4=0, D5=1, D6=ACG, D7=ACG (E=1 potom 0) RS=0, RW=0, D4=ACG, D5=ACG, D6=ACG, D7=ACG (E=1 potom 0) Príkaz pre nastavenie adresy následnej operácie a výber oblasti pamäte DDRAM (Garacter Generator). RS=0, RW=0, D4=0, D5=1, D6=PRIDAŤ, D7=PRIDAŤ (E=1 potom 0) RS=0, RW=0, D4=PRIDAŤ, D5=PRIDAŤ, D6=PRIDAŤ, D7=PRIDAŤ (E=1 potom 0) Príkaz Zápis údajov do aktuálnej oblasti. RS=1, RW=0, D4=ÚDAJE, D5=ÚDAJE, D6=ÚDAJE, D7=ÚDAJE (E=1 potom 0) RS=1, RW=0, D4=ÚDAJE, D5=ÚDAJE, D6=ÚDAJE, D7=ÚDAJE (E=1 potom 0) Príkaz Načítať údaje do aktuálnej oblasti. RS=1, RW=1, D4=ÚDAJE, D5=ÚDAJE, D6=ÚDAJE, D7=ÚDAJE (E=1 potom 0) RS=1, RW=1, D4=ÚDAJE, D5=ÚDAJE, D6=ÚDAJE, D7=ÚDAJE (E=1 potom 0) To sú vlastne všetky príkazy. Existuje aj príkaz na prečítanie príznaku obsadenosti, ale ja ho nepoužívam, len medzi každým príkazom čakám aspoň 40 µs. To je všetko. Teraz, po prečítaní tohto pojednania, vypite šálku čaju alebo kávy a zabudnite na toto všetko. Keďže všetky tieto svinstvá preberajú funkcie z knižnice CodeVisionAVR. Vytvoríme nový projekt, ako už bolo popísané. Pre tých, ktorí to nevedia, prejdite sem, zvyšok prejdite na kartu v generátore kódov LCD a vyberte si PORTD. Čo sme s tým urobili? Najprv sme programu povedali, že chceme pracovať s LCD displejom (výberom záložky LCD). Potom sme si povedali, že to pripojíme k portu D. Nižšie uvedený rozbaľovací zoznam vám umožňuje vybrať počet znakov na riadok. Keďže predvolená hodnota je 16 a chceme pracovať s 16x2 LCD, potom nemusíme nič meniť. Nižšie sú ako náznak namaľované nožičky portov pre správne pripojenie LCD k MK. To je všetko, uložte projekt a pozrite sa na novo vygenerovaný kód. Prvá vec, ktorú musíte venovať pozornosť, je časť kódu za direktívou preprocesora #include Tu je tento: // Funkcie alfanumerického LCD modulu #asm .equ __lcd_port=0x12 ;PORTD #endasm #include > Pozrime sa na to riadok po riadku. Prvý riadok je komentár, ktorý hovorí, že sme zaradili hlavičkový súbor s funkciami pre prácu so symbolickým LCD. Na druhom riadku otvoríme blok pre zadávanie príkazov assembleru. Nasledujúci riadok priraďuje port, ku ktorému je LCD pripojený. Tím .ekv v assembleri robí to isté ako príkaz #include v C. Ak ste omylom vybrali nesprávny port v generátore kódu, môžete ho kedykoľvek zmeniť v tomto riadku. Číslo portu je vždy možné nájsť v inicializačnom súbore MK. Vždy sa spája hneď v prvom riadku. V našom prípade je mega8.h. Ďalší riadok zatvorí blok kódu zostavy. A posledný riadok už len spája všetko potrebné pre prácu s LCD. Teraz prejdime k hlavným funkciám. Prvou funkciou, ktorú je potrebné zavolať skôr, ako začnete týrať LCD, je samozrejme funkcia inicializácie displeja. Vyzerá to takto: void lcd_init(unsigned char lcd_columns) Táto funkcia inicializuje zobrazenie a odovzdaný parameter musí byť počet znakov v riadku. Posúvame náš program úplne dole a pred hlavnou slučkou vidíme dva riadky s nasledujúcim obsahom: // Inicializácia LCD modulu lcd_init(16); Ide o rovnakých 16 riadkov, ktoré program vybral zo zoznamu generátora kódu a vložil ich ako argument do funkcie. Aj tu, ak ste v strachu zabudli, že váš LCD má 8 alebo 20 znakov na riadok, jednoducho zmeňte hodnotu argumentu v tejto funkcii. void lcd_gotoxy(unsigned char x, unsigned char y) Táto funkcia, ako už jej názov napovedá, presúva kurzor na pozíciu x, y. Tu X- toto je list. Zľava doprava od 0 do 15/19/39 (závisí od počtu písmen v riadku). A r je reťazec. Zhora nadol od 0 do 0/1/3 (závisí od počtu riadkov) . void lcd_putchar(char c) Táto funkcia zobrazí jeden znak na aktuálnej pozícii. Príklad: lcd_putchar("A") alebo lcd_putchar(0x41)čo prinesie rovnaký výsledok. To znamená, že parametrom môže byť buď symbol alebo jeho kód. lcd_gotoxy(0,0); lcd_putchar("A"); lcd_gotoxy(0,1); lcd_putchar(0x41); Myslím, že komentáre sú tu zbytočné, pozrime sa na výsledok.
Ďalšia funkcia. void lcd_puts(char *str) Táto funkcia vytlačí reťazec umiestnený v SRAM od aktuálnej pozície. Príklad: lcd_gotoxy(0,0); lcd_puts("ROW"); Vidíme:
Ďalšia funkcia. void lcd_putsf(char *str) Táto funkcia vytlačí reťazec umiestnený vo FLASH od aktuálnej pozície. Príklad: lcd_gotoxy(0,0); lcd_putsf("ROW"); Vidíme:
No, funkcia „Eraser“ celý tento neporiadok ukončí. void lcd_clesr(void) Zavolaním tejto funkcie vymažete všetko, čo je na displeji, a kurzor sa presunie úplne doľava v hornom riadku. Takto si na začiatok môžete na LCD displeji zobraziť slová a čísla pomocou hotových funkcií. Teraz si povedzme, ako zobraziť hodnotu premenných. Na tieto účely budeme potrebovať ďalšiu knižnicu. No tí čo programovali v C na PC by o tom mali vedieť. Volá sa stdio.h Dostaneme sa na úplný vrchol programu a za príkazom preprocesora #include pridávanie #include V dôsledku toho bude náš kód vyzerať takto: // Funkcie alfanumerického LCD modulu#asm .equ __lcd_port=0x12 ;PORTD #endasm #include #include Teraz sa zoznámime s funkciou, ktorá formátuje text. void printf(char flash *fmtstr [,arg1, arg2, ...]) Ako to funguje. IN char flash *fmtstršpecifikuje sa formát výstupnej hodnoty a argumenty arg1, arg2, ... názov premennej. Príklad. teplota znaku bez znamienka = 123; printf("teplota = %05d\n", teplota);Čo znamená táto abra-kadabra? Prvý riadok vytvorí premennú a priradí jej hodnotu. Všetko je tu jasné, ale tu je to, čo robí druhý. Všetko je v poriadku. Záznam sa zobrazí ako prvý teplota =, potom 00123 . Prečo sa zobrazuje? 00123 . A pretože máme podmienku %05d\n ktorý hovorí: 1) % - naformátujeme hodnoty prvého argumentu 2) 0 - vypíšeme n znakov, prázdne budú vyplnené nulami 3) 5 - zobraziť 5 znakov, ak je číslo menšie ako 5 znakov, doplňte prázdne miesta nulami. Toto je uvedené v bode 2. Číslo bude zarovnané doprava. 4) d- zobrazenie čísla v desiatkovom formáte. 5) \n- Po vytlačení znaku vás núti prejsť na iný riadok. Ďalšia funkcia. void sprintf(char flash, char flash *fmtstr [,arg1, arg2, ...]) Toto je funkcia, ktorá je pre nás najzaujímavejšia. Naformátuje reťazec a zapíše ho do poľa. Potom môžeme pole bezpečne zobraziť na obrazovke. Ako to funguje. teplota znaku bez znamienka = 123; nepodpísaný reťazec znakov; sprintf(retazec, "temp = %05d\n", temp); lcd_puts(retazec); Takto to vyzerá naživo.
Tak sme sa naučili, ako zobraziť naformátovaný text na LCD. Ďalej stručne prejdem cez typy transformácií. i d- Na výstup celé číslo so znamienkom u- Na výstup celé desiatkové číslo bez znamienka e -d.d e-d E- Na výstup skutočného typu s pohyblivou rádovou čiarkou -d.d E-d f- Na výstup skutočného typu s pohyblivou rádovou čiarkou -d.d X- Pre výstup v šestnástkovej sústave malými písmenami X- Pre výstup v šestnástkovej sústave veľkými písmenami c- Pre výstup na symbol Ak píšete %-05d potom znamenie "-" vynúti jeho zarovnanie doľava a prázdne miesta nebudú vyplnené nulami. Ak sa pokúsite vytlačiť číslo s pohyblivou rádovou čiarkou, budete veľmi prekvapení. Číslo sa nevytlačí. Je to prepadnutie)) Problém spočíva v nastaveniach kompilátora. Aby kompilátor začal rozumieť formátu plavák treba to trochu doladit. Pre toto ideme Projekt->Konfigurovať a prejdite na kartu C kompilátor. V majetku (s)printf Vlastnosti: vybrať plavák, šírka, presnosť. To je všetko. Vyskúšajte, experimentujte. Ak máte nejaké otázky, píšte na fórum. Veľa štastia!