Ovládejte LCD displej pomocí funkcí CodeVisionAVR. STM32 a LCD. Při práci s grafickým displejem si myslím, že něco chybí

Lekce 12

Část 5

LCD indikátor 16×2

Dnes budeme pokračovat ve studiu LCD indikátor znaků, který je schopen vypisovat určité znaky ve dvou řádcích po 16 znacích.

V minulém díle jsme dokončili a zkontrolovali zápis kódu pro funkci, která na displeji zobrazí libovolný znak.

Nyní je čas napsat funkci pro zobrazení celého řádku na obrazovce, protože její výstup znak po znaku není úplně pohodlný. Přidejme tuto funkci těsně před funkci main() a předáme jí pole znaků neurčité velikosti

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

prázdnotastr_lcd( charstr1)

{

}

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

Zavolejte tuto funkci v main(), poté, co jsme nejprve odstranili veškerý zobrazovaný kód znak po znaku

LCD_ini(); //Inicializace displeje

setpos(0,0);

str_lcd( "Ahoj světe!");

Dále začneme psát tělo funkce výstupu řetězce. Pojďme deklarovat proměnnou pro symbol v těle funkce. Naše proměnná bude trochu jiného typu. U tohoto typu se zpravidla lépe rozpoznávají kódy znaků. Samozřejmě můžete experimentovat s jinými typy

prázdnotastr_lcd( charstr1)

wchar_tn;

Dále podle toho uspořádáme smyčku a budeme střídavě iterovat všechny přenášené znaky v poli a zobrazovat je na displeji. Využijeme také možnost reprezentace nulového znaku "n" a až do tohoto bodu budeme třídit postavy

Wchar_tn;

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

sendchar( str1[ n]);

Pojďme shromáždit kód a zkontrolovat fungování kódu v Proteus

Nyní můžete zkusit zobrazit řádek na jiném místě obrazovky. Pojďme napsat kód v main()

str_lcd( "Ahoj světe!");

setpos(2,1);

str_lcd( "řetězec 2");

zatímco(1)

Pojďme shromáždit kód a podívat se na výsledek

Všechno funguje! Skvělý!

No, samozřejmě, ještě musíme vidět, jak bude kód fungovat na živém displeji s živým ovladačem. K tomu provedeme flash ovladač

Funkce formulujeme do samostatného modulu

S kódem jsme se dostali do takového stavu, že se náš hlavní a jediný soubor s kódem zaplnil natolik, že je nyní těžké v něm vůbec něco najít. Jak s tím můžeme bojovat? Budeme proti tomu bojovat zformátováním kódu funkce pro jedno zařízení nebo sběrnici nebo nějakou technologii do samostatného modulu. Kompetentní modul se obvykle skládá z hlavičkového souboru a souboru implementace funkce. Udělejme to tedy pro náš LCD displej. Toto celé je také nutné k tomu, že pokud píšeme nový projekt, tak k němu tyto soubory jednoduše připojíme, pokud budeme potřebovat LCD displej. To bude naše takzvaná zobrazovací knihovna. Knihovny jsou samozřejmě obvykle zapsány a zkompilovány do samostatného souboru lib, ale v tomto případě obvykle chybí zdrojový kód a data knihovny nelze upravovat. A naše knihovna bude zcela opravitelná a bude nám v budoucnu velmi užitečná.

Před vytvořením této knihovny však vytvoříme hlavní hlavičkový soubor a nazveme jej main.h, abychom do tohoto souboru vložili všechny zahrnuté knihovny, různé globální proměnné a substituce maker.

K tomu klikneme pravým tlačítkem myši na náš projekt ve stromě projektu Test09 a v kontextové nabídce vyberte podnabídku Přidat, a v něm již položku vybereme Nový předmět

A v dialogovém okně, které se otevře, vyberte typ souboru, který vytvoříme, " Zahrnout soubor"A dole v názvu souboru změníme IncFile1 na hlavní a poté stiskněte tlačítko Přidat.

Podle toho vytvoříme soubor main.c s následujícím obsahem

#ifndefMAIN_H_

#definovatMAIN_H_

#endif/* MAIN_H_ */

To je velmi dobre. Například. V Keilu, když programujeme STM regulátory, musíme to všechno napsat ručně. Zde tato směrnice říká, že pokud byl soubor již zahrnut do spustitelného kódu, aby jej preprocesor znovu nezahrnul.

Do tohoto souboru umístíme spojení všech hlavičkových souborů knihoven a všech substitucí maker a v souboru Test09.c toto vše samozřejmě smažeme

#ifndefMAIN_H_

#definovatMAIN_H_

#definovatF_CPU8 000 000 UL

#zahrnout

#zahrnout

#zahrnout

#zahrnout

#zahrnout

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

#definovate1PORTD|=0b00001000// nastaví řádek E na 1

#definovate0PORTD&=0b11110111// nastaví řádek E na 0

#definovatrs1PORTD|=0b00000100// nastavíme řádek RS na 1 (data)

#definovatrs0PORTD&=0b11111011// nastavte řádek RS na 0 (příkaz)

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

#endif/* MAIN_H_ */

Nestačí však zahrnout tento hlavičkový soubor do Průzkumníka řešení, musíme jej také zahrnout do souboru Test09.c zahrnout do kódu hned na začátku

#zahrnout"hlavní.h"

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

Pojďme projekt sestavit a znovu zkontrolovat jeho funkčnost.

Nyní začněme vytvářet naši knihovnu zobrazení.

K tomu vytvoříme hlavičkový soubor stejným způsobem jako main.h lcd.h

#zahrnout

#zahrnout"lcd.h"

A naopak do souboru lcd.h zahrneme soubor hlavní.h

#ifndefLCD_H_

#definovatLCD_H_

#zahrnout"hlavní.h"

Není třeba se obávat možnosti nějaké křížové smyčky – směrnice tomu zabrání.

Také převezmeme všechny substituce maker ze souboru main.h do souboru lcd,h a smažeme je v main.h

#zahrnout"hlavní.h"

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

prázdnotaLCD_ini( prázdnota);

prázdnotasetpos( nepodepsanýcharX, nepodepsanýy);

prázdnotastr_lcd( charstr1);

prázdnotasendchar( nepodepsanýcharC);

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

A abychom všechny funkce pro práci s displejem převzali ze souboru Test09.c, vytvoříme nyní další soubor - lcd.c. Bude obsahovat kód pro implementaci všech funkcí

Soubor se vytvoří úplně stejným způsobem, jen místo „Zahrnout soubor“ vybereme typ souboru „Soubor C“.

Soubor lcd.c byl vytvořen. Už v něm nebudou žádné direktivy, jediný bude komentář autora, který smažeme, abychom nezasahovali.

Do tohoto souboru zahrneme také hlavičkový soubor lcd.h

#zahrnout"lcd.h"

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

Nyní do tohoto souboru přeneseme kompletně všechny funkce určené pro práci s displejem ze souboru Test09.c. Zůstanou v něm pouze dvě funkce - port_ini A hlavní().

Proto vážně uvolníme hlavní soubor aplikace, aby byl čitelnější.

To nám ale nestačí. V souboru Test09.c nyní nebude „viditelná“ žádná funkce. Proto musíme funkce, které budeme používat v jiných souborech, deklarovat, nebo na nich, jak se říká, vytvářet prototypy. To se obvykle provádí v souboru záhlaví. Prototypy vytvoříme v hlavičkovém souboru lcd.h. Prototyp je velmi jednoduchý na výrobu. Záhlaví funkce se všemi argumenty (vše kromě těla) se zapíše nebo obvykle zkopíruje a na konec se umístí středník. Budeme potřebovat funkce pro inicializaci displeje, umístění na displeji a zobrazení řádku na displeji. Prozatím nebudeme vypisovat symboly samostatně, takže nevytváříme prototyp pro odpovídající funkci. Zde jsou naše prototypy

#zahrnout"hlavní.h"

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

prázdnotaLCD_ini( prázdnota);

prázdnotasetpos( nepodepsanýcharX, nepodepsanýy);

prázdnotastr_lcd( charstr1);

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

#definovate1PORTD|=0b00001000// nastaví řádek E na 1

Nyní shromáždíme soubor, spustíme jej v Proteus a zkontrolujeme jeho funkčnost. Pojďme si to také ověřit v praxi. Pokud vše funguje, udělali jsme vše správně. Projekt na celou lekci je přiložen níže a je dostupný přes odkaz „Zdrojový kód“.

V dnešní lekci jsme se tedy hodně naučili. Naučili jsme se pracovat se znakovým displejem a připojit jej k AVR ovladači. V rámci této lekce jsme se také naučili správně psát kód a používat modulární programování.

Zobrazení příspěvku: 11 438

Uživatel často potřebuje přijímat nějaké vizuální informace z elektronického zařízení. Pokud lze informaci prezentovat v symbolické podobě, pak jednou z možností jejího zobrazení je použití symbolických indikátorů z tekutých krystalů (LCD, nebo v zahraničním označení LCD). Dnes budeme hovořit o symbolických indikátorech realizovaných na bázi kontrolérů Hitachi HD44780, Samsung KS 0066 a podobné.

Jako příklad uvedu LCD Winstar Wh1602D-TMI-CT#, které mám k dispozici pro provádění experimentů. O tomto LCD jsem se již zmiňoval v článku, jehož grafický vývoj dnes využiji.

Detailní datový list Na LCD WINSTAR WH1602D-TMI-CT:

Kategorie: Dokumenty
Datum: 22.03.2015

Zjednodušený obvod LCD může být reprezentován následovně:

Základem indikátoru je matrice z tekutých krystalů, přivedením napětí na její prvek můžeme pozorovat bod na obrazovce. U znakových LCD se tato matice skládá z určitého počtu známých míst, která jsou seskupena do řádků a sloupců. Velikost známého místa v pixelech je často 5x8 pixelů. Označení mého indikátoru obsahuje čísla 1602 a to znamená, že můj indikátor může zobrazit 2 řádky po 16 znacích. Kódování také zahrnuje: kód výrobce a typ indikátoru, přítomnost podsvícení, barvu, tabulku kódů a tak dále.

Systém označení indikátorů WINSTAR

Zobrazit/skrýt legendu

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

2. Typ indikátoru:

  • H- symbolický (syntetizující znaky)
  • C- grafická barva s pasivní maticí CSTN (ColorSTN)
  • X- grafika s matricí TAB (Automatické lepení pásky– krystal je namontován na třívrstvé polyamidové podkladové pásce)
  • Ó- grafika s matricí OZUBENÉ KOLO (čip Na Sklo- krystal na skle)

3. Horizontální rozlišení:

  • počet znaků na řádek pro indikátory typu znaků
  • počet vodorovných bodů pro indikátory grafického typu

4. Vertikální rozlišení:

  • počet řádků pro indikátory typu postavy
  • počet svislých bodů pro indikátory grafického typu

5. Kód modelu

  • Kóduje geometrické rozměry používané ovladačem

6. Typ podsvícení:

  • N- bez podsvícení
  • B- elektroluminiscenční, barva záře - modrá
  • D- elektroluminiscenční, barva záře - zelená
  • W- elektroluminiscenční, barva záře - bílá
  • Y— LED, barva svitu — žlutozelená
  • A— LED, barva záře — jantarová
  • R— LED, barva svitu — červená
  • G— LED, barva svitu — zelená
  • T— LED, barva žhavení — bílá
  • P- LED, barva svitu - modrá
  • F— lampa se studenou katodou (CCFL), barva světla — bílá

7. Technologie výroby LCD

  • B- TN šedá, pozitivní
  • N— TN, negativní
  • G- STN šedá, pozitivní
  • Y— STN žlutozelená, pozitivní
  • M— STN modrá, negativní
  • F— FSTN pozitivní
  • T- FSTN negativní
  • H- HTN šedá, pozitivní
  • — HTN černá, negativní
  • TN (Twisted Nematic) - Krystalová struktura má spirálový typ
  • STN (Super Twisted Nematic) - matice skládající se z LCD prvků s proměnnou průhledností
  • FSTN (Film kompenzovaný STN) — STN-matrice s filmovou kompenzací. Technologie umožňuje větší pozorovací úhel
  • HTN (Homeotropní Twisted Nematic) - displeje jsou založeny na silnějším molekulárním zkroucení (typicky 110°) ve srovnání s konvenčními TN kroucenými nematicemi (90°). Poskytuje široký pozorovací úhel a vylepšený kontrast. Vlastnosti jsou lepší než technologie STN. Nízké provozní napětí (2,5 V a nejnižší cena mezi nematiky činí jejich použití výhodné v přenosných samostatných zařízeních).

8. Polarizátor, pozorovací úhel, rozsah provozních teplot

  • 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.
  • — TM, 6:00, W.T.
  • L- TM, 12:00, W.T.
  • RF (Reflexní LCD) - LCD indikátor, který funguje pouze na odrazu světla. Obraz je viditelný pouze při dostatečném okolním osvětlení.
  • TF - (Transflexní LCD) - displej z tekutých krystalů, který světlo odráží i vyzařuje (sám svítí).
  • TM (Transmisivní LCD) - světlo vstupuje přes LCD ze strany podsvícení. Má vysokou kvalitu obrazu v interiéru a obvykle velmi špatnou (černá obrazovka) na slunci.
  • N.T.— normální teplotní rozsah 0...+50ºC W.T.— rozšířený teplotní rozsah -20...+70ºC

9. Další možnosti

První dva znaky jsou generátor znaků:

  • C.T./C.P.— latina/cyrilice
  • E.P./ET/E.E./EN/E.C./ES— latinský/evropský
  • J.P./JT/JS/JN- latina/japonština
  • HP/H.S.— hebrejsky

3–4 znaky:

  • T- teplotní kompenzace
  • E nebo EZ— edge BL (podsvícení LED jsou umístěny po obvodu). Může také chybět symbol.
  • K nebo LB— eco BL (LED diody jsou umístěny rovnoměrně za obrazovkou)
  • PROTI- vestavěný zdroj záporného napětí
  • N- bez vestavěného zdroje záporného napětí

10. Další informace:

# - kompatibilita se standardem RoHS

Poznámka(výrobce čipu ovladače):

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

Pomocí tohoto systému zápisu jsem zjistil, že mám v rukou indikátor syntetizující znak Winstar, zobrazení znaků v 16 sloupcích a 2 řádcích pomocí ovladače KS 0066 nebo jeho ekvivalent, s bílým LED osvětlením po obvodu, s modrým negativem transmisivní- matice, pozorovací úhel „v 6 hodinách“, rozsah provozních teplot -20...+70ºC s generátorem znaků, včetně azbuky a kompatibilní se standardem RoHS(neobsahuje žádné škodlivé složky, což zřejmě znamená, že při montáži byla použita bezolovnatá pájka).

Indikátory založené na ovladačích HD44780, KS066U

Indikátor je řízen vestavěným ovladačem. Ovladač je obvykle Hitachi HD44780, Samsung KS0066U nebo jejich četné analogy a klony. Indikátory vyráběné ruskou společností MELT používají ovladač PCF8576.

Řadič má jednobajtové paměťové buňky ( DDRAM), jejichž obsah se skutečně zobrazuje na obrazovce podle tabulky zaznamenané v CGRAM. Paměťových buněk je obvykle více než symbolů na LCD, takže při adresování symbolů se musíte podívat na datový list. Potřebujeme napsat kód požadovaného symbolu na požadovanou pozici a ovladač se postará o zbytek sám.

Pro výběr pozice slouží virtuální kurzor ovládaný příkazy (číslo aktuální paměťové buňky, AC). Dá se to zviditelnit. Ve výchozím nastavení se při psaní znaku do buňky kurzor posune o jednu pozici dopředu.

Tabulka kódů indikátorů se obvykle skládá ze tří částí:

  • 0×00-0×07 – generátor postav ke stažení, vámi vytvořené postavy
  • 0×20-0xFF - ASCII kódy, standardní znaková sada a anglická abeceda
  • 0xA0-0xFF - symboly národních abeced a další, s vynecháním znaků, které odpovídají anglickým.

Zobrazit/skrýt tabulku kódů s azbukou

Příklad: hexadecimální kód 0x4A odpovídá písmenu J, kód 0xB6 - písm a.

Nejvýznamnější čtyři bity určují sloupec vybraného znaku v tabulce, nejméně významné určují řádek. Můžete si vytvořit vlastní tabulku symbolů tak, že ji zapíšete CGRAM. Každý znak vyžaduje 5 bajtů (jeden bajt na sloupec). Jedničky v každém bajtu definují významné pixely. Například pro kódování čísel pixel po pixelu 8 budete potřebovat následující sekvenci: 0x6c,0×92,0×92,0×92,0x6c.

Konvertor azbuky

Chcete-li převést text obsahující znaky azbuky na kódy odpovídající výše uvedené tabulce, zadejte požadovaný text do textového pole. Níže získaný výsledek lze zkopírovat a použít ve vašich programech k zobrazení tohoto textu na LCD.

Původní text:

Kódovaný text:

Tabulka příkazových kódů:

D7 D6 D5 D4 D3 D2 D1 D0 Účel
0 0 0 0 0 0 0 1 Čištění obrazovky, A.C.=0, adresování A.C. na DDRAM
0 0 0 0 0 0 1 A.C.=0, adresování DDRAM, posuny jsou vymazány, začátek řádku je adresován na začátku DDRAM
0 0 0 0 0 1 I/DSVybírá směr pohybu kurzoru nebo obrazovky
0 0 0 0 1 DCBVyberte režim zobrazení
0 0 0 1 S/CR/LPříkaz posunu kurzoru/obrazovky
0 0 1 D.L.NFDefinování parametrů skenování a šířky datové sběrnice
0 1 AC5AC4AC3AC2AC1AC0Přiřazení k pultu A.C. adresy v regionu CGRAM
1 AC6AC5AC4AC3AC2AC1AC0Přiřazení k pultu A.C. adresy v regionu DDRAM

Tabulka hodnot příznaků:

Vlajka Význam
I/DRežim offsetu čítače AC adresy, 0 - snížení, 1 - zvýšení
SPříznak režimu posunu obsahu obrazovky. 0 - obrazovka není posunuta, 1 - po zapsání dalšího kódu do DDRAM se obrazovka posune ve směru určeném příznakem I/D: 0 - doprava, 1 - doleva. Shift nemění obsah DDRAM. Změní se pouze interní ukazatele na umístění viditelného začátku řádku v paměti DDRAM
S/CPříkaz Flag, který spolu s příznakem R/L provede operaci posunu obsahu obrazovky (stejně jako v předchozím případě, beze změn v DDRAM) nebo kurzoru. Definuje objekt posunutí: 0 — kurzor je posunut, 1 — obrazovka je posunuta
R/LPříkaz příznak, který společně s příznakem S/C provádí operaci posunu obrazovky nebo kurzoru. Určuje směr posunu: 0 — doleva, 1 — doprava
D/LPříznak definující šířku datové sběrnice: 0 - 4 bity, 1 - 8 bitů
NRežim skenování obrazu na LCD: 0 - jeden řádek, 1 - dva řádky
FVelikost matice znaků: 0 - 5×8 bodů, 1 - 5×10 bodů
DPřítomnost obrazu: 0 - zakázáno, 1 - povoleno
CKurzor ve tvaru podtržítka: 0 - vypnuto, 1 - povoleno
BKurzor v podobě blikajícího známého místa: 0 - vypnuto, 1 - zapnuto

Přiřazení pinů ovladače:

  • DB0-DB7— odpovědný za příchozí/odchozí data
  • R.S.- vysoká úroveň znamená, že signál na výstupech DB0-DB7 je datový, nízká úroveň znamená příkaz
  • W/R— určuje směr dat (čtení/zápis). Protože operace čtení dat z indikátoru je obvykle nenárokovaná, můžete tento vstup neustále nastavovat na nízkou úroveň
  • E— puls s dobou trvání alespoň 500 ms na tomto pinu určuje signál pro čtení/zápis dat z pinů DB0-DB7, RS a W/R
  • V 0— slouží k nastavení kontrastu obrazu
  • A, K- napájení podsvícení (anoda a katoda), pokud je k dispozici
  • V CC A GND- napájení pro LCD indikátor

K ovládání LCD indikátoru je zapotřebí 6 nebo 10 pinů, v závislosti na tom, zda je zvolen režim výměny dat 4 nebo 8 bitů. Chcete-li snížit požadovaný počet pinů mikrokontroléru, můžete pracovat ve 4bitovém režimu. V tomto případě na závěry DB4-DB7 Nejprve se přenesou čtyři nejvýznamnější bity dat/příkazu a poté čtyři nejméně významné bity. závěry DB0-DB3 zůstane nevyužitý.

Jeden ovladač ovládá omezený počet postav. Na indikační desce může být 1, 2, 4, 8 ovladačů a možná i více.

Dokumentace ovladače:

Ovladač Samsung KS0066U

Ovladač Hitachi HD44780

Kategorie: Dokumenty
Datum: 21.03.2015

přeloženo do ruské verze:

Kategorie: Dokumenty
Datum: 21.03.2015

Indikátory od různých výrobců jsou často kompatibilní a zaměnitelné, mohou se však lišit rozměry, montáží, kontakty atd. Při výběru nového vývoje a hledání náhrady se proto prosím řiďte katalogy výrobců:

Tabulka kompatibility pro znakové LCD indikátory od různých výrobců:

Zobrazit/skrýt tabulku

Typ Winstar TÁT Data Vision Bolymin Sluneční Mikrošpičky Wintek Říše
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ájení, nastavení kontrastu a podsvícení

Je třeba dávat pozor na polaritu připojení napájení k LCD indikátoru a také se ujistit, že napájecí napětí je v rozsahu +4,5...5,5 V. Nepozornost věnovaná těmto bodům může vést k selhání indikátoru!

LCD indikátory umožňují upravit kontrast pomocí děliče napětí. Před výstupem dat do indikátoru se musíte ujistit, že napětí řízení kontrastu je v provozním rozsahu. Hodnoty rezistorů se u různých výrobců LCD indikátorů liší. Některé modely indikátorů mají na desce místa pro instalaci takového děliče a stačí tam připájet požadované hodnoty odporu. Kontrast indikátoru závisí na úhlu pohledu. Pokud je indikátor „na dvanácté hodině“, musíte se na takový indikátor podívat tak, aby byl pod úrovní očí, pokud „nula hodin“, pak je určen pro pozorování v úrovni očí ( kolmo k rovině obrazovky). Pokud je indikátor „v šest hodin“, měl by být použit při pozorování nad úrovní očí. Tento bod je třeba vzít v úvahu při nákupu.

Výkon podsvícení

Pokud má indikátor podsvícení, kolíky pro něj jsou obvykle umístěny samostatně. Je nutné jej připojit ke zdroji, nastavením jmenovitého proudu pomocí externího rezistoru R (viz. datový list). Pro můj indikátor by jmenovité napětí na anodě mělo být 3,5 V a proud 40 mA. Na základě toho je hodnota odporu omezujícího proud:

Někteří výrobci mají na desce indikátoru místo pro instalaci takového odporu, musíte připájet příslušnou hodnotu, uzavřít propojku a podsvícení bude napájeno ze stejné linky jako indikátor.

Jak hodnotíte tuto publikaci?

  • Modul FC-113 je založen na čipu PCF8574T, což je 8bitový posuvný registr - vstupně-výstupní „expandér“ pro sériovou sběrnici I2C. Na obrázku je mikroobvod označen DD1.
  • R1 je trimovací rezistor pro nastavení kontrastu LCD displeje.
  • Jumper J1 slouží k zapnutí podsvícení displeje.
  • Piny 1…16 se používají pro připojení modulu k pinům LCD displeje.
  • Kontaktní plošky A1...A3 jsou potřebné pro změnu I2C adresy zařízení. Připájením příslušných propojek můžete změnit adresu zařízení. Tabulka ukazuje shodu adres a propojek: „0“ odpovídá rozpojenému obvodu, „1“ nainstalované propojce. Ve výchozím nastavení jsou všechny 3 propojky otevřené a adresa zařízení 0x27.

2 Schéma připojení LCD displeje k Arduinu přes I2C protokol

Modul je připojen k Arduinu standardním způsobem pro sběrnici I2C: pin SDA modulu je připojen k analogovému portu A4, pin SCL je připojen k analogovému portu A5 Arduina. Modul je napájen +5 V z Arduina. Samotný modul je připojen piny 1…16 k odpovídajícím pinům 1…16 na LCD displeji.


3 Knihovna pro práci přes I2C protokol

Nyní potřebujeme knihovnu pro práci s LCD přes rozhraní I2C. Můžete použít například tento (odkaz v řádku "Stáhnout ukázkový kód a knihovnu").

Stažený archiv LiquidCrystal_I2Cv1-1.rar rozbalit do složky \knihovny\, který se nachází v adresáři Arduino IDE.

Knihovna podporuje sadu standardních funkcí pro LCD obrazovky:

FunkceÚčel
Tekutý krystal() vytvoří proměnnou typu LiquidCrystal a přijímá parametry připojení displeje (čísla pinů);
začít() inicializace LCD displeje, nastavení parametrů (počet řádků a znaků);
Průhledná() vymazání obrazovky a návrat kurzoru do výchozí pozice;
Domov() vrátit kurzor do výchozí polohy;
setCursor() nastavení kurzoru na danou pozici;
napsat() zobrazí symbol na LCD obrazovce;
tisk() zobrazuje text na LCD obrazovce;
kurzor() ukazuje kurzor, tzn. podtržení pod místem dalšího znaku;
noCursor() skryje kurzor;
blikat() kurzor bliká;
noBlink() Zrušit blikání;
noDisplay() vypnutí displeje při ukládání všech zobrazených informací;
Zobrazit() zapnutí displeje při ukládání všech zobrazených informací;
scrollDisplayLeft() posuňte obsah displeje o 1 pozici doleva;
scrollDisplayRight() posuňte obsah displeje o 1 pozici doprava;
automatické rolování() povolit automatické posouvání;
noAutoscroll() zakázat automatické posouvání;
zleva do prava() nastavuje směr textu zleva doprava;
zprava doleva() směr textu zprava doleva;
createChar() vytvoří vlastní znak pro obrazovku LCD.

4 Skica pro výstup textu na LCD obrazovku přes I2C sběrnici

Otevřeme ukázku: Soubor Samples LiquidCrystal_I2C CustomChars a trochu to předěláme. Zobrazíme zprávu, na jejímž konci bude blikající symbol. Komentáře ke kódu komentují všechny nuance náčrtu.

#zahrnout // zahrnout knihovnu Wire #include // připojení knihovny LCD #define printByte(args) write(args); // uint8_t srdce = (0x0,0xa,0x1f,0x1f,0xe,0x4,0x0); // bitová maska ​​symbolu „srdce“ LiquidCrystal_I2C lcd(0x27, 16, 2); // Nastavení adresy 0x27 pro LCD displej 16x2 void setup() ( lcd.init(); // inicializace LCD displeje lcd.backlight(); // zapnutí podsvícení displeje lcd.createChar(3, srdce); // vytvoření symbolu „srdce“ v paměťové buňce 3 lcd.home(); // umístěte kurzor do levého horního rohu na pozici (0,0) lcd.!"); // vytiskněte řádek textu lcd.setCursor(0, 1); // přesuňte kurzor na řádek 2, znak 1 lcd.print( " i ") // vytiskne zprávu na řádek 2 lcd.printByte(3) // vytiskne symbol „srdce“ umístěný ve 3. buňce lcd.print(" Arduino "); } void loop() (// blikání posledního znaku lcd.setCursor(13, 1); // přesunutí kurzoru na řádek 2, znak 1 lcd.print("\t"); zpoždění(500); lcd.setCursor(13, 1); // přesunutí kurzoru na řádek 2, znak 1 lcd.print(" "); zpoždění(500); }

Mimochodem, znaky napsané příkazem lcd.createChar();, zůstávají v paměti displeje i po vypnutí napájení, protože zapsáno na zobrazení ROM 1602.

5 Vytvořte si vlastní symboly pro LCD displej

Pojďme se blíže podívat na problematiku tvorby vlastních symbolů pro LCD obrazovky. Každý znak na obrazovce se skládá z 35 bodů: 5 širokých a 7 vysokých (+1 rezervní řádek pro podtržení). Na řádku 6 výše uvedeného náčrtu definujeme pole 7 čísel: (0x0, 0xa, 0x1f, 0x1f, 0xe, 0x4, 0x0). Převedeme hexadecimální čísla na binární: {00000, 01010, 11111, 11111, 01110, 00100, 00000} . Tato čísla nejsou nic jiného než bitové masky pro každý ze 7 řádků symbolu, kde "0" označuje světlý bod a "1" tmavý bod. Například symbol srdce určený jako bitová maska ​​se objeví na obrazovce, jak je znázorněno na obrázku.

6 Ovládání LCD obrazovky přes I2C sběrnici

Nahrajeme skicu do Arduina. Na obrazovce se objeví nápis, který jsme určili s blikajícím kurzorem na konci.


7 Co je pozadu I2C sběrnice

Jako bonus se podívejme na časový diagram pro zobrazení latinských znaků „A“, „B“ a „C“ na LCD displeji. Tyto znaky jsou uloženy v paměti ROM displeje a zobrazují se na obrazovce jednoduše přenosem jejich adres na displej. Schéma je převzato z pinů RS, RW, E, D4, D5, D6 a D7 displeje, tzn. již po převodníku FC-113 “I2C paralelní sběrnice”. Dá se říci, že se ponoříme trochu hlouběji do hardwaru.


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

Diagram ukazuje, že znaky, které jsou na displeji ROM (viz str. 11 datového listu, odkaz níže), jsou přenášeny ve dvou kouscích, z nichž první určuje číslo sloupce tabulky a druhý - číslo řádku. V tomto případě jsou data „zablokována“ na okraji signálu na lince E(Povolit) a řádek R.S.(Výběr registru) je ve stavu logické jedničky, což znamená, že se data přenášejí. Nízký stav na lince RS znamená, že jsou odesílány instrukce, což vidíme před odesláním každého znaku. V tomto případě je přenášen instrukční kód pro návrat vozíku do polohy (0, 0) LCD displeje, což lze také zjistit prostudováním technického popisu displeje.

A ještě jeden příklad. Tento časový diagram zobrazuje výstup symbolu srdce na LCD displeji.


Opět první dva impulsy Umožnit dodržovat pokyny Domov()(0000 0010 2) - vraťte vozík do polohy (0; 0) a druhé dva - výstup na LCD displej uložený v paměťové buňce 3 10 (0000 0011 2) symbol "Srdce" (pokyn lcd.createChar(3, srdce); skica).

A jeho analogy, například S6A0069, KS0066 atd. Tyto LCD indikátory jsou textové a mohou zobrazovat text a pseudografické symboly. Jejich známá velikost je 5x8 pixelů, LCD indikátory se dodávají v různých velikostech a s různým rozlišením, například: 8 znaků na 2 řádcích - 8x2, 16x2, 20x2, 40x2, 16x4, 20x4 atd.

V této lekci se podíváme na 4bitové připojení LCD indikátoru k mikrokontroléru AVR a psaní programu v .

Tyto LCD indikátory mají následující závěry:
VSS – Gnd (výkon minus)
VDD – Vcc (Napájení 5V)
VO – Nastavení kontrastu matice LCD
RS – řídicí linka RS
RW (Read/Write) – Řídící linka RW
E (Enable) – Řídicí linka E
D0 – D0 Data Line (nepoužívá se ve 4bitovém režimu)
D1 – D1 Data Line (nepoužívá se ve 4bitovém režimu)
D2 – D2 Data Line (nepoužívá se ve 4bitovém režimu)
D3 – D3 Data Line (nepoužívá se ve 4bitovém režimu)
D4 – Datový řádek D4
D5 – Datový řádek D5
D6 – Datový řádek D6
Datová linka D7 – D7
A – Anoda LED podsvícení displeje
K – Podsvícení displeje LED katoda

Pozornost! Různé LCD indikátory mají své vlastní umístění pinů, přesné umístění pinů můžete zjistit v technické dokumentaci (datasheet) pro váš LCD indikátor.

LCD indikační pin VO řídí kontrast LCD matice v závislosti na napájecím napětí přiváděném na tento pin. Pokud není potřeba číst informace z displeje, je pin RW připojen k napájení mínus.

Příklad 4bitového připojení LCD indikátoru k mikrokontroléru Attiny2313:

Podřetězcový rezistor RV1 upravuje jas LCD indikátoru.
V BASCOM-AVR musíte před ovládáním LCD indikátoru označit, které piny displeje jsou připojeny ke kterým portům mikrokontroléru, k tomu slouží příkaz Config Lcdpin, příklad použití tohoto příkazu: Config Lcdpin = Pin, Db4 = Portb .4, Db5 = Portb.5, Db6 = Portb.6, Db7 = Portb.7, E = Portb.3, Rs = Portb.2 a také zadejte rozlišení indikátoru LCD pomocí příkazu Config Lcd, příklad: Config Lcd = 16 * 2 a inicializujte LCD indikátor příkazem Initlcd, poté bude LCD indikátor připraven k použití.

Zde je seznam příkazů pro práci s LCD indikátorem v BASCOM-AVR:
KonfiguraceLcdpin– Nastavení konfigurace pinů LCD indikátoru a mikrokontroléru
Konfigurace LCD– Nastavení rozlišení LCD indikátoru
Initlcd– Inicializace LCD indikátoru
LCD– Zobrazení textu na LCD indikátoru, příklad: LCD „Ahoj“
Cls– Čištění LCD indikátoru
Lokalizovaty,X– Umístěte kurzor na pozici x, y
Spodní linie– Přesuňte kurzor na spodní řádek
Horní linie– Přesuňte kurzor na horní řádek
Shiftlcd vpravo– Posuňte obraz indikátoru LCD o jedno správné místo
Shiftlcd vlevo– Posuňte obraz indikátoru LCD o jedno místo doleva
Kurzor vypnutý– Zakázat kurzor
Kurzor zapnut– Povolit kurzor
Kurzor bliká– Povolit blikající kurzor
Kurzor na Noblink– Zakázat blikající kurzor

Pozornost! Při použití LCD indikátoru s rozlišením 8x2 v BASCOM-AVR jej nakonfigurujte jako 16x2, protože BASCOM-AVR nemá konfiguraci pro LCD indikátor s rozlišením 8x2.

Příklad programu v BASCOM-AVR pro výše uvedené schéma:

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

Zde je návod, jak to všechno funguje s indikátorem LCD 8x2:

Pojistkové bity pro firmware:

Soubory k lekci (projekt v , zdroj, firmware) si můžete stáhnout níže

Na žádost pracovníků a svých slibů jsem se rozhodl popsat práci s ikonickým 16x2 LCD v prostředí CodeVisionAVR. Začněme popisem samotného LCD. Alfanumerický LCD displej s vestavěným čipem Hitachi HD44780 může zobrazovat znaky v jednom, dvou nebo čtyřech termínech po 8, 16, 20 nebo 40 znacích. V tomto článku se budu zabývat LCD 16x2 (16 znaků, 2 řádky). Tento displej pro fyzické připojení k MK má 16 pinů (umístění kolíků závisí na výrobci). Podívejme se na tato zjištění. Bez dalších řečí jsem ukradl nápis v MELT. V zásadě je vhodný pro jakékoli LCD.
No, myslím, že není třeba vysvětlovat, proč je potřeba ten či onen pin. Vše je tam napsáno v ruštině. Ale je tu pár malých ale. 1) LCD displeje lze vyrábět ve dvou verzích: 5 voltů nebo 3,3. 2) V napájecím obvodu není vždy instalován odpor omezující proud. Podívejte se pozorně, může tam být jen propojka. (Tímto způsobem jsem spálil podsvícení dvou displejů.) 3) Obvod pro připojení rezistoru pro nastavení kontrastu.
Tak a teď jak tento zázrak připojit k MK. Budeme pracovat s ATmega8 a quartz na 4 MHz. Zde je skutečný diagram.
Jak vidíte, není nic složitého. První tři číslice portu D slouží pro ovládání a poslední čtyři pro data. S těmito displeji se dá pracovat i na 8bitové sběrnici, ale rozdávat 4 nohy navíc je podle mě škoda. Proto budeme pracovat na 4bitové sběrnici. Vymysleli jsme obvod, nyní se podíváme na softwarovou část. Chcete-li inicializovat displej a přepnout jej do 4bitového režimu, musíte spustit několik příkazů. Ale předtím bych chtěl vysvětlit, jak fungují řídicí bity. Bit RS je zodpovědný za to, co bude LCD přijímat. Li RS = 0, pak odešleme příkaz a if 1 pak data. Pokud bit RW=0, pak zapíšeme na LCD, a pokud 1 , pak čteme. Bit E jen stroboskop. To znamená, že jakmile chceme zadat příkaz nebo data, pak poté, co nastavíme všechny bity na nohách, jednoduše je nastavíme na 1 bit E a pak to znovu upustíme 0 . 1 - Zapněte napájení 2 - Pauza po dobu alespoň 20 ms 3 - Příkaz na 4 bity. sběrnice 4 - Udržujte pauzu alespoň 40 µs 5 - Příkaz pro 4 bity. pneumatiky (RS=0), (RW=0), (D7=0), (D6=0), (D5=1), (D4=1) 6 - Udržujte pauzu alespoň 40 µs 7 - Příkaz pro 4 bity. pneumatiky (RS=0), (RW=0), (D7=0), (D6=0), (D5=1), (D4=1) 8 - Udržujte pauzu alespoň 40 µs 9 - Příkaz pro 4 bity. pneumatiky (RS=0), (RW=0), (D7=0), (D6=0), (D5=1), (D4=0) 10 - Udržujte pauzu alespoň 40 µs. 11 - Nastavte parametry (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 - Vypněte 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 - Vymažte 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ávání dat (RS=0), (RW=0), (D7=0), (D6=0), (D5=0), (D4=0) (RS=0), (RW=0), (D7= 0), (D6=1), (D5=1),(D4=0) Oh jak. Nyní po tomto žvanění je náš displej připraven přijímat data. Co bude dál. A pak se podívejme na příkazy LCD. Pro přenos příkazů/dat na LCD přes 4bitovou sběrnici jsou zapotřebí dva průchody. Nejprve přeneseme nejvýznamnější 4 bajty a jako druhé přeneseme spodní 4 bajty. Od této chvíle budu všechny příkazy psát ve dvojicích. Příkaz pro vymazání indikátoru a umístění kurzoru do levého horního rohu. RS=0, RW=0, D4=0, D5=0, D6=0, D7=0 (E=1 pak 0) RS=0, RW=0, D4=0, D5=0, D6=0, D7=1 (E=1 pak 0) Příkaz pro přesun kurzoru do levé pozice. (X znamená, koho zajímá, jaká je hodnota) RS=0, RW=0, D4=0, D5=0, D6=0, D7=0 (E=1 pak 0) RS=0, RW=0, D4=0, D5=0, D6=1, D7=X (E=1 pak 0) Příkaz nastavuje směr posunu kurzoru (ID=0/1 doleva/doprava). Při zápisu do DDRAM také zobrazit rozlišení posunu (SH=1). RS=0, RW=0, D4=0, D5=0, D6=0, D7=0 (E=1 pak 0) RS=0, RW=0, D4=0, D5=1, D6=ID, D7=SH (E=1 pak 0) Příkaz pro zapnutí displeje (D=1) a výběr kurzoru (A, B). A=0, B=0 Neexistuje žádný kurzor, nic nebliká A=0, B=1 Neexistuje žádný kurzor, celý symbol bliká A=1, B=0 Kurzor ve formě podtržení, nebliká A=1, B=1 Kurzor se zobrazí jako podtržení a bliká RS=0, RW=0, D4=0, D5=0, D6=0, D7=0 (E=1 pak 0) RS=0, RW=0, D4=1, D5=D, D6=A, D7=B (E=1 pak 0) Displej/příkaz posunu kurzoru (SC=0/1 kurzor/zobrazení RL=0/1 doleva/doprava). RS=0, RW=0, D4=0, D5=0, D6=0, D7=1 (E=1 pak 0) RS=0, RW=0, D4=SC, D5=RL, D6=X, D7=X (E=1 pak 0) Příkaz pro nastavení šířky sběrnice (DL=0/1 4/8 bitů) Stejně jako stránky generátoru znaků R. RS=0, RW=0, D4=0, D5=0, D6=1, D7=DL (E=1 pak 0) RS=0, RW=0, D4=1, D5=0, D6=P, D7=0 (E=1 pak 0) Příkaz pro nastavení adresy další operace s umístěním kurzoru tam a výběrem oblasti CGRAM (Vaše vlastní vymyšlené znaky). RS=0, RW=0, D4=0, D5=1, D6=ACG, D7=ACG (E=1 pak 0) RS=0, RW=0, D4=ACG, D5=ACG, D6=ACG, D7=ACG (E=1 pak 0) Příkaz pro nastavení adresy následné operace a výběr oblasti paměti DDRAM (Garacter Generator). RS=0, RW=0, D4=0, D5=1, D6=PŘIDAT, D7=PŘIDAT (E=1 pak 0) RS=0, RW=0, D4=PŘIDAT, D5=PŘIDAT, D6=PŘIDAT, D7=ADD (E=1 pak 0) Příkaz Zápis dat do aktuální oblasti. RS=1, RW=0, D4=DATA, D5=DATA, D6=DATA, D7=DATA (E=1 pak 0) RS=1, RW=0, D4=DATA, D5=DATA, D6=DATA, D7=DATA (E=1 pak 0) Příkaz Načíst data do aktuální oblasti. RS=1, RW=1, D4=DATA, D5=DATA, D6=DATA, D7=DATA (E=1 pak 0) RS=1, RW=1, D4=DATA, D5=DATA, D6=DATA, D7=DATA (E=1 pak 0) To jsou vlastně všechny příkazy. Existuje také příkaz pro přečtení příznaku obsazenosti, ale já ho nepoužívám, jen mezi každým příkazem čekám alespoň 40 µs. To je vše. Nyní, po přečtení tohoto pojednání, vypijte šálek čaje nebo kávy a zapomeňte na to všechno. Jelikož všechny tyhle svinstva přebírají funkce z knihovny CodeVisionAVR. Vytvoříme nový projekt, jak již bylo popsáno. Pro ty, kteří to neznají, přejděte sem, zbytek přejděte na kartu v generátoru kódu LCD a vybrat si PORTD. co jsme s tím udělali? Nejprve jsme programu řekli, že chceme pracovat s LCD displejem (výběrem záložky LCD). Pak jsme si řekli, že to připojíme k portu D. Níže uvedený rozevírací seznam umožňuje vybrat počet znaků na řádek. Protože výchozí nastavení je 16 a chceme pracovat s 16x2 LCD, pak nemusíme nic měnit. Níže jsou jako nápověda namalovány nožičky portů pro správné připojení LCD k MK. To je vše, uložte projekt a podívejte se na nově vygenerovaný kód. První věc, které musíte věnovat pozornost, je část kódu za direktivou preprocesoru #zahrnout Tady je tohle: // Funkce alfanumerického LCD modulu #asm .equ __lcd_port=0x12 ;PORTD #endasm #include > Podívejme se na to řádek po řádku. První řádek je komentář, který říká, že jsme zahrnuli hlavičkový soubor s funkcemi pro práci se symbolickým LCD. Na druhém řádku otevřeme blok pro zadávání příkazů assembleru. Další řádek přiřadí port, ke kterému je LCD připojen. tým .ekv v assembleru dělá to samé jako příkaz #zahrnout v C. Pokud jste omylem vybrali špatný port v generátoru kódu, můžete jej kdykoli změnit v tomto řádku. Číslo portu lze vždy nalézt v inicializačním souboru MK. Vždy se zapojuje hned v prvním řádku. V našem případě ano mega8.h. Další řádek uzavře blok kódu sestavení. A poslední řádek už jen spojuje vše potřebné pro práci s LCD. Nyní pojďme na hlavní funkce. První funkcí, kterou je potřeba zavolat, než začnete LCD mučit, je samozřejmě funkce inicializace displeje. Vypadá to takto: void lcd_init(nepodepsaný znak lcd_columns) Tato funkce inicializuje zobrazení a předávaný parametr musí být počet znaků v řádku. Posouváme náš program úplně dolů a před hlavní smyčkou vidíme dva řádky s následujícím obsahem: // Inicializace LCD modulu lcd_init(16); Jedná se o stejných 16 řádků, které program vybral ze seznamu generátoru kódu a nacpal jako argument do funkce. I zde, pokud jste ve svém zděšení zapomněli, že váš LCD má 8 nebo 20 znaků na řádek, pak jednoduše změňte hodnotu argumentu v této funkci. void lcd_gotoxy(unsigned char x, unsigned char y) Tato funkce, jak její název napovídá, přesune kurzor na pozici x, y. Tady X- toto je dopis. Zleva doprava od 0 do 15/19/39 (záleží na počtu písmen v řádku). A y je řetězec. Shora dolů od 0 do 0/1/3 (záleží na počtu řádků) . void lcd_putchar(char c) Tato funkce vypíše jeden znak na aktuální pozici. Příklad: lcd_putchar("A") nebo lcd_putchar(0x41) což dá stejný výsledek. To znamená, že parametrem může být buď symbol, nebo jeho kód. lcd_gotoxy(0,0); lcd_putchar("A"); lcd_gotoxy(0,1); lcd_putchar(0x41); Myslím, že komentáře jsou zde zbytečné, podívejme se na výsledek.
Další funkce. void lcd_puts(char *str) Tato funkce vytiskne řetězec umístěný v SRAM od aktuální pozice. Příklad: lcd_gotoxy(0,0); lcd_puts("ŘÁDEK"); Vidíme:
Další funkce. void lcd_putsf(char *str) Tato funkce vytiskne řetězec umístěný ve FLASH od aktuální pozice. Příklad: lcd_gotoxy(0,0); lcd_putsf("ŘÁDEK"); Vidíme:
No a funkce „Eraser“ celý tento nepořádek uzavře. void lcd_clesr(void) Zavoláním této funkce vymažete vše, co je na displeji, a kurzor se přesune úplně vlevo na horní řádek. Takto si pro začátek můžete na LCD displeji zobrazit slova a čísla pomocí připravených funkcí. Nyní si povíme, jak zobrazit hodnotu proměnných. Pro tyto účely budeme potřebovat další knihovnu. No, ti, co programovali v C na PC, by o tom měli vědět. Jmenuje se to stdio.h Dostaneme se na samotný vrchol programu a za direktivou preprocesoru #zahrnout přidávání #zahrnout V důsledku toho bude náš kód vypadat takto: // Funkce alfanumerického LCD modulu#asm .equ __lcd_port=0x12 ;PORTD #endasm #include #zahrnout Nyní se seznámíme s funkcí, která formátuje text. void printf(char flash *fmtstr [,arg1, arg2, ...]) Jak to funguje. V char flash *fmtstr je zadán formát výstupní hodnoty a argumenty arg1, arg2, ... název proměnné. Příklad. unsigned char temp = 123; printf("teplota = %05d\n", teplota); Co znamená tato abra-kadabra? První řádek vytvoří proměnnou a přiřadí jí hodnotu. Všechno je zde jasné, ale tady je to, co dělá druhý. Všechno je v pořádku. Záznam se zobrazí jako první teplota =, pak 00123 . Proč se zobrazuje? 00123 . A protože máme podmínku %05d\n který říká: 1) % - naformátujeme hodnoty prvního argumentu 2) 0 - vypíšeme n znaků, prázdné budou vyplněny nulami 3) 5 - zobrazte 5 znaků, pokud je číslo menší než 5 znaků, doplňte prázdná místa nulami. To je uvedeno v bodě 2. Číslo bude zarovnáno doprava. 4) d- zobrazit číslo v desítkovém formátu. 5) \n- Po vytištění znaku vás přinutí přejít na jiný řádek. Další funkce. void sprintf(char flash, char flash *fmtstr [,arg1, arg2, ...]) Tato funkce je pro nás nejzajímavější. Formátuje řetězec a zapisuje jej do pole. Poté můžeme pole bezpečně zobrazit na obrazovce. Jak to funguje. unsigned char temp = 123; nepodepsaný řetězec znaků; sprintf(řetězec, "temp = %05d\n", temp); lcd_puts(řetězec); Takhle to vypadá naživo.
Naučili jsme se tedy, jak zobrazit formátovaný text na LCD. Dále stručně projdu typy transformací. i d- Pro výstup celé číslo se znaménkem v desítkové soustavě u- Výstup dekadického celého čísla bez znaménka E -d.d e-d E- Chcete-li zobrazit reálná data s pohyblivou řádovou čárkou -d.d E-d F- Chcete-li zobrazit reálná data s pohyblivou řádovou čárkou -d.d X- Pro výstup v hexadecimální soustavě malými písmeny X- Pro výstup v hexadecimální soustavě velkými písmeny C- Pro výstup na symbol Pokud píšete %-05d pak znamení "-" vynutí jeho zarovnání doleva a prázdná místa nebudou vyplněna nulami. Pokud se pokusíte vytisknout číslo s pohyblivou řádovou čárkou, budete velmi překvapeni. Číslo nebude vytištěno. Je to přepadení)) Problém spočívá v nastavení kompilátoru. Aby kompilátor začal rozumět formátu plovák musíte to trochu upravit. K tomu jdeme Projekt->Konfigurovat a přejděte na kartu C kompilátor. V majetku Vlastnosti (s)printf: Vybrat plovák, šířka, přesnost. To je vše. Zkuste to, experimentujte. Pokud máte nějaké dotazy, pište na fórum. Hodně štěstí!