Práce s LCD
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Práce s LCDPráce s LCD

 
Hledat
Moderní platforma pro vytvoření vašeho nového webu – Wix.com.
Nyní už můžete mít web zdarma.
Vybavení pro Laser Game
Spuštěn Filmový magazín
Laser Game Brno
Laser Game Ostrava

Práce s LCD

Google       Google       2. 8. 2007       44 255×

V minulém díle jsme si naprogramovali jednoduchý voltmetr. Při jeho návrhu jsem vynechal popis komunikace s LCD a někteří z vás mi dali jasně najevo, že by se o něm rádi něco dozvěděli. Dnes si tedy ukážeme, jak na to.

Reklama
Reklama

Úvodem

Standardní znakové LCD moduly jsou řízeny pomocí osmibitových příkazů, které do displeje posíláme paralelně. A to celých 8 bitů najednou a potvrdíme signálem ENABLE, anebo pošleme nejprve horní čtyři bity příkazu a poté dolní čtyři bity. Opět obě poloviny potvrdíme signálem ENABLE.

Než se ale pustíme do popisu komunikace, bylo by dobré popsat si standardní zapojení konektoru LCD displeje s řadičem HITACHI HD44780. Běžné displeje tohoto typu mají osazen šestnáctipinový konektor, jehož 2 piny jsou pro určeny pro podsvětlení displeje.

1 – GND (0V), 2 – VCC (5V), 3 – KONSTRAST, 4 – REGISTER SELECT, 5 – READ / WRITE, 6 – ENABLE, 7–14 – datové bity (DB0–DB7), 15 – anoda, 16 ndash; katoda

  • KONTRAST – čím nižší napětí, tím vyšší kontrast
  • REGISTER SELECT – určuje, zda se zapisuje příkaz nebo data na displej. V případě, že je pin uzemněn 0, se posílají příkazy, v případě, že je nastavena 1, pak se zapisují data.
  • READ / WRITE – čtení log. 1, zápis log. 0
  • ENABLE – zápis dat/příkazu se provádí vzestupnou hranou

Paměťový prostor

Paměť řadiče displeje je rozdělena na dvě části. Na DDRAM – paměť obsahující znaky aktuálně zobrazené na displeji – a CGRAM, ta obsahuje znaky, jež využíváme pro zápis na displej. Do CGRAM můžeme uložit i vlastní znaky.

Inicializujeme LCD

Před každým použitím je nutné LCD inicializovat. Zkuste připojit LCD k napájecímu napětí (piny 1 a 2) a kontrast na zem. V tuto chvíli je možné pozorovat, jak vypadá neinicializovaný LCD displej. Pro jeho inicializaci musíme zaslat několik instrukcí. Výčet všech možných instrukcí je možné nastudovat na této adrese:
http://home.iae.nl/users/pouweha/lcd/lcd0.shtml#instruction_set

  • Odešleme instrukci 0x3B (binárně 00111011), touto instrukcí nastavíme osmibitovou komunikaci, 2 a více řádků, a znaky o rozlišení 5 × 7 bodů
  • Odešleme instrukci 0x0C (binárně 00001100), touto instrukcí zapneme displej
  • Odešleme instrukci 0x01 (binárně 00000001), touto instrukcí smažeme LCD.

Při zasílání instrukcí musíme mít pin REGISTER SELECT uzemněn.

Pro zapsání znaku na displej pak už jen stačí nastavit bit REGISTER SELECT a odeslat kód znaku uloženého v CGRAM.

Praktický příklad


// inicializuje LCD
void LCD_Init()
{                            
        LCD_SetWrite();
        LCD_ClrEnable(); 
        LCD_WriteCommand(59);
        LCD_WriteCommand(12);
        LCD_Clear();	
}

Pro úplnost musíme ještě přidat použité funkce a makra:


#define LCD_SetWrite()  PORTD &= ~8;
#define LCD_ClrEnable() PORTD &= ~16

// zapise prikaz
void LCD_WriteCommand(unsigned char co)
{
        LCD_SetCommand();
        LCD_WriteDelay();
        LCD_Data = co;  
        LCD_WriteDelay();
        LCD_SetEnable();
        LCD_WriteDelay();        
        LCD_ClrEnable();        
        LCD_WriteDelay();
}

Ostatní funkce spolu se zbylou částí knihovny si můžete stáhnou na http://kvetakov.net.

Celá knihovna vypadá takto:


#include "lcd_lib.h"

void LCD_WriteDelay()
{
  unsigned char i;
  for (i = 0; i<250; i++);
}

void LCD_WriteData(unsigned char co)
{
        LCD_SetData();
        LCD_WriteDelay();
        LCD_Data = co;  
        LCD_WriteDelay();
        LCD_SetEnable();
        LCD_WriteDelay();        
        LCD_ClrEnable(); 
        LCD_WriteDelay();        
}

void LCD_WriteCommand(unsigned char co)
{
        LCD_SetCommand();
        LCD_WriteDelay();
        LCD_Data = co;  
        LCD_WriteDelay();
        LCD_SetEnable();
        LCD_WriteDelay();        
        LCD_ClrEnable();        
        LCD_WriteDelay();
}


void LCD_Init()
{                            
        LCD_SetWrite();
        LCD_ClrEnable(); 
        LCD_WriteCommand(59);
        LCD_WriteCommand(12);
		LCD_Clear();	
}

void LCD_Clear()
{  
        unsigned int a;
        LCD_WriteCommand(1);                
        for (a = 0; a<5000; a++); 
}


void LCD_Position(unsigned char radek, unsigned char sloupec)
{
        unsigned char policko = 0;
        switch (radek)
        {
                case 0: policko+=0; break;
                case 1: policko+=0x40; break;
                case 2: policko+=0x14; break;
                case 3: policko+=0x054; break;
        }                                     
        
        policko += sloupec;
        LCD_WriteCommand(128|policko);
}


void LCD_WriteString(char* retezec)
{
	while (*retezec !='\0')
	{
		LCD_WriteData(*retezec);
		retezec +=1;
	}
}

void LCD_WriteCString(const char* retezec)
{
	while (*retezec !='\0')
	{
		LCD_WriteData(*retezec);
		retezec +=1;
	}
}

void LCD_PrDec(unsigned char co)
{
	LCD_WriteData((co / 10)+48);
	LCD_WriteData((co % 10)+48);

}

Soubor definic vypadá takto:


#include 

#define LCD_Data        PORTC
#define LCD_SetEnable() PORTD |= 16
#define LCD_ClrEnable() PORTD &= ~16
#define LCD_SetData()   PORTD |= 4
#define LCD_SetCommand()PORTD &= ~4
#define LCD_SetRead()   PORTD |= 8;
#define LCD_SetWrite()  PORTD &= ~8;
#define SoundOn()       PORTD |= 32;
#define SoundOff()      PORTD &= ~32;
#define SoundInvert()   PORTD ^= 32;

void LCD_WriteDelay();
void LCD_WriteData(unsigned char co);
void LCD_WriteCommand(unsigned char co);
void LCD_Init();
void LCD_Clear();
void LCD_Position(unsigned char radek, unsigned char sloupec);
void LCD_WriteString(char* retezec);
void LCD_WriteCString(const char* retezec);
void LCD_PrDec(unsigned char co);

×Odeslání článku na tvůj Kindle

Zadej svůj Kindle e-mail a my ti pošleme článek na tvůj Kindle.
Musíš mít povolený příjem obsahu do svého Kindle z naší e-mailové adresy kindle@programujte.com.

E-mailová adresa (např. novak@kindle.com):

TIP: Pokud chceš dostávat naše články každé ráno do svého Kindle, koukni do sekce Články do Kindle.

Hlasování bylo ukončeno    
0 hlasů
Google
(fotka) Ondřej KarasAutor se věnuje vývoji řídících a komunikačních systémů a tvorbě podpůrných aplikací.
Web    

Nové články

Obrázek ke článku Ericsson ConsumerLab Report: rozšířená realita je další úrovní gamingu

Ericsson ConsumerLab Report: rozšířená realita je další úrovní gamingu

Celkem 66 % uživatelů zajímá rozšířená realita v oblasti gamingu. Mezi nimi je i 35 % těch, kteří jinak hry nehrají.
Pro téměř 50 % respondentů by bylo zajímavé zapojení virtuální objektů do reálného světa. Objekty by zůstaly tam, kde je při hře „umístili“.
Až 43 % uživatelů láká využití rozšířené reality ve sportu

Reklama
Reklama
Obrázek ke článku Instalace nejnovější verze Apache 2.4, PHP 7.3, MariaDB 10.3 a Memcached na Windows 10

Instalace nejnovější verze Apache 2.4, PHP 7.3, MariaDB 10.3 a Memcached na Windows 10

Buďte při vývoji efektivní! Pomocí tohoto návodu během chvíle vytvoříte ze svého počítače lokální webový server. Vyzbrojíte jej vším, co budete při práci potřebovat: Apache 2.4, PHP 7.3, MariaDB 10.3 a Memcached. Je to plná polní pro webové vývojáře s Windows 10. Navíc poradíme, jak mít na localhostu více projektů pomocí VirtualHost.

Obrázek ke článku Do poskytovatele managed hostingových služeb vshosting~ vstupují zahraniční investoři

Do poskytovatele managed hostingových služeb vshosting~ vstupují zahraniční investoři

Po více než roce jednání do vshosting~ vstoupili 3 investiční skupiny z Německa: Pecunalta, BrainWeb Investment a Quines Capital. Jde o investiční skupiny, které mají účast na projektech jako PlusServer (největší managed provider v Německu a jeden z největších v Evropě), PLESK, cPanel, CloudLinux, GoDaddy (největší světový hostingový poskytovatel z USA), či Acronis, pomohou vshosting~ v jeho plánované mezinárodní expanzi na další zahraniční trhy. Ve vshosting~ nyní drží 75% podíl, zbylých 25 % zůstává zakladatelům vshosting~, kterými jsou Damir Špoljarič (CEO) a Jan Martinů (CTO).

Obrázek ke článku Posuňte své znalosti IT na výrazně vyšší úroveň

Posuňte své znalosti IT na výrazně vyšší úroveň

Zájem o IT odborníky je v současnosti v tuzemsku i v zahraničí enormní a vedení firem si moc dobře uvědomuje, jak těžké je získat ty správné. I přesto, že je odborníků na trhu dlouhodobý nedostatek, stále platí, že část z nich je - a bude - placena výrazně lépe než ti ostatní. Proč tedy nebýt mezi nimi?

Reklama autora

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032019 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý