Both sides previous revisionPrevious revisionNext revision | Previous revision |
et:examples:display:lcd [2015/02/25 12:59] – raivo.sell | et:examples:display:lcd [2020/07/20 09:00] (current) – external edit 127.0.0.1 |
---|
~~PB~~ | <pagebreak> |
====== Ekraan ====== | ====== Ekraan ====== |
| |
//Vajalikud teadmised: [HW] [[et:hardware:homelab:lcd]], [LIB] [[et:software:homelab:library:module:lcd_alphanumeric]], [LIB] [[et:software:homelab:library:delay]], \\ [PRT] [[et:examples:timer:periodic_interrupt]]// | //Vajalikud teadmised: |
| [HW] [[et:hardware:homelab:digi]], |
| [LIB] [[et:software:homelab:library:module:lcd_alphanumeric]], [LIB] [[et:software:homelab:library:module:lcd_graphic]], \\ |
| [LIB] [[et:software:homelab:library:delay]]// |
| |
===== Teooria ===== | ===== Teooria ===== |
| |
[{{ :examples:display:lcd:lcd_element.jpg?200|Graafilise LCD element}}] | [{{ :examples:display:lcd:lcd_element.jpg?250|Graafilise LCD element}}] |
[{{ :examples:display:lcd_alphanumeric:lcd_alphanumeric_abc.png?200|Alfabeetilise LCD pikslite maatriksitest moodustatud tekst}}] | /*[{{ :examples:display:lcd_alphanumeric:lcd_alphanumeric_abc.png?200|Alfabeetilise LCD pikslite maatriksitest moodustatud tekst}}]*/ |
[{{ :examples:display:lcd_graphic:lcd_graphic_smiley.png?200|Graafilise LCD pikslitest moodustatud pilt}}] | [{{ :examples:display:lcd_graphic:lcd_graphic_smiley.png?200|Graafilise LCD pikslitest moodustatud pilt}}] |
| |
Põhiline iseloomustaja on alfabeetilise LCD juures tema segmentide paigutus. Ekraan on jagatud paljudeks indikaatoriteks. Igal indikaatoril on kas piisavalt palju segmente tähtede ja numbrite kuvamiseks või moodustub see väikeste ruudukujuliste segmentide (pikslite) maatriksist. Näiteks 5x7 pikslisest maatriksist piisab kõigi numbrite, ladina tähestiku ja täppidega tähtede kuvamiseks. Indikaatoreid on tavaliselt 1-4 rida ja 8-32 tulpa. Igal indikaatoril on väike vahe sees, täpselt nagu tekstis tähtedelgi. | Põhiline iseloomustaja on alfabeetilise LCD juures tema segmentide paigutus. Ekraan on jagatud paljudeks indikaatoriteks. Igal indikaatoril on kas piisavalt palju segmente tähtede ja numbrite kuvamiseks või moodustub see väikeste ruudukujuliste segmentide (pikslite) maatriksist. Näiteks 5x7 pikslisest maatriksist piisab kõigi numbrite, ladina tähestiku ja täppidega tähtede kuvamiseks. Indikaatoreid on tavaliselt 1-4 rida ja 8-32 tulpa. Igal indikaatoril on väike vahe sees, täpselt nagu tekstis tähtedelgi. |
| |
Alfabeetiline LCD ekraan koosneb peale ekraani enda veel ka kontrollerist, mis vastavalt sideliidesest tulevatele käskudele juhib ekraani segmente. Kontrollerisse on eelnevalt sisse programmeeritud tähekaart, kus igal tähel, numbril või märgil on oma järjekorranumber ehk indeks. Ekraanil teksti kuvamine toimub põhimõtteliselt LCD kontrollerile tähtede indekseid saates. Tegelikkuses tuleb LCD kontrolleritele ka mitmeid juhtkäske saata, enne kui midagi kuvama hakatakse. Iga konkreetse LCD ekraani kasutamiseks tuleb tutvuda enne selle andmelehega, kuna neid on väga erinevaid ning ühtlasi ka nende juhtimine toimub erinevalt. Alfabeetilised LCD ekraanid on üldjuhul passiivmaatriksiga, kus segmentide elektrivälja uuendamine toimub kordamööda. Sellest tulenevalt on passiivmaatriksiga ekraanid aeglasemad ja kehvema kontrastiga kui aktiivmaatriks-ekraanid, kus iga segmendi laengut juhib eraldi transistor. LCD ekraane on nii peegelduva taustaga kui taustvalgustusega, vahel isegi mitme erinevat värvi taustvalgustusega. Segmendi värve on alfabeetlistel LCD ekraanidel enamasti siiski üks - reeglina must, kuid esineb ka valge ja värvilise kirjaga ekraane. | Alfabeetiline LCD ekraan koosneb peale ekraani enda veel ka kontrollerist, mis vastavalt sideliidesest tulevatele käskudele juhib ekraani segmente. Kontrollerisse on eelnevalt sisse programmeeritud tähekaart, kus igal tähel, numbril või märgil on oma järjekorranumber ehk indeks. Ekraanil teksti kuvamine toimub põhimõtteliselt LCD kontrollerile tähtede indekseid saates. Tegelikkuses tuleb LCD kontrolleritele ka mitmeid juhtkäske saata, enne kui midagi kuvama hakatakse. Iga konkreetse LCD ekraani kasutamiseks tuleb tutvuda enne selle andmelehega, kuna neid on väga erinevaid ning ühtlasi ka nende juhtimine toimub erinevalt. |
| /*Alfabeetilised LCD ekraanid on üldjuhul passiivmaatriksiga, kus segmentide elektrivälja uuendamine toimub kordamööda. Sellest tulenevalt on passiivmaatriksiga ekraanid aeglasemad ja kehvema kontrastiga kui aktiivmaatriks-ekraanid, kus iga segmendi laengut juhib eraldi transistor. LCD ekraane on nii peegelduva taustaga kui taustvalgustusega, vahel isegi mitme erinevat värvi taustvalgustusega. Segmendi värve on alfabeetlistel LCD ekraanidel enamasti siiski üks - reeglina must, kuid esineb ka valge ja värvilise kirjaga ekraane. |
| */ |
| |
Graafiline LCD on vedelkristall-ekraan, millega saab peale teksti ka kujundeid kuvada. Selle ehitus sarnaneb alfabeetilisele LCD-le ja põhiline erinevus seisneb selles, et graafilisel ekraanil on kõik pikslid jaotatud üle ekraani ühe suure maatriksina. Kui tegu on monokromaatilise graafilise LCD ekraaniga, siis piksel on üks pisike ruudukujuline segment. Värvilistel ekraanidel moodustab üks piksel kolmest alampikslist, millest igaüks laseb läbi värvifiltri kas punast, rohelist või sinist valgust. Kuna alampikslid on lähestikku, paistavad need kui üks piksel. | Graafiline LCD on vedelkristall-ekraan, millega saab peale teksti ka kujundeid kuvada. Selle ehitus sarnaneb alfabeetilisele LCD-le ja põhiline erinevus seisneb selles, et graafilisel ekraanil on kõik pikslid jaotatud üle ekraani ühe suure maatriksina. Kui tegu on monokromaatilise graafilise LCD ekraaniga, siis piksel on üks pisike ruudukujuline segment. Värvilistel ekraanidel moodustab üks piksel kolmest alampikslist, millest igaüks laseb läbi värvifiltri kas punast, rohelist või sinist valgust. Kuna alampikslid on lähestikku, paistavad need kui üks piksel. |
| |
<code c> | <code c> |
// Kodulabori graafilise LCD kasutamise näide. LCD-le kuvatakse aeg programmi algusest alates. | // Kodulabori graafilise LCD kasutamise näide |
#include <stdio.h> | #include <stdio.h> |
#include <homelab/module/lcd_gfx.h> | #include <homelab/module/lcd_gfx.h> |
| |
// Lõputu tsükkel | // Lõputu tsükkel |
while (true) | while (1) { |
{ | |
// Sekundite teisendamine kellaaja kujule hh:mm:ss | // Sekundite teisendamine kellaaja kujule hh:mm:ss |
sprintf(text, "%02d:%02d:%02d", (seconds / 3600) % 24,(seconds / 60) % 60, seconds % 60); | sprintf(text, "%02d:%02d:%02d", |
| (seconds / 3600) % 24, (seconds / 60) % 60, seconds % 60); |
| |
// Kellaaja teksti kuvamine | // Kellaaja teksti kuvamine |
// Sekundi suurendamine 1 võrra | // Sekundi suurendamine 1 võrra |
seconds++; | seconds++; |
| |
// Riistvaraline paus 1000 millisekundit | // Riistvaraline paus 1000 millisekundit |
hw_delay_ms(1000); | hw_delay_ms(1000); |