Biblioteka za rad sa LCD ekranima. Rad sa karakternim LCD ekranima zasnovanim na HD44780. postoji mali nedostatak u ovom primjeru

Biblioteka za rad sa LCD ekranima.  Rad sa karakternim LCD ekranima zasnovanim na HD44780.  postoji mali nedostatak u ovom primjeru
Biblioteka za rad sa LCD ekranima. Rad sa karakternim LCD ekranima zasnovanim na HD44780. postoji mali nedostatak u ovom primjeru

Opće informacije

STM32L-Discovery razvojna ploča ima displej sa tečnim kristalima (LCD) sa šest znakova od 14 segmenata, 4 dvotočka (Colon), 4 tačke (DP), 4 trake (Bar). Svi segmenti su kombinovani u grupe COM0, COM1, COM2, COM3 od 24 segmenta. Svaka grupa ima svoju zasebnu „zajedničku žicu“.


Mikrokontroler STM32L152RBT6 je instaliran na ploči za otklanjanje grešaka. Mikrokontroler ima ugrađen LCD kontroler koji upravlja monohromatskim LCD indikatorima.
LCD kontroler:

  1. Omogućava vam da konfigurirate učestalost ažuriranja (frejmova - frekvencija kojom se ažuriraju informacije na LCD-u)
  2. Podržava statički i multipleks način upravljanja
  3. Podržava softversko podešavanje kontrasta
  4. Omogućava više nivoa upravljačkog napona (do četiri)
  5. Koristi dvostruko baferovanje, omogućavajući da se podaci u LCD_RAM ​​registrima ažuriraju u bilo kom trenutku tokom izvršavanja programa bez narušavanja integriteta prikazanih informacija

Memorijski registri LCD kontrolera

Mikrokontroler STM32L152RB ima posebne LCD_RAM ​​registre, pohranjene informacije u kojima odgovaraju grupi segmenata COM0 - COM3. Svaka grupa odgovara dva 32-bitna registra. Ovaj broj registara omogućava mikrokontroleru da kontroliše LCD sa većim brojem segmenata od onih koji su instalirani na ploči za otklanjanje grešaka.

Za kontrolu LCD-a sa 176 segmenata koriste se 4 grupe COM0 - COM3 od po 44 segmenta; za upravljanje LCD-om sa 320 segmenata koristi se 8 grupa COM0 - COM7 od po 40 segmenata.



STM32L-Discovery razvojna ploča koristi LCD sa 96 segmenata, podijeljenih u 4 grupe COM0 - COM3 od po 24 segmenta.


LCD na razvojnoj ploči STM32L-Discovery je povezan na način da se koriste bitovi S40, S41 drugog LCD_RAM ​​registra u svakoj grupi i bitovi S0-S27 prvog LCD_RAM ​​registra. Kako bi se smanjio broj korištenih registara, informacije iz bitova S40-S43 će biti zapisane u slobodne bitove S28-S31 korištenjem funkcije ponovnog preslikavanja.

Blok razdjelnika frekvencije

Blok razdjelnika frekvencije (Frequency generator) vam omogućava da postignete različite brzine kadrova na LCD-u u rasponu od 32 kHz do 1 MHz. Sljedeće se može koristiti kao izvor tajming signala:
  1. Vanjski niskofrekventni generator sa frekvencijom od 32 kHz (LSE. Low speed external)
  2. Interni generator niske frekvencije sa frekvencijom od 37 kHz (LSI. Interna mala brzina)
  3. Eksterni RF generator sa djeliteljima frekvencije 2,4,8 i 16 i maksimalnom frekvencijom od 1 MHz. (HSE. Eksterna velika brzina)
Da bi se postigla precizna sinhronizacija i smanjio pomak istosmjernog napona na LCD segmentima, izvor takta mora biti stabilan. LCDCLK signal sata se šalje LCD kontroleru. Frekvencija taktnog signala je podijeljena prema faktorima podjele koji su postavljeni PS, DIV bitovima LCD_FCR (Frame Control Register) registra. Rezultirajuća frekvencija na izlazu bloka djelitelja frekvencije izračunava se po formuli:

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

Brzina kadrova se izračunava pomoću formule:

F Okvir =f ck_div *dužnost

Gdje je radni ciklus radni ciklus - omjer trajanja impulsa i njegovog perioda. Tokom jednog kadra, informacije iz LCD_RAM[x], LCD_RAM ​​itd. registara se uzastopno prikazuju na LCD-u. Za LCD koji je instaliran na razvojnoj ploči, u jednom okviru LCD kontroler mora emitovati informacije iz 4 grupe segmenata COM0 - COM3, stoga će trajanje kontrolnog impulsa za jednu grupu biti 1/4 trajanja okvira, tj. duty=1/4.

LCD kontrola

Postoje dva načina za kontrolu LCD-a - statički način kontrole i multipleksni način upravljanja. Sa statičkom indikacijom, svaki segment indikatorskog bita je povezan sa izlazom mikrokontrolera. U odnosu na LCD, na STM32LDiscovery ploči za otklanjanje grešaka, potrebno je 6 * 14 = 84 pinova mikrokontrolera (isključujući dvotočke, tačke i trake). Zbog korištenja ovolikog broja pinova, povezivanje drugih perifernih uređaja će postati nemoguće. STM32L152RB mikrokontroler ima 64 pina. U multipleksnom načinu upravljanja (dinamički način upravljanja), identični segmenti indikatorskih cifara se kombinuju u grupe. Informacija se prikazuje zbog naizmjeničnog osvjetljenja segmenata indikatorskih cifara, sa frekvencijom koja nije vidljiva ljudskom oku.

Multipleks kontrola vam omogućava da kontrolišete veliki broj segmenata. Umjesto zasebnog upravljanja svakim elementom, oni se mogu adresirati po redovima i stupcima (COM i SEG), čime se pojednostavljuje upravljački krug, jer svaki segment ne zahtijeva vlastitu kontrolnu liniju. Da biste uključili odabrani segment, na njega se moraju primijeniti razlike potencijala COM i SEG. Primjer rada prve znamenke indikatora (indikator prikazuje "1:"):


Prva cifra indikatora u trenutku t 0


Prva cifra indikatora u trenutku t 1


Prva cifra indikatora u trenutku t 2


Opšti dijagram povezivanja segmenata na LCD pinove


Dijagram povezivanja LCD pinova na portove mikrokontrolera

Za SEG vodove koristi se upravljački napon, čiji je broj nivoa određen koeficijentom prednapona. LCD na razvojnoj ploči koristi višestruki način upravljanja sa duty=1/4 i bias=1/3. Duty i bias vrijednosti se postavljaju preko LCD_CR (Control Register) registra u DUTY i BIAS bitovima.

Vježbajte

Konfigurisanje portova mikrokontrolera

Za kontrolu LCD-a, portovi mikrokontrolera moraju biti konfigurirani na odgovarajući način:
  1. Do izlaza
  2. Korišćenje funkcije AF 11 Alternate
  3. Imati izlazne frekvencije na portu od 400 kHz
  4. Koristite način rada push-pull
  5. Nema pull-up otpornika
Kada port radi u alternativnom funkcijskom modu, izlazni bafer podataka porta kontrolira se signalima koji dolaze s periferije. Datoteka zaglavlja stm32lxx.h CMSIS biblioteke sadrži opis svih perifernih registara, kao i strukturu za pristup njima.

LCD pinovi su povezani na GPIOA (PA1-PA3,PA8-PA10,PA15), GPIOB (PB3-PB5, PB8-PB15), GPIOC (PC0-PC3,PC6-PC11) portove mikrokontrolera. Da bi LCD radio, signal sata mora biti dostavljen na odabrane portove. GPIO portovi mikrokontrolera se taktiraju sa AHB magistrale RCC (Reset and Clock Control) sistema - sistema takta i resetovanja. Signal takta se isporučuje postavljanjem odgovarajućih bitova u registru RCC_AHBENR (registrator za omogućavanje perifernog sata AHB).

Registrirajte RCC_AHBENR (slika prikazuje prvih 15 bitova)

Za GPIOA, GPIOB, GPIOC portove morate postaviti 1 na 0, 1, 2 bita registra.

Zatim ću dati kod za pisanje informacija u registar koristeći bitmasku i heksadecimalne kodove. Korištenje bitmaski je praktičnije, ali rad sa heksadecimalnim kodovima omogućava vam da shvatite suštinu rada s registrima.

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

Za označavanje načina rada porta koristi se registar GPIOx_MODER (registar režima GPIO porta) (x = A..H). Svi bitovi registra su grupisani u MODERy grupe, gdje je y pin broj odgovarajućeg porta. Portovi moraju biti konfigurirani za alternativni način rada, tj. u grupi odgovornoj za pin postavite vrijednost na 10. Za GPIOA port morate konfigurirati pinove 1-3,8-10,15, odnosno postaviti 1 na 3,5,7,17,19, 21,31 cifra.


Registrirajte GPIOx_MODER (registar načina rada GPIO porta)

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_MODER_1_); ili GPIOA->MODER = 0x802A00A8; /* 0x802A00A8=1000 0000 0010 1010 0000 0000 1010 1000 */
Portovi mikrokontrolera moraju biti prebačeni u push-pull mod. Da biste to učinili, potrebno je postaviti 1 u GPIOx_OTYPER registru (GPIO port izlazni registar) u bitovima odgovornim za pinove.


Registrirajte GPIOx_OTYPER (registar tipa izlaza GPIO porta)

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); ili GPIOA->OTYPER &= ~0x0000870E; /* 0x870E=1000 0111 0000 1110 */
Obje opcije utiču na odabrane igle. (Za GPIOA port, pinovi 1-3.8-10.15 su konfigurisani). Ako trebate prebaciti sve pinove porta u push-pull način rada, možete upisati sljedeću vrijednost u registar:
GPIOA->OTYPER = 0x0;
Za specificiranje frekvencije izlaza informacija na port, koristi se registar GPIOx_OSPEEDR (GPIO izlazni registar brzine porta). Svi bitovi registra su grupirani u grupe OSPEEDRy, gdje je y pin broj odgovarajućeg porta. U ovom radu frekvenciju treba postaviti na 400 kHz tj. u grupi odgovornoj za pin, postavite vrijednost na 00.


Registrirajte GPIOx_OSPEEDR (registar izlazne brzine GPIO porta)

GPIOA->OSPEEDR &= ~(GPIO_OSPEEDER_OSPEEDR1 | GPIO_OSPEEDER_OSPEEDR2 | GPIO_OSPEEDER_OSPEEDR3 | GPIO_OSPEEDER_OSPEEDR8 | GPIO_OSPEEDER_OSPEEDR9 | GPEEDRIO_OSPEEEDROSPE10); ili GPIOA->OSPEEDR &= ~0xC03F00FC; /*0xC03F00FC=1100 0000 0011 1111 0000 0000 1111 1100 */
Ako trebate podesiti izlaznu frekvenciju na portu na 400 kHz za sve pinove, možete upisati vrijednost u registar:
GPIOA->OSPEDR = 0x0;
Da biste onemogućili pull-up i pull-down otpornike za odabrane pinove, koristite GPIOx_PUPDR registar (GPIO port pullup/pull-down registar). Svi bitovi registra su grupisani u PUPDRy grupe, gdje je y pin broj odgovarajućeg porta. Da biste onemogućili pull-up otpornike u grupi odgovornoj za pin, postavite vrijednost na 00.


Registrirajte GPIOx_PUPDR (povlačenje/povlačenje GPIO porta)

GPIOA->PUPDR &= ~(GPIO_PUPDR_PUPDR1 | GPIO_PUPDR_PUPDR2 | GPIO_PUPDR_PUPDR3 | GPIO_PUPDR_PUPDR8 | GPIO_PUPDR_PUPDR9 | GPIO_PUPDR_PUPDR10 | GPIO_PUPDR_PUPDR15); ili GPIOA->PUPDR &= ~0xC03F00FC; /*0xC03F00FC=1100 0000 0011 1111 0000 0000 1111 1100 */
Ako trebate onemogućiti pull-up otpornike za sve pinove, možete upisati vrijednost u registar:
GPIOA->PUPDR = 0x0;
Za korištenje alternativne funkcije za portove mikrokontrolera, dva registra GPIOx_AFRL (GPIO alternativna funkcija niskog registra), odgovorna za niske pinove (0 do 7) i GPIOx_AFRH (GPIO alternativna funkcija visokog registra), odgovorna za visoke pinove (8 do 15) , koriste se. Svi bitovi registra su grupirani u grupe AFRLy i AFRHy, gdje je y pin broj odgovarajućeg porta. Portovi moraju biti konfigurisani da koriste alternativnu funkciju AF11, za to grupa odgovorna za pin mora biti postavljena na 1011.


Registrirajte GPIOx_AFRL (GPIO alternativna funkcija niskog registra)


Registrirajte GPIOx_AFRH (GPIO alternativna funkcija visokog registra)

Da biste to učinili, morate upisati sljedeće vrijednosti u registre:
GPIOA->AFR = 0xBBB0; /* 0xBBB0 = 1011 1011 1011 0000*/ GPIOA->AFR = 0xB0000BBB; /* 0xB0000BBB=1011 0000 0000 0000 0000 1011 1011 1011*/

AFR = 0xBBB0 – upisuje vrijednost u registar GPIOx_AFRL.
AFR = 0xB0000BBB – upisuje vrijednost u registar GPIOx_AFRH.

Postavke za odgovarajuće pinove GPIOB i GPIOC portova se vrše na isti način.

Podešavanje LCD kontrolera

Prilikom rada sa LCD kontrolerom, kao i sa drugim perifernim uređajima, na njega mora biti dostavljen taktni signal. Signal sata se takođe dovodi u sistem za upravljanje napajanjem. Kontroler i sistem za upravljanje napajanjem koriste APB1 sabirnicu za taktiranje. Da biste omogućili taktiranje u registru RCC_APB1ENR (APB1 registar omogućavanja perifernog sata), morate postaviti 1 u bitovima 9 i 28.


Registrirajte RCC_APB1ENR (registrator za omogućavanje perifernog sata APB1)

RCC->APB1ENR |= RCC_APB1ENR_PWREN|RCC_APB1ENR_LCDEN; ili RCC->APB1ENR |= 0x10000200; /* 0x10000200=1 0000 0000 0000 0000 0010 0000 0000 */
Da bi LCD kontroler radio, potrebno je odrediti izvor signala sata. Izvor je specificiran u registru RCC_CSR. Podrazumevano, upisivanje u ovaj registar je onemogućeno. Zaštita od pisanja u registru RCC_CSR uklanja se u registru kontrole snage PWR_CR. Registar RCC_CSR kontrolira izvore takta RTC i LCD kontrolera
Upisivanje u registar RCC_CSR je omogućeno postavljanjem bita 8 registra PWR_CR na 1.


Registar PWR_CR (PWR registar kontrole snage)

PWR->CR |= PWR_CR_DBP; ili PWR->CR |= 0x100; /* 0x100 =1 0000 0000 */
Da biste promijenili izvor takta LCD kontrolera (i RTC takta), prvo morate resetirati izvor takta postavljanjem RTCRST bita (podešavanje 1 na bit 23) u registru RCC_CSR (Registar kontrole/statusa).


Registrirajte RCC_CSR (Registar kontrole/statusa)

RCC->CSR |= RCC_CSR_RTCRST;
Ili upisivanjem vrijednosti u registar pomoću operatora “|=”, jer vrijednost po
zadani registar se razlikuje od 0x0:
RCC->CSR |= 0x800000; /* 0x800000 = 1000 0000 0000 0000 0000 0000 */
Da biste odabrali novi izvor sata, morate ukloniti RTCRST bit:
RCC->CSR &= ~RCC_CSR_RTCRST; ili RCC->CSR &= ~0x800000;
Kao izvor taktnog signala odabran je eksterni generator niske frekvencije. Da biste uključili generator u registru RCC_CSR, morate postaviti LSEON bit (postaviti od 1 do 8 bita):
RCC->CSR |= RCC_CSR_LSEON; ili RCC->CSR |= 0x100; /* 0x100 = 1 0000 0000 */
Nakon uključivanja generatora, potrebno je neko vrijeme da se stabilizira. Spremnost generatora se provjerava hardverskim postavljanjem bita LSERDY u registru RCC_CSR:
while(!(RCC->CSR&RCC_CSR_LSERDY));
Odabir vanjskog generatora niske frekvencije kao izvora takta vrši se postavljanjem registra RCC_CSR na 01 u RTCSEL grupi:
RCC->CSR |= RCC_CSR_RTCSEL_LSE; ili RCC->CSR |= 0x10000; /* 0x10000 = 01 0000 0000 0000 0000 */
Morate podesiti željeni mod bias u LCD kontroleru. Da biste to učinili, u registru LCD_CR (LCD kontrolni registar) trebate postaviti vrijednost 10 u BIAS grupi. Prije instaliranja bitova, potrebno je očistiti bitove od “smeća”.


Registar LCD_CR (LCD kontrolni registar)

Reset bitovi:
LCD->CR &= ~LCD_CR_BIAS; ili LCD->CR &= ~0x60;
Odabir načina rada bias=1/3 koristeći bitmask:
LCD->CR |= LCD_CR_BIAS_1; ili LCD->CR |= 0x40;
Postavite način rada=1/4. Da bismo to učinili, prvo resetujemo sve bitove:
LCD->CR &=~LCD_CR_DUTY; ili LCD->CR &= ~0x1C;
Postavite vrijednost 011 na DUTY grupu registra LCD_CR za
mod duty=1/4:
LCD->CR |= LCD_CR_DUTY_0|LCD_CR_DUTY_1; ili LCD->CR |= 0xS;
Aktiviramo funkciju preraspodjele pinova. Da biste to učinili, postavite 1 do 7 bitova LCD_CR registra:
LCD->CR |= LCD_CR_MUX_SEG; ili LCD->CR |= 0x80;
Postavljamo vrijednosti koeficijenata frekvencijske podjele LCDCLK taktnog signala. Vrijednosti koeficijenta se postavljaju u LCD_FCR registru (LCD okvir kontrole registra). Prvo također brišemo sve bitove, a zatim postavljamo potrebne.


Registar LCD_FCR (kontrolni registar LCD okvira)

LCD->FCR &= ~LCD_FCR_PS; LCD->FCR &= ~LCD_FCR_DIV; ili LCD->FCR &= ~0x3C00000; LCD->FCR &= ~0x3C0000;
Vrijednosti koeficijenata podjele frekvencije satnog signala postavljene su jednake ck_ps = LCDCLK/16, ck_div = ck_ps/17. Da biste to učinili, postavite 1 na 24 i 18 cifara:
LCD->FCR |= 0x1040000; /*0x1040000 = 1 0000 0100 0000 0000 0000 0000*/
Da biste postavili željeni nivo kontrasta, morate postaviti vrijednost 010 u CC grupi, također prvo obrisati bitove iz starih vrijednosti:
LCD->FCR &= ~LCD_FCR_CC; LCD->FCR |= LCD_FCR_CC_1; ili LCD->FCR &= ~0x1C00; LCD->FCR |= 0x800; /*0x800 = 1000 0000 0000*/
Nakon postavljanja svih vrijednosti, potrebno je neko vrijeme da se sinkronizira LCD_FCR registar. Sinhronizacija registra se provjerava postavljanjem FCRSF bita u hardveru u LCD_SR (LCD statusni registar) registru.

Registar LCD_SR (LCD statusni registar)

Dok(!(LCD->SR&LCD_SR_FCRSR));
Kao izvor napona za LCD, biramo interni step-up pretvarač da formira V lcd. Da biste to učinili, prvi bit LCD_CR registra (LCD kontrolni registar) je postavljen na 0:
LCD->CR &= ~LCD_CR_VSEL; ili LCD->CR &= ~0x2;
Rad LCD kontrolera je omogućen postavljanjem bita LCD_CR registra (LCD kontrolni registar) na 0:
LCD->CR |= LCD_CR_LCDEN; ili LCD->CR |= 0x1;
Nakon što instalirate interni pojačavajući pretvarač kao izvor napona, morate pričekati dok ne bude spreman. Spremnost se provjerava hardverskim postavljanjem RDY bita u LCD_SR registru (LCD statusni registar):
while(!(LCD->SR&LCD_SR_RDY));
Nakon što dozvolite LCD kontroleru da radi, morate pričekati dok ne bude spreman. Spremnost se provjerava hardverskim podešavanjem ENS bita u LCD_SR registru (LCD statusni registar):
while(!(LCD->SR&LCD_SR_ENS));

Formiranje slike na LCD-u

Svi segmenti indikatora su kombinovani u grupe COM0 - COM3 sa po 24 segmenta (SEG0-SEG23). Informacije o segmentima se pohranjuju u LCD_RAM ​​registre memorije LCD kontrolera. Raspored PCB-a je takav da brojevi segmenata ne odgovaraju brojevima cifara LCD_RAM ​​registara.

Da biste prikazali 1 u prvoj cifri LCD-a, trebate osvijetliti segmente 1B, 1C. Segment 1B pripada grupi COM0, segment 1C pripada grupi COM1. Stoga se informacije o njima moraju upisati u registre RAM (LCD_RAM0), RAM (LCD_RAM2). Segment 1B je odgovoran za LCD izlaz LCDSEG22, informacije o kojem se pohranjuju u SEG40 bit RAM registra (LCD_RAM1). Koristeći funkciju ponovnog preslikavanja, segment LCDSEG22 će biti dodijeljen bitu SEG28 RAM registra (LCD_RAM0). 1C segment je odgovoran za LCD izlaz LCDSEG1, informacije o kojima se pohranjuju u SEG1 bit RAM registra (LCD_RAM2).

LCD->RAM= 0x10000000; /*0x10000000 = 1 0000 0000 0000 0000 0000 0000 0000 */ LCD->RAM = 0x2; /*0x2= 10 */
Prije upisivanja vrijednosti u memorijske registre, potrebno je provjeriti da li je završen prethodni prijenos podataka na LCD. Da biste to učinili, provjerava se UDR (zahtjev za ažuriranjem prikaza) registra LCD_SR (LCD statusni registar). LCD kontroler ima dva izlazna bafera, informacije se unose u prvi bafer i izlaze na LCD iz drugog bafera. UDR bit se postavlja tokom prijenosa iz prvog bafera u drugi, štiteći LCD_RAM ​​registre od upisivanja:
while(LCD->SR & LCD_SR_UDR);
Nakon pisanja informacija u LCD_RAM ​​registre, potrebno je da postavite UDR bit u LCD_SR registru (LCD statusni registar) (postavite 1 do 2 bita):
LCD->SR |= LCD_SR_UDR; ili LCD->SR |= 0x4; /*0x4 = 100 */

Čitalac našeg bloga Mihail ( mishadesh) stvorio je odličnu biblioteku za rad LCD i predložio je pisanje članka kako bi se demonstrirali njegove mogućnosti. Zapravo, upravo o tome ćemo danas pričati 😉 Pogledajmo koje su funkcije implementirane, a na kraju članka bit će primjer za rad s ekranom.

Kao i obično, počnimo s raspravom o hardveru... Ali zapravo nema o čemu razgovarati. Kao i u prvom članku o radu s ekranima (), koristit ćemo razvojnu ploču Mini STM32. Zapravo, povezivanje ekrana, osnovne naredbe za snimanje podataka, slijed instrukcija za inicijalizaciju - sve je tu =) Stoga, idemo odmah na razgovor o biblioteci za rad s grafičkim ekranima.

Ovdje je kompletna lista funkcija s objašnjenjima:

Sljedeća funkcija, kao što joj ime govori, mijenja orijentaciju ekrana. Moguća su dva položaja ekrana, odnosno dvije moguće vrijednosti parametara orijentacija:

  • Orientation_Portrait
  • Orientation_Album

Funkcija crta simbol na grafičkom displeju, pozicionira ga prema koordinatama koje su prosleđene funkciji, a takođe postavlja njegovu boju. Stil znakova odgovara fontu definiranom u datoteci font.c(fajl je uključen u biblioteku).

Od funkcije LCD_DrawChar() Sljedeća funkcija teče glatko:

void LCD_DrawString(char * s, uint16_t x, uint16_t y, uint16_t boja, uint16_t backColor, uint8_t je Transparent) ;

Ovdje je jasno bez daljnjeg 😉 Funkcija se ispisuje LCD red teksta. Osnova za ovu funkciju je prethodna - LCD_DrawChar().

Osim simbola i teksta, naravno, morate znati crtati osnovne grafičke primitive, kao što su linija ili krug. Da bi se to postiglo, implementirano je sljedeće:

void LCD_drawLine (int x1, int y1, int x2, int y2, uint16_t boja) ; void LCD_DrawRect (int x1, int y1, int x2, int y2, uint16_t boja, uint8_t ispunjen) ; void LCD_DrawEllipse(uint16_t X1, uint16_t Y1, uint16_t R, uint16_t boja) ;

Da biste nacrtali liniju, morate funkciji prenijeti koordinate početne točke, koordinate krajnje točke i željenu boju. Za pravougaonik - koordinate gornjeg lijevog ugla i koordinate donjeg desnog ugla (!). Poslednji parametar ispunjen– određuje da li oblik treba popuniti. Jedan znači da, figura će biti obojena odabranom bojom, nula znači da će se nacrtati samo obris figure. Ovo je jasno) Ostaje samo krug - funkcija DrawEllipse(). Ovdje umjesto koordinata početka i kraja (gornji/donji uglovi), kao argumente prenosimo centar kruga i polumjer.

I na kraju, još jedna funkcija:

void LCD_FillScr(uint16_t boja) ;

Funkcija vam omogućava da popunite ekran jednobojnom bojom.

Sve navedene funkcije su implementirane u datoteci GUI_DRV.c.

Pored njih, biblioteka uključuje funkcije za upisivanje podataka na ekran ( LCD_DRIVER.c) kao i već spomenuti fontovi ( font.c). Kao što vidite, sve je jasno sortirano u različite fajlove, tako da je u principu sve vrlo jasno, pa idemo na praktičan primer!

Saznajmo! Idemo na fajl main.c... Neću davati kompletan kod za funkcije za inicijalizaciju periferije i displeja, sve se to može pogledati direktno u datoteci, ili u prethodnom članku, link na koji je bio na početku ovog članka 😉 Funkcija main():

int main(void) ( initPeriph() ; initFSMC() ; initLCD() ; kašnjenje(10000) ; LCD_FillScr(0xFFFF) ; kašnjenje (100) ; LCD_SetOrient(Orientation_Album) ; kašnjenje (100 )Str. LCD "Biblioteka za 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); dok (1 ) ( ) )

Počinjemo s inicijalizacijom, bojimo ekran u bijelo i postavljamo orijentaciju ekrana na pejzaž. A sada prelazimo na crtanje grafike)

Na ekranu prikazujemo liniju, kao i dva pravougaonika i krug. Rezultat je jasan:

Očigledno sve radi odlično 😉

Dakle, tu završavamo za danas, veliko hvala Mikhailu na obavljenom poslu i ustupljenim materijalima. Evo kontakata autora biblioteke:

Skype - mishadesh

pošta – [email protected]

To je sve, hvala na pažnji, vidimo se uskoro!

I njegovi analozi, na primjer, kao što su S6A0069, KS0066, itd. Ovi LCD indikatori su bazirani na tekstu i mogu prikazati tekst i pseudo-grafičke simbole. Njihova veličina upoznatosti je 5x8 piksela, LCD indikatori dolaze u različitim veličinama i sa različitim rezolucijama, na primjer: 8 znakova u 2 reda - 8x2, 16x2, 20x2, 40x2, 16x4, 20x4, itd.

U ovoj lekciji ćemo pogledati 4-bitno povezivanje LCD indikatora sa AVR mikrokontrolerom i pisanje programa u .

Ovi LCD indikatori imaju sljedeće zaključke:
VSS – Gnd (snaga minus)
VDD – Vcc (napajanje 5v)
VO – Podešavanje kontrasta LCD matrice
RS – RS kontrolna linija
RW (Read/Write) – RW kontrolna linija
E (Omogući) – Kontrolna linija E
D0 – D0 linija podataka (ne koristi se u 4-bitnom modu)
D1 – D1 linija podataka (ne koristi se u 4-bitnom modu)
D2 – D2 linija podataka (ne koristi se u 4-bitnom modu)
D3 – D3 linija podataka (ne koristi se u 4-bitnom modu)
D4 – Linija podataka D4
D5 – Linija podataka D5
D6 – Linija podataka D6
D7 – D7 linija podataka
A – LED anoda sa pozadinskim osvetljenjem ekrana
K – LED katoda sa pozadinskim osvjetljenjem ekrana

Pažnja! Različiti LCD indikatori imaju svoje lokacije pinova; tačne lokacije pinova možete saznati u tehničkoj dokumentaciji (datasheet) za vaš LCD indikator.

Pin indikatora LCD VO kontroliše kontrast LCD matrice u zavisnosti od napona napajanja koji se dovodi na ovaj pin. Ako nema potrebe za čitanjem informacija sa displeja, RW pin je povezan na napajanje minus.

Primjer 4-bitnog povezivanja LCD indikatora na Attiny2313 mikrokontroler:

Podstring otpornik RV1 podešava svjetlinu LCD indikatora.
U BASCOM-AVR-u, prije rukovanja LCD indikatorom, morate naznačiti koji su pinovi ekrana povezani na koje portove mikrokontrolera, za to postoji naredba Config Lcdpin, primjer korištenja ove naredbe: Config Lcdpin = Pin, Db4 = Portb .4, Db5 = Portb.5, Db6 = Portb.6, Db7 = Portb.7, E = Portb.3, Rs = Portb.2 i također odredite rezoluciju LCD indikatora pomoću naredbe Config Lcd, primjer: Config Lcd = 16 * 2 i inicijalizirajte LCD indikator komandom Initlcd, nakon toga LCD indikator će biti spreman za upotrebu.

Evo liste komandi za rad sa LCD indikatorom u BASCOM-AVR-u:
ConfigLcdpin– Podešavanje konfiguracije pinova LCD indikatora i mikrokontrolera
Config Lcd– Podešavanje rezolucije LCD indikatora
Initlcd– Inicijalizacija LCD indikatora
LCD– Prikaz teksta na LCD indikatoru, primjer: LCD “Hello”
Cls– Čišćenje LCD indikatora
Locatey,x– Postavite kursor na poziciju x, y
Donja linija– Pomaknite kursor na donju liniju
Gornja linija– Pomaknite kursor na gornji red
Shiftlcd desno– Pomerite LCD indikatorsku sliku na jedno mesto na desno
Shiftlcd lijevo– Pomerite LCD indikatorsku sliku ulevo za jedno mesto
Kursor isključen– Isključite kursor
Kursor uključen– Omogući kursor
Kursor na treptaju– Omogućite treperenje kursora
Kursor na Noblink– Onemogućite treperenje kursora

Pažnja! Kada koristite LCD indikator sa 8x2 rezolucijom u BASCOM-AVR, konfigurišite ga kao 16x2, pošto BASCOM-AVR nema konfiguraciju za LCD indikator sa 8x2 rezolucijom.

Primjer programa u BASCOM-AVR za gornju shemu:

$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 , Rs = Portb. .2 Config Lcd = 16 * 2 Initlcd Cls Locate 1 , 1 LCD "Hello," Lowerline Lcd "world!" Kraj

Evo kako sve to funkcionira sa 8x2 LCD indikatorom:

Bitovi osigurača za firmver:

Možete preuzeti fajlove za lekciju (projekat u , izvor, firmver) ispod

Lekcija 12

dio 5

LCD indikator 16×2

Danas nastavljamo sa učenjem LCD indikator karaktera, koji može da izbaci određene znakove u dva reda od po 16 znakova.

U zadnjem dijelu smo završili i provjerili pisanje koda za funkciju koja prikazuje bilo koji znak na ekranu.

Sada je vrijeme da napišemo funkciju za prikaz cijele linije na ekranu, jer njeno ispisivanje znak po znak nije sasvim zgodno; želio bih raditi sa stringovima. Dodajmo ovu funkciju neposredno ispred funkcije main() i proslijedit ćemo joj niz znakova neodređene veličine

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

voidstr_lcd( charstr1)

{

}

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

Pozovimo ovu funkciju u main(), nakon što smo prvo uklonili sav kod za prikaz znak po znak

LCD_ini(); //Inicijaliziranje prikaza

setpos(0,0);

str_lcd( "Zdravo svijete!");

Zatim, počnimo pisati tijelo funkcije za izlaz stringa. Hajde da deklarišemo varijablu za simbol u telu funkcije. Naša varijabla će biti malo drugačijeg tipa. Po pravilu, kodovi znakova se bolje prepoznaju kod ovog tipa. Naravno, možete eksperimentirati s drugim vrstama

voidstr_lcd( charstr1)

wchar_tn;

Zatim ćemo u skladu s tim organizirati petlju i naizmjenično ćemo iterirati kroz sve prenesene znakove u nizu i prikazati ih na ekranu. Takođe ćemo koristiti opciju predstavljanja nul karaktera "n" i do ove tačke ćemo sortirati likove

Wchar_tn;

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

sendchar( str1[ n]);

Sakupimo kod i provjerimo rad koda u Proteusu

Sada možete pokušati prikazati liniju na drugom mjestu na ekranu. Napišimo kod u main()

str_lcd( "Zdravo svijete!");

setpos(2,1);

str_lcd( "String 2");

dok(1)

Sakupimo kod i vidimo rezultat

Sve radi! Odlično!

Pa, naravno, još uvijek moramo vidjeti kako će kod funkcionirati na živom ekranu sa live kontrolerom. Da bismo to učinili, bljesnut ćemo kontroler

Funkcije formuliramo u poseban modul

Sa kodom smo došli do takvog stanja da je naš glavni i jedini fajl sa kodom postao toliko pun da je sada teško bilo šta pronaći u njemu. Kako se možemo boriti protiv ovoga? Mi ćemo se boriti protiv toga formatiranjem koda funkcije za jedan uređaj ili sabirnicu ili neku tehnologiju u poseban modul. Kompetentni modul se obično sastoji od datoteke zaglavlja i datoteke implementacije funkcije. Pa hajde da uradimo ovo za naš LCD ekran. Također, cijela ova stvar je neophodna da bismo, ako pišemo novi projekat, jednostavno spojili ove fajlove na njega ako trebamo koristiti LCD ekran. Ovo će biti naša takozvana biblioteka prikaza. Naravno, biblioteke se obično pišu i kompajliraju u posebnu lib datoteku, ali u ovom slučaju obično nema izvornog koda i podaci biblioteke se ne mogu mijenjati. A naša biblioteka će biti potpuno popravljiva i biće nam od velike koristi u budućnosti.

Ali prije kreiranja ove biblioteke, kreirat ćemo glavni fajl zaglavlja i nazvati ga main.h kako bismo sve uključene biblioteke, razne globalne varijable i zamjene makroa stavili u ovu datoteku

Da bismo to učinili, desnom tipkom miša kliknemo na naš projekat u stablu projekta Test09 i izaberite podmeni u kontekstualnom meniju Dodati, a u njemu već biramo stavku Nova stavka

I u dijalogu koji se otvori odaberite vrstu datoteke koju ćemo kreirati, " Uključi datoteku"I na dnu naziva datoteke mijenjamo IncFile1 u main, zatim pritisnite dugme Dodati.

U skladu s tim, kreirat ćemo datoteku main.c sa sljedećim sadržajem

#ifndefMAIN_H_

#defineMAIN_H_

#endif/* MAIN_H_ */

Ovo je vrlo dobro. Na primjer. U Keilu, kada programiramo STM kontrolere, sve to moramo napisati rukom. Ovdje ova direktiva kaže da ako je datoteka već uključena u izvršni kod, tako da je predprocesor ne uključuje ponovo.

U ovaj fajl ćemo smestiti veze svih datoteka zaglavlja biblioteke i sve zamene makroa, au fajl Test09.c, naravno, sve ovo ćemo izbrisati

#ifndefMAIN_H_

#defineMAIN_H_

#defineF_CPU8000000UL

#include

#include

#include

#include

#include

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

#definee1PORTD|=0b00001000// postavlja liniju E na 1

#definee0PORTD&=0b11110111// postavlja liniju E na 0

#definers1PORTD|=0b00000100// postavite RS liniju na 1 (podaci)

#definers0PORTD&=0b11111011// postavi RS liniju na 0 (komanda)

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

#endif/* MAIN_H_ */

Ali nije dovoljno uključiti ovu datoteku zaglavlja u Solution Explorer; moramo je također uključiti u datoteku Test09.c uključiti na samom početku u kodu

#include"main.h"

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

Hajde da sastavimo projekat i ponovo proverimo njegovu funkcionalnost.

Sada krenimo sa kreiranjem naše biblioteke prikaza.

Da bismo to učinili, kreirat ćemo datoteku zaglavlja na isti način kao main.h lcd.h

#include

#include"lcd.h"

I obrnuto, na fajl lcd.h mi ćemo uključiti fajl main.h

#ifndefLCD_H_

#defineLCD_H_

#include"main.h"

Ne morate brinuti o mogućnosti neke vrste unakrsne petlje - direktive će spriječiti da se to dogodi.

Također ćemo uzeti sve zamjene makroa iz main.h datoteke u lcd,h datoteku i izbrisati ih u main.h

#include"main.h"

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

voidLCD_ini( void);

voidsetpos( nepotpisancharx, nepotpisany);

voidstr_lcd( charstr1);

voidsendchar( nepotpisancharc);

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

A da bismo preuzeli sve funkcije za rad sa ekranom iz datoteke Test09.c, sada ćemo kreirati drugu datoteku - lcd.c. Sadržat će kod za implementaciju svih funkcija

Datoteka se kreira na potpuno isti način, samo što umjesto “Include File” odabiremo tip datoteke “C File”.

Datoteka lcd.c je kreirana. U njemu više neće biti direktiva, jedino će biti komentar autora, koji ćemo obrisati da se ne miješamo.

U ovu datoteku ćemo također uključiti datoteku zaglavlja lcd.h

#include"lcd.h"

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

Sada ćemo u potpunosti prenijeti sve funkcije namijenjene radu sa ekranom iz Test09.c datoteke u ovaj fajl. U njemu će ostati samo dvije funkcije - port_ini I main().

Stoga ćemo ozbiljno isprazniti glavni fajl aplikacije, čineći ga čitljivijim.

Ali ovo nam nije dovoljno. Nijedna funkcija sada neće biti "vidljiva" u datoteci Test09.c. Stoga moramo deklarirati funkcije koje ćemo koristiti u drugim datotekama ili, kako ljudi kažu, kreirati prototipove na njima. Ovo se obično radi u datoteci zaglavlja. Stoga ćemo kreirati prototipove u datoteci zaglavlja lcd.h. Prototip je vrlo lako napraviti. Zaglavlje funkcije sa svim argumentima (sve osim tijela) je napisano ili obično kopirano, a na kraju se stavlja tačka i zarez. Biće nam potrebne funkcije za inicijalizaciju displeja, pozicioniranje na displeju i prikazivanje linije na ekranu. Za sada nećemo slati simbole odvojeno, tako da ne kreiramo prototip za odgovarajuću funkciju. Evo naših prototipova

#include"main.h"

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

voidLCD_ini( void);

voidsetpos( nepotpisancharx, nepotpisany);

voidstr_lcd( charstr1);

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

#definee1PORTD|=0b00001000// postavlja liniju E na 1

Sada sakupimo fajl, pokrenimo ga u Proteusu i provjerimo njegovu funkcionalnost. Provjerimo to i u praksi. Ako sve funkcioniše, onda smo sve uradili kako treba. Projekat za cijelu lekciju nalazi se u prilogu ispod i dostupan je putem linka "Izvorni kod".

Tako da smo na današnjoj lekciji puno naučili. Naučili smo kako raditi s prikazom znakova i povezati ga s AVR kontrolerom. Takođe, u okviru ove lekcije naučili smo kako pravilno napisati kod i koristiti modularno programiranje.

Pregleda postova: 11,438

Često korisnik treba da primi neke vizuelne informacije od elektronskog uređaja. Ako se informacije mogu predstaviti u simboličkom obliku, onda je jedna od opcija za njihovo prikazivanje korištenje simboličkih indikatora tekućih kristala (LCD, ili LCD u stranoj oznaci). Danas ćemo govoriti o simboličkim indikatorima koji se implementiraju na bazi kontrolera Hitachi HD44780, Samsung KS 0066 i slično.

Kao primjer, razmotrit ću LCD Winstar Wh1602D-TMI-CT#, na raspolaganju mi ​​za provođenje eksperimenata. Već sam spomenuo ovaj LCD u jednom članku, čiji ću grafički razvoj danas koristiti.

Detaljno datasheet To LCD WINSTAR WH1602D-TMI-CT:

kategorija: Dokumenti
Datum: 22.03.2015

Pojednostavljeno LCD kolo se može predstaviti na sljedeći način:

Osnova indikatora je matrica tečnog kristala, primjenom napona na čiji element možemo uočiti tačku na ekranu. U LCD ekranima sa karakterima, ova matrica se sastoji od određenog broja poznatih mesta, koja su grupisana u redove i kolone. Veličina poznatog mjesta u pikselima je često 5x8 piksela. Oznaka mog indikatora sadrži brojeve 1602 što znači da moj indikator može prikazati 2 reda od po 16 znakova. Kodiranje takođe uključuje: kod proizvođača i tip indikatora, prisustvo pozadinskog osvetljenja, boju, tabelu kodova i tako dalje.

WINSTAR sistem označavanja indikatora

Prikaži/sakrij legendu

1. Šifra proizvođača: WINSTAR DISPLAY CO,LTD

2. Tip indikatora:

  • H- simbolički (sintetiziranje znakova)
  • C- grafička boja sa pasivnom matricom CSTN (BojaSTN)
  • X- grafika sa matricom TAB (Automatsko lijepljenje trake– kristal je montiran na troslojnu poliamidnu podlogu traku)
  • O- grafika sa matricom COG (Čip na staklu- kristal na staklu)

3. Horizontalna rezolucija:

  • broj znakova po redu za indikatore tipa znakova
  • broj horizontalnih tačaka za indikatore grafičkog tipa

4. Vertikalna rezolucija:

  • broj redova za indikatore tipa znakova
  • broj vertikalnih tačaka za indikatore grafičkog tipa

5. Šifra modela

  • Kodira geometrijske dimenzije koje koristi kontroler

6. Tip pozadinskog osvjetljenja:

  • N- bez pozadinskog osvetljenja
  • B- elektroluminiscentna, boja sjaja - plava
  • D- elektroluminiscentna, boja sjaja - zelena
  • W- elektroluminiscentna, boja sjaja - bijela
  • Y— LED, boja sjaja — žuto-zelena
  • A— LED, boja sjaja — amber
  • R— LED, boja sjaja — crvena
  • G— LED, boja sjaja — zelena
  • T— LED, boja sjaja — bijela
  • P- LED, boja sjaja - plava
  • F— lampa s hladnom katodom (CCFL), boja svjetla — bijela

7. Tehnologija proizvodnje LCD-a

  • B- TN sivo, pozitivno
  • N— TN, negativan
  • G- STN siva, pozitivna
  • Y— STN žuto-zeleno, pozitivno
  • M— STN plava, negativna
  • F— FSTN pozitivan
  • T- FSTN negativan
  • H- HTN siva, pozitivna
  • I— HTN crni, negativ
  • TN (Twisted Nematic) - Kristalna struktura ima spiralni tip
  • STN (Super Twisted Nematic) - matrica koja se sastoji od LCD elemenata s promjenjivom transparentnošću
  • FSTN (Film kompenzirani STN) — STN-matrica sa kompenzacijom filma. Tehnologija omogućava povećani ugao gledanja
  • HTN (Homeotropic Twisted Nematic) - displeji su zasnovani na jačem molekularnom uvijanju (obično 110°) u poređenju sa konvencionalnim TN uvijenim nematicima (90°). Pruža širok ugao gledanja i poboljšan kontrast. Karakteristike su superiorne u odnosu na STN tehnologiju. Nizak radni napon (2,5V i najniža cijena među nematicima čini njihovu upotrebu povoljnom u prijenosnim samostalnim uređajima).

8. Polarizator, ugao gledanja, opseg radne temperature

  • 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.
  • I— TM, 6:00, W.T.
  • L- TM, 12:00, W.T.
  • RF (Reflektirajući LCD) - LCD indikator koji radi isključivo na refleksiji svjetlosti. Slika je vidljiva samo kada ima dovoljno ambijentalnog svjetla.
  • TF - (Transflektivni LCD) - displej sa tečnim kristalima koji istovremeno reflektuje i emituje svetlost (svetli sam).
  • TM (transmisivno LCD) - svjetlost ulazi kroz LCD sa strane pozadinskog osvjetljenja. Ima visok kvalitet slike u zatvorenom prostoru i obično vrlo loš (crni ekran) na sunčevoj svjetlosti.
  • N.T.— normalno temperaturno područje 0...+50ºC W.T.— prošireni temperaturni opseg -20...+70ºC

9. Dodatne opcije

Prva dva znaka su generator karaktera:

  • C.T./C.P.— latinica/ćirilica
  • E.P./ET/E.E./EN/E.C./ES— latinski/evropski
  • J.P./JT/JS/JN- latinski/japanski
  • HP/H.S.— hebrejski

3-4 znaka:

  • T- temperaturna kompenzacija
  • E ili EZ— ivica BL (pozadinsko osvjetljenje LED diode se nalaze po obodu). Simbol također može nedostajati.
  • K ili LB— eco BL (LED se nalaze ravnomjerno iza ekrana)
  • V- ugrađeni izvor negativnog napona
  • N- bez ugrađenog negativnog izvora napona

10. Dodatne informacije:

# - kompatibilnost sa standardom RoHS

Bilješka(proizvođač čipa kontrolera):

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

Koristeći ovaj sistem notacije, otkrio sam da u rukama imam indikator za sintetiziranje znakova Winstar, prikazujući znakove u 16 kolona i 2 reda, koristeći kontroler KS 0066 ili njegov ekvivalent, sa bijelim LED osvjetljenjem oko perimetra, sa plavim negativom transmisivan-matrica, ugao gledanja "na 6 sati", opseg radne temperature -20...+70ºC sa generatorom znakova, uključujući ćirilicu i kompatibilan sa standardom RoHS(ne sadrži nikakve štetne komponente, što očigledno znači da je pri montaži korišten bezolovni lem).

Indikatori zasnovani na kontroleru HD44780, KS066U

Indikatorom upravlja ugrađeni kontroler. Kontroler je obično Hitachi HD44780, Samsung KS0066U ili njihovi brojni analozi i klonovi. Indikatori koje proizvodi ruska kompanija MELT koriste kontroler PCF8576.

Kontroler ima jednobajtne memorijske ćelije ( DDRAM), čiji se sadržaj zapravo prikazuje na ekranu prema tabeli koja je snimljena u CGRAM. Obično ima više memorijskih ćelija nego simbola na LCD-u, tako da treba obratiti pažnju na adresiranje simbola datasheet. Moramo da upišemo kod traženog simbola na traženu poziciju, a kontroler će sam uraditi ostalo.

Za odabir pozicije postoji virtuelni kursor kojim upravljaju komande (broj trenutne memorijske ćelije, AC). Može se učiniti vidljivim. Podrazumevano, kada upisujete znak u ćeliju, kursor se pomera za jednu poziciju unapred.

Tabela kodova indikatora obično se sastoji od tri dijela:

  • 0×00-0×07 - generator znakova koji se može preuzeti, znakovi koje ste kreirali
  • 0×20-0xFF - ASCII kodovi, standardni skup znakova i engleska abeceda
  • 0xA0-0xFF - simboli nacionalnih abeceda i drugi, uz izostavljanje znakova koji odgovaraju engleskim.

Prikaži/sakrij tabelu kodova, sa ćiriličnim pismom

Primjer: heksadecimalni kod 0x4A odgovara slovu J, šifra 0xB6 - slovo i.

Najznačajnija četiri bita određuju kolonu odabranog znaka u tabeli, a najmanja bita određuju red. Možete kreirati vlastitu tablicu simbola tako što ćete je upisati CGRAM. Svaki znak zahtijeva 5 bajtova (jedan bajt po koloni). One u svakom bajtu definiraju značajne piksele. Na primjer, za kodiranje brojeva piksel po piksel 8 trebat će vam sljedeći niz: 0x6c,0×92.0×92.0×92.0x6c.

Pretvarač ćirilice

Da biste pretvorili tekst koji sadrži ćirilične znakove u kodove koji odgovaraju gornjoj tabeli, unesite traženi tekst u polje za tekst. Rezultat koji se dobije ispod može se kopirati i koristiti u vašim programima za prikaz ovog teksta na LCD-u.

Originalni tekst:

Kodirani tekst:

Tabela kodova naredbi:

D7 D6 D5 D4 D3 D2 D1 D0 Svrha
0 0 0 0 0 0 0 1 čišćenje ekrana, A.C.=0, adresiranje A.C. on DDRAM
0 0 0 0 0 0 1 A.C.=0, adresiranje na DDRAM, pomaci se brišu, početak reda se adresira na početku DDRAM
0 0 0 0 0 1 I/DSOdabir smjera pomicanja kursora ili ekrana
0 0 0 0 1 DCBOdaberite način prikaza
0 0 0 1 S/CR/LNaredba za pomak kursora/ekrana
0 0 1 D.L.NFDefiniranje parametara skeniranja i širine sabirnice podataka
0 1 AC5AC4AC3AC2AC1AC0Dodjela šalteru A.C. adrese u regionu CGRAM
1 AC6AC5AC4AC3AC2AC1AC0Dodjela šalteru A.C. adrese u regionu DDRAM

Tabela vrijednosti zastavice:

Zastava Značenje
I/DNačin pomaka brojača AC adrese, 0 - smanjenje, 1 - povećanje
SOznaka moda promjene sadržaja ekrana. 0 - ekran se ne pomera, 1 - nakon upisivanja sledećeg koda u DDRAM, ekran se pomera u pravcu određenom I/D zastavicom: 0 - udesno, 1 - ulevo. Shift ne mijenja sadržaj DDRAM-a. Mijenjaju se samo interni pokazivači na lokaciju vidljivog početka reda u DDRAM-u
S/CKomanda zastavice koja zajedno sa R/L zastavicom vrši operaciju pomjeranja sadržaja ekrana (isto kao u prethodnom slučaju, bez promjena u DDRAM-u) ili kursora. Definira pomak objekta: 0 — kursor je pomjeren, 1 — ekran je pomjeren
R/LKomanda zastavice koja, zajedno sa S/C zastavicom, izvodi operaciju pomjeranja ekrana ili kursora. Određuje smjer pomaka: 0 - lijevo, 1 - desno
D/LOznaka koja definiše širinu sabirnice podataka: 0 - 4 bita, 1 - 8 bita
NRežim skeniranja slike na LCD-u: 0 - jedan red, 1 - dva reda
FVeličina matrice znakova: 0 - 5×8 bodova, 1 - 5×10 bodova
DPrisustvo slike: 0 - onemogućeno, 1 - omogućeno
CKursor donje crte: 0 - onemogućeno, 1 - omogućeno
BKursor u obliku treperavog poznatog mjesta: 0 - isključeno, 1 - uključeno

Dodjela pinova kontrolera:

  • DB0-DB7— odgovoran za dolazne/odlazne podatke
  • R.S.- visoka razina znači da je signal na izlazima DB0-DB7 podatak, niska razina znači naredba
  • W/R— određuje smjer podataka (čitanje/pisanje). Budući da je operacija očitavanja podataka iz indikatora obično nezahtjevljiva, ovaj unos možete stalno postaviti na nisku razinu
  • E— impuls u trajanju od najmanje 500 ms na ovom pinu određuje signal za čitanje/upisivanje podataka sa pinova DB0-DB7, RS i W/R
  • V 0— koristi se za postavljanje kontrasta slike
  • A, K- napajanje pozadinskog osvjetljenja (anoda i katoda), ako postoji
  • V CC I GND- napajanje za LCD indikator

Za kontrolu LCD indikatora potrebno je 6 ili 10 pinova, ovisno o tome da li je odabran način razmjene podataka od 4 ili 8 bita. Da biste smanjili potreban broj pinova mikrokontrolera, možete raditi u 4-bitnom načinu rada. U ovom slučaju, na zaključcima DB4-DB7 indikator, četiri najznačajnija bita podataka/komande će se prvo prenijeti, zatim četiri najmanje značajna bita. zaključci DB0-DB3 ostat će neiskorišten.

Jedan kontroler kontrolira ograničeni broj znakova. Na indikatorskoj ploči može biti 1, 2, 4, 8 kontrolera, a moguće i više.

Dokumentacija kontrolera:

Kontroler Samsung KS0066U

Kontroler Hitachi HD44780

kategorija: Dokumenti
Datum: 21.03.2015

prevedeno na rusku verziju:

kategorija: Dokumenti
Datum: 21.03.2015

Indikatori različitih proizvođača često su kompatibilni i zamjenjivi, ali se mogu razlikovati po dimenzijama, montaži, kontaktima itd. Stoga, kada birate novi razvoj i tražite zamjenu, pogledajte kataloge proizvođača:

Tablica kompatibilnosti za karakterne LCD indikatore različitih proizvođača:

Prikaži/sakrij tabelu

Tip Winstar MELT Data Vision Bolymin Sunlike Microtips Wintek imperija
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

Snaga, podešavanje kontrasta i pozadinsko osvjetljenje

Morate paziti na polaritet priključka napajanja na LCD indikator, a također pazite da napon napajanja bude u rasponu od +4,5...5,5 V. Nepažnja na ove točke može dovesti do kvara indikatora!

LCD indikatori vam omogućavaju da podesite kontrast pomoću djelitelja napona. Prije slanja podataka na indikator, morate se uvjeriti da je napon kontrole kontrasta u radnom rasponu. Vrijednosti otpornika razlikuju se među različitim proizvođačima LCD indikatora. Neki modeli indikatora imaju mjesta na ploči za ugradnju takvog razdjelnika i dovoljno je tamo zalemiti potrebne vrijednosti otpornika. Kontrast indikatora zavisi od ugla gledanja. Ako je indikator "na dvanaest sati", onda morate gledati takav indikator na takav način da je ispod nivoa očiju, ako je "nula sati", onda je namijenjen za posmatranje u visini očiju ( okomito na ravan ekrana). Ako je indikator "na šest sati", onda ga treba koristiti kada se posmatra iznad nivoa očiju. Ovu tačku morate uzeti u obzir prilikom kupovine.

Snaga pozadinskog osvetljenja

Ako indikator ima pozadinsko osvjetljenje, igle za njega se obično nalaze odvojeno. Potrebno ga je priključiti na napajanje, podešavajući nazivnu struju pomoću vanjskog otpornika R (vidi. datasheet). Za moj indikator, nominalni napon na anodi bi trebao biti 3,5 V, a struja 40 mA. Na osnovu toga, vrijednost otpornika koji ograničava struju je:

Neki proizvođači imaju mjesto na indikatorskoj ploči za ugradnju takvog otpornika; potrebno je lemiti odgovarajuću vrijednost, zatvoriti kratkospojnik i pozadinsko osvjetljenje će dobiti napajanje iz iste linije kao i indikator.

Kako ocjenjujete ovu publikaciju?