Knižnica pre prácu s LCD displejmi. Práca so znakovými LCD na základe HD44780. v tomto príklade je malá chybička

Knižnica pre prácu s LCD displejmi.  Práca so znakovými LCD na základe HD44780.  v tomto príklade je malá chybička
Knižnica pre prácu s LCD displejmi. Práca so znakovými LCD na základe HD44780. v tomto príklade je malá chybička

Všeobecné informácie

Vývojová doska STM32L-Discovery má displej z tekutých kryštálov (LCD) so šiestimi 14 segmentovými znakmi, 4 dvojbodkami (dvojbodka), 4 bodkami (DP), 4 pruhmi (pruh). Všetky segmenty sú spojené do skupín COM0, COM1, COM2, COM3 po 24 segmentoch. Každá skupina má svoj vlastný samostatný „spoločný vodič“.


Na ladiacej doske je nainštalovaný mikrokontrolér STM32L152RBT6. Mikrokontrolér má zabudovaný LCD ovládač, ktorý ovláda monochromatické LCD indikátory.
LCD ovládač:

  1. Umožňuje nakonfigurovať frekvenciu aktualizácie (snímková frekvencia - frekvencia, s ktorou sa aktualizujú informácie na LCD)
  2. Podporuje statický a multiplexný režim ovládania
  3. Podporuje softvérové ​​nastavenie kontrastu
  4. Umožňuje viac úrovní riadiaceho napätia (až štyri)
  5. Používa dvojitú vyrovnávaciu pamäť, ktorá umožňuje aktualizáciu údajov v registroch LCD_RAM ​​kedykoľvek počas vykonávania programu bez narušenia integrity zobrazených informácií

pamäťové registre ovládača LCD

Mikrokontrolér STM32L152RB má špeciálne registre LCD_RAM, v ktorých uložené informácie zodpovedajú skupine segmentov COM0 - COM3. Každá skupina zodpovedá dvom 32-bitovým registrom. Tento počet registrov umožňuje mikrokontroléru ovládať LCD s väčším počtom segmentov ako sú tie, ktoré sú nainštalované na ladiacej doske.

Na ovládanie LCD so 176 segmentmi sa používajú 4 skupiny COM0 - COM3 po 44 segmentoch na ovládanie LCD s 320 segmentmi sa používa 8 skupín COM0 - COM7 po 40 segmentoch.



Vývojová doska STM32L-Discovery využíva LCD s 96 segmentmi, rozdelenými do 4 skupín COM0 - COM3 po 24 segmentoch.


LCD na vývojovej doske STM32L-Discovery je zapojené tak, že sa používajú bity S40, S41 druhých registrov LCD_RAM ​​v každej skupine a bity S0-S27 prvých registrov LCD_RAM. Aby sa znížil počet použitých registrov, informácie z bitov S40-S43 sa zapíšu do voľných bitov S28-S31 pomocou funkcie premapovania.

Blok frekvenčného deliča

Blok frekvenčného deliča (Frequency generator) umožňuje dosiahnuť na LCD rôzne snímkové frekvencie v rozsahu od 32 kHz do 1 MHz. Ako zdroj časovacieho signálu možno použiť:
  1. Externý nízkofrekvenčný generátor s frekvenciou 32 kHz (LSE. Low speed externý)
  2. Interný nízkofrekvenčný generátor s frekvenciou 37 kHz (LSI. Low speed interný)
  3. Externý RF generátor s frekvenčnými deličmi 2,4,8 a 16 a maximálnou frekvenciou 1 MHz. (HSE. Vysokorýchlostné externé)
Aby sa dosiahla presná synchronizácia a znížil sa posun jednosmerného napätia medzi segmentmi LCD, zdroj hodín musí byť stabilný. Hodinový signál LCDCLK sa odosiela do ovládača LCD. Frekvencia hodinového signálu je rozdelená podľa deliacich faktorov, ktoré sú nastavené bitmi PS, DIV registra LCD_FCR (Frame Control Register). Výsledná frekvencia na výstupe bloku frekvenčného deliča sa vypočíta podľa vzorca:

F ck_div =F LCDCLK / (2 PS *(16+DIV))

Snímková frekvencia sa vypočíta podľa vzorca:

F Rám =f ck_div *povinnosť

Kde clo je pracovný cyklus - pomer trvania impulzu k jeho perióde. Počas jednej snímky sa na LCD postupne zobrazujú informácie z registrov LCD_RAM[x], LCD_RAM ​​atď. Pri LCD inštalovanom na vývojovej doske musí v jednej snímke LCD radič vydávať informácie zo 4 skupín segmentov COM0 - COM3, preto trvanie riadiaceho impulzu pre jednu skupinu bude 1/4 trvania snímky, t.j. clo = 1/4.

LCD ovládanie

Existujú dva spôsoby ovládania LCD - režim statického ovládania a režim ovládania multiplexu. Pri statickej indikácii je každý segment bitu indikátora pripojený k výstupu mikrokontroléra. Pokiaľ ide o LCD, na ladiacej doske STM32LDiscovery je potrebných 6 * 14 = 84 kolíkov mikrokontroléra (okrem dvojbodiek, bodiek a pásikov). Vďaka použitiu takého počtu pinov bude pripojenie ďalších periférií nemožné. Mikrokontrolér STM32L152RB má 64 pinov. V režime multiplexného riadenia (dynamický režim riadenia) sa identické segmenty číslic indikátora spájajú do skupín. Informácie sa zobrazujú striedavým osvetlením segmentov číslic indikátora s frekvenciou, ktorú ľudské oko nepostrehne.

Multiplexné ovládanie umožňuje ovládať veľké množstvo segmentov. Namiesto samostatného ovládania každého prvku môžu byť adresované riadkami a stĺpcami (COM a SEG), čím sa zjednoduší riadiaci obvod, pretože každý segment nevyžaduje vlastnú riadiacu líniu. Ak chcete zapnúť vybraný segment, musí sa naň aplikovať potenciálny rozdiel COM a SEG. Príklad fungovania prvej číslice indikátora (ukazovateľ zobrazuje „1:“):


Prvá číslica indikátora v čase t 0


Prvá číslica indikátora v čase t 1


Prvá číslica indikátora v čase t 2


Všeobecná schéma pripojenia segmentov k pinom LCD


Schéma zapojenia pinov LCD k portom mikrokontroléra

Pre vedenia SEG sa používa riadiace napätie, ktorého počet úrovní je určený koeficientom predpätia. LCD na vývojovej doske používa režim multiplexného riadenia s clonou=1/4 a predpätím=1/3. Hodnoty cla a bias sa nastavujú cez register LCD_CR (Control Register) v bitoch DUTY a BIAS.

Prax

Konfigurácia portov mikrokontroléra

Ak chcete ovládať LCD, porty mikrokontroléra musia byť nakonfigurované podľa toho:
  1. K východu
  2. Používanie funkcie AF 11 Alternate
  3. Majú výstupné frekvencie do portu 400 kHz
  4. Použite prevádzkový režim push-pull
  5. Žiadne pull-up odpory
Keď port pracuje v režime alternatívnej funkcie, vyrovnávacia pamäť výstupných údajov portu je riadená signálmi prichádzajúcimi z periférneho zariadenia. Hlavičkový súbor stm32lxx.h knižnice CMSIS obsahuje popis všetkých periférnych registrov, ako aj štruktúru pre prístup k nim.

Piny LCD sú pripojené k portom GPIOA (PA1-PA3,PA8-PA10,PA15), GPIOB (PB3-PB5, PB8-PB15), GPIOC (PC0-PC3,PC6-PC11) mikrokontroléra. Aby LCD displej fungoval, musí byť do vybraných portov privedený hodinový signál. GPIO porty mikrokontroléra sú taktované zo zbernice AHB systému RCC (Reset and Clock Control) - systém hodín a resetov. Hodinový signál je dodávaný nastavením zodpovedajúcich bitov v registri RCC_AHBENR (AHB periférne hodiny umožňujúce register).

Zaregistrujte RCC_AHBENR (obrázok ukazuje prvých 15 bitov)

Pre porty GPIOA, GPIOB, GPIOC je potrebné nastaviť 1 až 0, 1, 2 bity registra.

Ďalej uvediem kód pre zápis informácie do registra pomocou bitovej masky a pomocou hexadecimálnych kódov. Používanie bitových masiek je pohodlnejšie, ale práca s hexadecimálnymi kódmi umožňuje pochopiť podstatu práce s registrami.

RCC->AHBENR |=(RCC_AHBENR_GPIOAEN|RCC_AHBENR_GPIOBEN|RCC_AHBENR_GPIOCEN); alebo RCC->AHBENR = 0x7; /* 0x7=111 */

Na označenie prevádzkových režimov portu sa používa register GPIOx_MODER (register režimu portu GPIO) (x = A..H). Všetky bity registra sú zoskupené do skupín MODERY, kde y je číslo pinu príslušného portu. Porty musia byť nakonfigurované pre režim alternatívnej funkcie, t.j. v skupine zodpovednej za pin nastavte hodnotu na 10. Pre port GPIOA musíte nakonfigurovať piny 1-3,8-10,15, teda nastaviť 1 na 3,5,7,17,19, 21,31 číslic.


Zaregistrujte GPIOx_MODER (register režimu portu GPIO)

GPIOA->MODER |= (GPIO_MODER_MODER1_1 | GPIO_MODER_MODER2_1 | GPIO_MODER_MODER3_1 | GPIO_MODER_MODER8_1 | GPIO_MODER_MODER9_1 | GPIO_MODER_MODER10_1 | GPIO_5MODER_MODER); alebo GPIOA->MODER = 0x802A00A8; /* 0x802A00A8=1000 0000 0010 1010 0000 0000 1010 1000 */
Porty mikrokontroléra musia byť prepnuté do režimu push-pull. Aby ste to dosiahli, musíte nastaviť 1 v registri GPIOx_OTYPER (register typu výstupu GPIO portu) v bitoch zodpovedných za kolíky.


Registrácia GPIOx_OTYPER (register typu výstupu portu GPIO)

GPIOA->OTYPER &= ~(GPIO_OTYPER_OT_1 | GPIO_OTYPER_OT_2 | GPIO_OTYPER_OT_3 | GPIO_OTYPER_OT_8 | GPIO_OTYPER_OT_9 | GPIO_OTYPER_OT_10 | GPIO_OTYPER_OT_15); alebo GPIOA->OTYPER &= ~0x0000870E; /* 0x870E=1000 0111 0000 1110 */
Obe možnosti ovplyvňujú vybrané kolíky. (Pre port GPIOA sú nakonfigurované kolíky 1-3,8-10,15). Ak potrebujete prepnúť všetky piny portu do režimu push-pull, môžete do registra zapísať nasledujúcu hodnotu:
GPIOA->OTYPER = 0x0;
Na určenie frekvencie výstupu informácií na port sa používa register GPIOx_OSPEEDR (register výstupnej rýchlosti portu GPIO). Všetky bity registra sú zoskupené do skupín OSPEEDRy, kde y je číslo pinu príslušného portu. V tejto práci by mala byť frekvencia nastavená na 400 kHz t.j. v skupine zodpovednej za pin nastavte hodnotu na 00.


Registrovať GPIOx_OSPEEDR (register výstupnej rýchlosti portu GPIO)

GPIOA->OSPEEDR &= ~(GPIO_OSPEEDER_OSPEEDR1 | GPIO_OSPEEDER_OSPEEDR2 | GPIO_OSPEEDER_OSPEEDR3 | GPIO_OSPEEDER_OSPEEDR8 | GPIO_OSPEEDER_OSPEEDR9 | GPRIOSPEOSPEEDR_1 GPRIOPEOSPEEDR_GPRIOPEOSPEEDR_GPRIOPEOSPEEDR alebo GPIOA->OSPEEDR &= ~0xC03F00FC; /*0xC03F00FC=1100 0000 0011 1111 0000 0000 1111 1100 */
Ak potrebujete nastaviť výstupnú frekvenciu portu na 400 kHz pre všetky piny, môžete zapísať hodnotu do registra:
GPIOA->OSPEEDR = 0x0;
Na vypnutie pull-up a pull-down rezistorov pre vybrané piny použite register GPIOx_PUPDR (pullup/pull-down register GPIO portu). Všetky bity registra sú zoskupené do skupín PUPDRy, kde y je číslo pinu príslušného portu. Ak chcete deaktivovať pull-up odpory v skupine zodpovednej za kolík, nastavte hodnotu na 00.


Zaregistrujte GPIOx_PUPDR (výsuvný/rozťahovací register GPIO portu)

GPIOA->PUPDR &= ~(GPIO_PUPDR_PUPDR1 | GPIO_PUPDR_PUPDR2 | GPIO_PUPDR_PUPDR3 | GPIO_PUPDR_PUPDR8 | GPIO_PUPDR_PUPDR9 | GPIO_PUPDR_PUPDR10 | GPOPIO_PUPDR3); alebo GPIOA->PUPDR &= ~0xC03F00FC; /*0xC03F00FC=1100 0000 0011 1111 0000 0000 1111 1100 */
Ak potrebujete deaktivovať pull-up rezistory pre všetky piny, môžete zapísať hodnotu do registra:
GPIOA->PUPDR = 0x0;
Ak chcete použiť alternatívnu funkciu pre porty mikrokontroléra, dva registre GPIOx_AFRL (dolný register alternatívnej funkcie GPIO), zodpovedné za nízke kolíky (0 až 7) a GPIOx_AFRH (vysoký register alternatívnej funkcie GPIO), zodpovedné za vysoké kolíky (8 až 15) , sa používajú. Všetky bity registra sú zoskupené do skupín AFRLy a AFRHy, kde y je číslo pinu príslušného portu. Porty musia byť nakonfigurované tak, aby používali alternatívnu funkciu AF11, na to musí byť skupina zodpovedná za pin nastavená na 1011.


Register GPIOx_AFRL (dolný register alternatívnej funkcie GPIO)


Register GPIOx_AFRH (horný register alternatívnej funkcie GPIO)

Aby ste to dosiahli, musíte do registrov zapísať nasledujúce hodnoty:
GPIOA->AFR = 0xBBB0; /* 0xBBB0 = 1011 1011 1011 0000*/ GPIOA->AFR = 0xB0000BBB; /* 0xB0000BBB=1011 0000 0000 0000 0000 1011 1011 1011*/

AFR = 0xBBB0 – zapíše hodnotu do registra GPIOx_AFRL.
AFR = 0xB0000BBB – zapíše hodnotu do registra GPIOx_AFRH.

Nastavenia zodpovedajúcich pinov portov GPIOB a GPIOC sa vykonávajú rovnakým spôsobom.

Nastavenie ovládača LCD

Pri práci s LCD ovládačom, podobne ako pri iných perifériách, musí byť doň privádzaný hodinový signál. Hodinový signál je dodávaný aj do systému správy napájania. Riadiaca jednotka a systém správy napájania využívajú na taktovanie zbernicu APB1. Ak chcete povoliť taktovanie v registri RCC_APB1ENR (registre povolenia periférnych hodín APB1), musíte nastaviť 1 v bitoch 9 a 28.


Registrovať RCC_APB1ENR (register povolenia periférnych hodín APB1)

RCC->APB1ENR |= RCC_APB1ENR_PWREN|RCC_APB1ENR_LCDEN; alebo RCC->APB1ENR |= 0x10000200; /* 0x10000200=1 0000 0000 0000 0000 0010 0000 0000 */
Aby LCD ovládač fungoval, je potrebné špecifikovať zdroj hodinových signálov. Zdroj je špecifikovaný v registri RCC_CSR. Štandardne je zápis do tohto registra zakázaný. Ochrana proti zápisu v registri RCC_CSR je odstránená v registri riadenia výkonu PWR_CR. Register RCC_CSR riadi zdroje hodín regulátora RTC a LCD
Zápis do registra RCC_CSR je povolený nastavením bitu 8 registra PWR_CR na 1.


Register PWR_CR (register riadenia výkonu PWR)

PWR->CR |= PWR_CR_DBP; alebo PWR->CR |= 0x100; /* 0x100 = 1 000 0000 */
Ak chcete zmeniť zdroj hodín ovládača LCD (a tiež hodín RTC), musíte najskôr resetovať zdroj hodín nastavením bitu RTCRST (nastavenie 1 až bit 23) v registri RCC_CSR (riadiaci/stavový register).


Registrovať RCC_CSR (kontrolný/stavový register)

RCC->CSR |= RCC_CSR_RTCRST;
Alebo zapísaním hodnoty do registra pomocou operátora „|=“, pretože hodnota podľa
predvolený register sa líši od 0x0:
RCC->CSR |= 0x800000; /* 0x800000 = 1 000 0000 0000 0000 0000 0000 */
Ak chcete vybrať nový zdroj hodín, musíte odstrániť bit RTCRST:
RCC->CSR &= ~RCC_CSR_RTCRST; alebo RCC->CSR &= ~0x800000;
Ako zdroj hodinového signálu je zvolený externý nízkofrekvenčný generátor. Na zapnutie generátora v registri RCC_CSR je potrebné nastaviť bit LSEON (nastaviť 1 až 8 bit):
RCC->CSR |= RCC_CSR_LSEON; alebo RCC->CSR |= 0x100; /* 0x100 = 1 000 0000 */
Po zapnutí generátora trvá určitý čas, kým sa stabilizuje. Pripravenosť generátora sa kontroluje hardvérovým nastavením bitu LSERDY v registri RCC_CSR:
while(!(RCC->CSR&RCC_CSR_LSERDY));
Výber externého nízkofrekvenčného generátora ako zdroja hodín sa vykonáva nastavením registra RCC_CSR na 01 v skupine RTCSEL:
RCC->CSR |= RCC_CSR_RTCSEL_LSE; alebo RCC->CSR |= 0x10000; /* 0x10000 = 01 0000 0000 0000 0000 */
V ovládači LCD musíte nastaviť požadovaný režim predpätia. Na to je potrebné v registri LCD_CR (riadiaci register LCD) nastaviť hodnotu 10 v skupine BIAS. Pred inštaláciou bitov je potrebné vyčistiť kusy od „odpadkov“.


Register LCD_CR (riadiaci register LCD)

Obnoviť bity:
LCD->CR &= ~LCD_CR_BIAS; alebo LCD->CR &= ~0x60;
Výber režimu skreslenia = 1/3 pomocou bitovej masky:
LCD->CR |= LCD_CR_BIAS_1; alebo LCD->CR |= 0x40;
Nastavte režim prevádzky = 1/4. Aby sme to urobili, najprv resetujeme všetky bity:
LCD->CR &=~LCD_CR_DUTY; alebo LCD->CR &= ~0x1C;
Nastavte hodnotu 011 do skupiny DUTY registra LCD_CR pre
režimová prevádzka = 1/4:
LCD->CR |= LCD_CR_DUTY_0|LCD_CR_DUTY_1; alebo LCD->CR |= 0xС;
Aktivujeme funkciu opätovného priradenia pinov. Za týmto účelom nastavte 1 až 7 bitov registra LCD_CR:
LCD->CR |= LCD_CR_MUX_SEG; alebo LCD->CR |= 0x80;
Nastavíme hodnoty frekvenčných deliacich koeficientov hodinového signálu LCDCLK. Hodnoty koeficientov sa nastavujú v registri LCD_FCR (LCD frame control register). Najprv tiež vymažeme všetky bity a potom nastavíme potrebné.


Register LCD_FCR (register riadenia rámca LCD)

LCD->FCR &= ~LCD_FCR_PS; LCD->FCR &= ~LCD_FCR_DIV; alebo LCD->FCR &= ~0x3C00000; LCD->FCR &= ~0x3C0000;
Hodnoty koeficientov delenia frekvencie hodinového signálu sú nastavené na ck_ps = LCDCLK/16, ck_div = ck_ps/17. Ak to chcete urobiť, nastavte 1 až 24 a 18 číslic:
LCD->FCR |= 0x1040000; /*0x1040000 = 1 0000 0100 0000 0000 0000 0000*/
Ak chcete nastaviť požadovanú úroveň kontrastu, musíte v skupine CC nastaviť hodnotu 010 a tiež najprv vymazať bity zo starých hodnôt:
LCD->FCR &= ~LCD_FCR_CC; LCD->FCR |= LCD_FCR_CC_1; alebo LCD->FCR &= ~0x1C00; LCD->FCR |= 0x800; /*0x800 = 1000 0000 0000*/
Po nastavení všetkých hodnôt nejaký čas trvá synchronizácia registra LCD_FCR. Synchronizácia registra sa kontroluje hardvérovým nastavením bitu FCRSF v registri LCD_SR (stavový register LCD).

Registrovať LCD_SR (stavový register LCD)

Kým(!(LCD->SR&LCD_SR_FCRSR));
Ako zdroj napätia pre LCD zvolíme interný step-up prevodník na vytvorenie V lcd. Na tento účel je prvý bit registra LCD_CR (riadiaci register LCD) nastavený na 0:
LCD->CR &= ~LCD_CR_VSEL; alebo LCD->CR &= ~0x2;
Ovládač LCD sa aktivuje nastavením registra LCD_CR (riadiaci register LCD) na 0:
LCD->CR |= LCD_CR_LCDEN; alebo LCD->CR |= 0x1;
Po inštalácii interného zvyšovacieho meniča ako zdroja napätia je potrebné počkať, kým bude pripravený. Pripravenosť sa kontroluje hardvérovým nastavením bitu RDY v registri LCD_SR (stavový register LCD):
while(!(LCD->SR&LCD_SR_RDY));
Po povolení prevádzky ovládača LCD musíte počkať, kým nebude pripravený. Pripravenosť sa kontroluje hardvérovým nastavením bitu ENS v registri LCD_SR (stavový register LCD):
while(!(LCD->SR&LCD_SR_ENS));

Vytvorenie obrazu na LCD

Všetky segmenty indikátorov sú spojené do skupín COM0 - COM3 s 24 segmentmi (SEG0-SEG23). Informácie o segmentoch sú uložené v registroch LCD_RAM ​​v pamäti ovládača LCD. Rozloženie dosky plošných spojov je také, že čísla segmentov nezodpovedajú číslicovým číslam registrov LCD_RAM ​​​​.

Ak chcete zobraziť 1 na prvej číslici LCD, musíte rozsvietiť segmenty 1B, 1C. Segment 1B patrí do skupiny COM0, segment 1C patrí do skupiny COM1. Informácie o nich sa preto musia zapisovať do registrov RAM (LCD_RAM0), RAM (LCD_RAM2), resp. Segment 1B je zodpovedný za LCD výstup LCDSEG22, o ktorom je informácia uložená v SEG40 bite registra RAM (LCD_RAM1). Pomocou funkcie premapovania bude segment LCDSEG22 priradený bitu SEG28 registra RAM (LCD_RAM0). Segment 1C je zodpovedný za výstup LCD LCDSEG1, o ktorom je informácia uložená v bite SEG1 registra RAM (LCD_RAM2).

LCD->RAM= 0x10000000; /*0x10000000 = 1 0000 0000 0000 0000 0000 0000 0000 */ LCD->RAM = 0x2; /*0x2= 10 */
Pred zápisom hodnôt do pamäťových registrov je potrebné skontrolovať, či bol ukončený predchádzajúci prenos dát na LCD. Za týmto účelom sa kontroluje bit UDR (Update display request) registra LCD_SR (LCD status register). LCD ovládač má dve výstupné vyrovnávacie pamäte, informácie sa zadávajú do prvej vyrovnávacej pamäte a na LCD sa odosielajú z druhej vyrovnávacej pamäte. Bit UDR sa nastavuje počas prenosu z prvej vyrovnávacej pamäte do druhej, čím chráni registre LCD_RAM ​​pred zápisom:
while(LCD->SR & LCD_SR_UDR);
Po zapísaní informácií do registrov LCD_RAM ​​​​je potrebné nastaviť bit UDR v registri LCD_SR (stavový register LCD) (nastaviť 1 až 2 bity):
LCD->SR |= LCD_SR_UDR; alebo LCD->SR |= 0x4; /*0x4 = 100 */

Čitateľ nášho blogu Michail ( mishadesh) vytvorila vynikajúcu knižnicu na prácu s LCD a navrhol napísať článok, aby demonštroval svoje schopnosti. Vlastne, presne o tom dnes bude reč 😉 Pozrime sa, aké funkcie sú implementované a na konci článku bude príklad práce s displejom.

Ako obvykle, začnime diskusiou o hardvéri... Ale naozaj nie je o čom. Rovnako ako v prvom článku o práci s displejmi () použijeme vývojovú dosku Mini STM32. Vlastne pripojenie displeja, základné príkazy na zaznamenávanie údajov, postupnosť inštrukcií na inicializáciu - to všetko je tam =) Preto teraz poďme priamo k diskusii o knižnici pre prácu s grafickými displejmi.

Tu je úplný zoznam funkcií s vysvetleniami:

Ďalšia funkcia, ako už jej názov napovedá, mení orientáciu obrazovky. Možné sú dve polohy obrazovky, respektíve dve možné hodnoty parametrov orientácia:

  • Orientácia_Portrét
  • Orientačný_Album

Funkcia vykreslí symbol na grafickom displeji, umiestni ho podľa súradníc odovzdaných funkcii a tiež nastaví jeho farbu. Štýl znakov zodpovedá písmu definovanému v súbore font.c(súbor je súčasťou knižnice).

Z funkcie LCD_DrawChar() Nasledujúca funkcia prebieha hladko:

void LCD_DrawString(char * s, uint16_t x, uint16_t y, uint16_t farba, uint16_t backColor, uint8_t je Transparentna) ;

Tu je to bez ďalších okolkov jasné 😉 Funkcia sa tlačí ďalej LCD riadok textu. Základom tejto funkcie je predchádzajúca - LCD_DrawChar().

Okrem symbolov a textu musíte samozrejme vedieť nakresliť aj základné grafické primitívy, ako je čiara alebo kruh. Na tento účel bolo implementované nasledovné:

void LCD_drawLine (int x1, int y1, int x2, int y2, uint16_t farba) ; void LCD_DrawRect ( int x1, int y1, int x2, int y2, uint16_t farba, uint8_t vyplnené ) ; void LCD_DrawEllipse(uint16_t X1, uint16_t Y1, uint16_t R, farba uint16_t) ;

Ak chcete nakresliť čiaru, musíte funkcii odovzdať súradnice začiatočného bodu, súradnice koncového bodu a požadovanú farbu. Pre obdĺžnik - súradnice ľavého horného rohu a súradnice pravého dolného rohu (!). Posledný parameter naplnené– určuje, či má byť tvar vyplnený. Jedna znamená áno, postava bude namaľovaná zvolenou farbou, nula znamená, že sa nakreslí iba obrys postavy. To je jasné) Zostáva len kruh – funkcia DrawEllipse(). Tu namiesto súradníc začiatku a konca (horné/dolné rohy) odovzdávame ako argumenty stred kruhu a polomer.

A na záver ešte jedna funkcia:

void LCD_FillScr(uint16_t farba) ;

Funkcia umožňuje vyplniť obrazovku plnou farbou.

Všetky uvedené funkcie sú implementované v súbore GUI_DRV.c.

Okrem nich knižnica obsahuje funkcie pre zápis údajov na displej ( LCD_DRIVER.c) ako aj už spomínané fonty ( font.c). Ako vidíte, všetko je prehľadne roztriedené do rôznych súborov, takže v princípe je všetko veľmi prehľadné, prejdime teda na praktický príklad!

Poďme zistiť! Poďme k súboru main.c... nebudem uvádzať kompletný kód funkcií na inicializáciu periférií a displeja toto všetko je možné si pozrieť priamo v súbore, prípadne v predchádzajúcom článku, na ktorý bol odkaz na začiatku tohto článku 😉 Funkcia; Hlavná():

int main(void) ( initPeriph() ; initFSMC() ; initLCD() ; delay(10000 ) ; LCD_FillScr(0xFFFF ) ; delay(100) ; LCD_SetOrient(Orientation_Album) ; delay(100 ) ; LCD_Draw "Knižnica pre LGDP4532", 30 , 30 , 0x888F , 0x0000 , 0 ); LCD_DrawRect(100, 100, 200, 200, 0x0000, 0); LCD_DrawRect(120, 120, 180, 180, 0xFF00, 1); LCD_DrawEllipse(150, 150, 50, 0xF000); zatiaľ čo (1) ())

Začneme inicializáciou, natrieme obrazovku bielou farbou a nastavíme orientáciu obrazovky na šírku. A teraz prejdeme na kreslenie grafiky)

Na obrazovke zobrazíme čiaru, ako aj dva obdĺžniky a kruh. Výsledok je jasný:

Očividne všetko funguje skvele 😉

Takže tu pre dnešok končíme, veľká vďaka Michailovi za vykonanú prácu a poskytnuté materiály. Tu sú kontakty na autora knižnice:

Skype - mishadesh

Mail – [e-mail chránený]

To je všetko, ďakujem za pozornosť, uvidíme sa čoskoro!

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 napájaniu mínus.

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

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 predá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. Aby sme to urobili, preblikneme 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 zo súboru Test09.c odobrali všetky funkcie pre prácu s displejom, vytvoríme 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žšia cena medzi nematikami robí ich použitie v prenosných autonómnych zariadeniach výhodným).

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). Chýbať môže aj symbol.
  • 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 zakó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 v 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 vo forme 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

Je potrebné dávať pozor na polaritu pripojenia napájania k LCD indikátoru a tiež sa uistiť, že napájacie napätie je v rozsahu +4,5...5,5 V. Nepozornosť v týchto bodoch 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?