0,0 → 1,682 |
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> |
<html> |
<head> |
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> |
<title> LCD2L4P01A </title> |
<meta name="keywords" content="stavebnice MLAB modul LCD displeje LCD2L4P01A"> |
<meta name="description" content="Projekt MLAB, Modul LCD displeje"> |
<!-- AUTOINCLUDE START "Page/Head.cs.ihtml" DO NOT REMOVE --> |
<link rel="StyleSheet" href="../../../../../Web/CSS/MLAB.css" type="text/css" title="MLAB základní styl"> |
<link rel="StyleSheet" href="../../../../../Web/CSS/MLAB_Print.css" type="text/css" media="print"> |
<link rel="shortcut icon" type="image/x-icon" href="../../../../../Web/PIC/MLAB.ico"> |
<script type="text/javascript" src="../../../../../Web/JS/MLAB_Menu.js"></script> |
<!-- AUTOINCLUDE END --> |
</head> |
|
<body lang="cs"> |
|
<!-- AUTOINCLUDE START "Page/Header.cs.ihtml" DO NOT REMOVE --> |
<!-- ============== HLAVICKA ============== --> |
<div class="Header"> |
<script type="text/javascript"> |
<!-- |
SetRelativePath("../../../../../"); |
DrawHeader(); |
// --> |
</script> |
<noscript> |
<p><b> Pro zobrazení (vložení) hlavičky je potřeba JavaScript </b></p> |
</noscript> |
</div> |
<!-- AUTOINCLUDE END --> |
|
<!-- AUTOINCLUDE START "Page/Menu.cs.ihtml" DO NOT REMOVE --> |
<!-- ============== MENU ============== --> |
<div class="Menu"> |
<script type="text/javascript"> |
<!-- |
SetRelativePath("../../../../../"); |
DrawMenu(); |
// --> |
</script> |
<noscript> |
<p><b> Pro zobrazení (vložení) menu je potřeba JavaScript </b></p> |
</noscript> |
</div> |
<!-- AUTOINCLUDE END --> |
|
<!-- ============== TEXT ============== --> |
<div class="Text"> |
<p class="Title"> |
Modul LCD displeje se čtyřmi tlačítky |
</p> |
<p class=Autor> |
Milan Horkel |
</p> |
<p class="Subtitle"> |
Modul LCD2L4P obsahuje dvouřádkový LCD displej s obvyklým Hitachi |
řadičem a čtveřici tlačítek. Používá se jako univerzální uživatelský |
interfejs při pokusech s mikroprocesorovými konstrukcemi |
</p> |
<p class="Subtitle"> |
<img width="454" height="285" src="Pictures/image001.jpg" |
alt="Pohled na modul"> |
</p> |
<p> |
<a href="../LCD2L4P01A.cs.pdf"><img class="NoBorder" |
src="../../../../../Web/PIC/FileIco_PDF.ico" |
alt="Acrobat"> PDF verze</a> |
</p> |
|
<h1> Technické parametry </h1> |
|
<table> |
<tr> |
<th> Parametr </th> |
<th> Hodnota </th> |
<th> Poznámka </th> |
</tr> |
<tr> |
<td> Napájení </td> |
<td> +5V nebo +3V/-2V </td> |
<td> Záporné napětí pro řízení kontrastu </td> |
</tr> |
<tr> |
<td> Spotřeba </td> |
<td> cca 1mA </td> |
<td> Při +5V </td> |
</tr> |
<tr> |
<td> Displej </td> |
<td> LCD, 2 řádky po 16 znacích </td> |
<td> Hitachi řadič </td> |
</tr> |
<tr> |
<td> Tlačítka </td> |
<td> 4 spínací tlačítka do země </td> |
<td> Volitelný pull-up odpor </td> |
</tr> |
<tr> |
<td> Rozměry </td> |
<td> 61 x 101 x 22 mm </td> |
<td> Výška nad nosnou deskou </td> |
</tr> |
</table> |
|
<h1> Popis konstrukce </h1> |
|
<h2> Úvodem </h2> |
|
<p> |
Na modulu je osazen obyčejný standardní dvouřádkový LCD displej s Hitachi |
řadičem (to jsou skoro všechny dostupné řádkové displeje). Z displeje je |
vyveden jen 4 bitový interfejs a příslušné řídící signály. Pomocí |
propojek je možné připojit trimr pro řízení kontrastu displeje a trvale |
nastavit řídící signál RW na režim jen zápis (v obvyklých konstrukcích se |
z LCD displeje nic nečte). |
</p> |
|
<p> |
Pod displejem jsou umístěna 4 velká spínací tlačítka do země. Pomocí řady |
propojek označené „PULL UPS“ je možné připojit pull-up odpory do plusu |
(hodnota 10k). |
</p> |
|
<h2> Zapojení modulu </h2> |
|
<p> |
<img width="222" height="146" src="Pictures/image002.gif" |
alt="Zapojení napájení"> |
</p> |
|
<p> |
Dioda D1 je ochranná dioda proti přepólování napájení. |
Standardní napájení je +5V ale v případě potřeby může být napájení menší |
ale je třeba použít záporného napětí pro řízení kontrastu LCD displeje |
(potřebný rozdíl mezi kladným napájením a záporným předpětím jej cca 5V). |
Při sníženém napájecím napětí je podstatně snížena spotřeba. Napájecí |
proud pro řízení kontrastu je velmi malý a je možné snadno jej nastřídat. |
</p> |
|
<p> |
<img width="648" height="342" src="Pictures/image003.gif" |
alt="Připojení displeje"> |
<img width="308" height="476" src="Pictures/image004.gif" |
alt="Připojení tlačítek"> |
<p> |
Zapojení tlačítek je přímočaré. Odpory R6 až R9 jsou volitelné |
(propojkami J9) pull-up odpory. Tlačítka jsou napevno zapojená |
„do země“. |
|
<table class="Soupiska"> |
<tr> |
<th> Reference </th> |
<th> Název </th> |
</tr> |
<tr> |
<th colspan="2"> Odpory </th> |
</tr> |
<tr> |
<td> R1, R2, R3, R4 </td> |
<td> 1k </td> |
</tr> |
<tr> |
<td> R6, R7, R8, R9 </td> |
<td> 10k </td> |
</tr> |
<tr> |
<td> R5 </td> |
<td> 47k </td> |
</tr> |
<tr> |
<th colspan="2"> Odporové trimry </th> |
</tr> |
<tr> |
<td> P1 </td> |
<td> 47k </td> |
</tr> |
<tr> |
<th colspan="2"> Keramické kondenzátory </th> |
</tr> |
<tr> |
<td> C1 </td> |
<td> 100nF </td> |
</tr> |
<tr> |
<th colspan="2"> Polovodiče </th> |
</tr> |
<tr> |
<td> D1 </td> |
<td> 1N4004 </td> |
</tr> |
<tr> |
<td> U1 </td> |
<td> LCD SC1602A </td> |
</tr> |
<tr> |
<th colspan="2"> Mechanické součástky </th> |
</tr> |
<tr> |
<td> SW1, SW2, SW3, SW4 </td> |
<td> P-DT6GE </td> |
</tr> |
<tr> |
<td> J4 </td> |
<td> JUMP1 </td> |
</tr> |
<tr> |
<td> J5, J7 </td> |
<td> JUMP2 </td> |
</tr> |
<tr> |
<td> J6 </td> |
<td> JUMP3 </td> |
</tr> |
<tr> |
<td> J1+J2 </td> |
<td> JUMP2X3 </td> |
</tr> |
<tr> |
<td> J8, J9 </td> |
<td> JUMP2X4 </td> |
</tr> |
<tr> |
<td> J3 </td> |
<td> JUMP2X8 </td> |
</tr> |
</table> |
|
<h2> Ovládání LCD displeje </h2> |
|
<p> |
LCD displej se ovládá zápisem do řídících registrů (RS=0), do paměti pro |
zobrazovaný text (DD RAM) nebo do paměti definice znaků (CG RAM). Z |
pamětí DD RAM a CG RAM je možné rovněž číst ale tato funkce nebývá |
potřebná a je možné trvale čtení deaktivovat (RW=0). |
</p> |
|
<p> |
Zápis (i čtení) může buď probíhat najednou po 8 bitech nebo nadvakrát po |
4 bitech. Druhý způsob je výhodný z hlediska snížení počtu portů |
procesoru, ke kterému je displej připojen. Pozor, pro čtyřbitový provoz |
se používají vývody D7 až D4. |
</p> |
|
<p> |
Obsah paměti DD RAM definuje (v ASCII kódu + japonské znaky), co se bude |
zobrazovat. Pro jednotlivé řádky je vyhrazen určitý rozsah adres v DD RAM |
ze kterého je vidět jen výřez. Je možné volit, zda se při zápisu znaků do |
DD RAM automaticky zvyšuje adresa do které se zapisuje nebo zda se |
posouvá okno. Posouvání okna je možné řídit nezávisle a je tam možné |
snadno realizovat běžící text. |
</p> |
|
<table> |
<tr> |
<th rowspan="2"> Instrukce </th> |
<th colspan="2" class="Center"> Řízení </th> |
<th colspan="8" class="Center"> Datová sběrnice </th> |
</tr> |
<tr> |
<th> RS </th> |
<th> RW </th> |
<th> D7 </th> |
<th> D6 </th> |
<th> D5 </th> |
<th> D4 </th> |
<th> D3 </th> |
<th> D2 </th> |
<th> D1 </th> |
<th> D0 </th> |
</tr> |
<tr> |
<td> <b>Smaž displej a nuluj adresu DD</b> </td> |
<td> 0 </td> |
<td> 0 </td> |
<td> 0 </td> |
<td> 0 </td> |
<td> 0 </td> |
<td> 0 </td> |
<td> 0 </td> |
<td> 0 </td> |
<td> 0 </td> |
<td> 1 </td> |
</tr> |
<tr> |
<td> <b>Nuluj adresu DD na 0 a zruš posunutí</b> </td> |
<td> 0 </td> |
<td> 0 </td> |
<td> 0 </td> |
<td> 0 </td> |
<td> 0 </td> |
<td> 0 </td> |
<td> 0 </td> |
<td> 0 </td> |
<td> 1 </td> |
<td> * </td> |
</tr> |
<tr> |
<td> <b>Nastavení pohybu kurzoru</b> </td> |
<td> 0 </td> |
<td> 0 </td> |
<td> 0 </td> |
<td> 0 </td> |
<td> 0 </td> |
<td> 0 </td> |
<td> 0 </td> |
<td> 1 </td> |
<td> ID </td> |
<td> S </td> |
</tr> |
<tr> |
<td> <b>Nastavení módu displeje</b> </td> |
<td> 0 </td> |
<td> 0 </td> |
<td> 0 </td> |
<td> 0 </td> |
<td> 0 </td> |
<td> 0 </td> |
<td> 1 </td> |
<td> D </td> |
<td> C </td> |
<td> B </td> |
</tr> |
<tr> |
<td> <b>Okamžitý posuv kurzoru nebo textu</b> </td> |
<td> 0 </td> |
<td> 0 </td> |
<td> 0 </td> |
<td> 0 </td> |
<td> 0 </td> |
<td> 1 </td> |
<td> SC </td> |
<td> RL </td> |
<td> * </td> |
<td> * </td> |
</tr> |
<tr> |
<td> <b>Nastavení funkce displeje</b> </td> |
<td> 0 </td> |
<td> 0 </td> |
<td> 0 </td> |
<td> 0 </td> |
<td> 1 </td> |
<td> DL </td> |
<td> N </td> |
<td> F </td> |
<td> * </td> |
<td> * </td> |
</tr> |
<tr> |
<td> <b>Nastavení adresy CG</b> </td> |
<td> 0 </td> |
<td> 0 </td> |
<td> 0 </td> |
<td> 1 </td> |
<td> A5 </td> |
<td> A4 </td> |
<td> A3 </td> |
<td> A2 </td> |
<td> A1 </td> |
<td> A0 </td> |
</tr> |
<tr> |
<td> <b>Nastavení adresy DD</b> </td> |
<td> 0 </td> |
<td> 0 </td> |
<td> 1 </td> |
<td> A6 </td> |
<td> A5 </td> |
<td> A4 </td> |
<td> A3 </td> |
<td> A2 </td> |
<td> A1 </td> |
<td> A0 </td> |
</tr> |
<tr> |
<td> <b>Čtení adresy a busy bitu</b> </td> |
<td> 0 </td> |
<td> 1 </td> |
<td> BF </td> |
<td> A6 </td> |
<td> A5 </td> |
<td> A4 </td> |
<td> A3 </td> |
<td> A2 </td> |
<td> A1 </td> |
<td> A0 </td> |
</tr> |
<tr> |
<td> <b>Zápis dat</b> </td> |
<td> 1 </td> |
<td> 0 </td> |
<td> D7 </td> |
<td> D6 </td> |
<td> D5 </td> |
<td> D4 </td> |
<td> D3 </td> |
<td> D2 </td> |
<td> D1 </td> |
<td> D0 </td> |
</tr> |
<tr> |
<td> <b>Čtení dat</b> </td> |
<td> 1 </td> |
<td> 1 </td> |
<td> D7 </td> |
<td> D6 </td> |
<td> D5 </td> |
<td> D4 </td> |
<td> D3 </td> |
<td> D2 </td> |
<td> D1 </td> |
<td> D0 </td> |
</tr> |
</table> |
|
<table> |
<tr> |
<th> Bit </th> |
<th> Popis </th> |
</tr> |
<tr> |
<td> S=1 </td> |
<td> Při zápisu/čtení dat se bude posouvat celý displej (směr určuje bit ID) </td> |
</tr> |
<tr> |
<td> S=0 </td> |
<td> Při zápisu/čtení dat se bude posouvat jen kursor (směr určuje bit ID) </td> |
</tr> |
<tr> |
<td> ID=1 </td> |
<td> Při zápisu/čtení dat je ukazatel adresy inkrementován </td> |
</tr> |
<tr> |
<td> ID=0 </td> |
<td> Při zápisu/čtení dat je ukazatel adresy dekrementován </td> |
</tr> |
<tr> |
<td> B=1 </td> |
<td> Blikající znak na pozici kurzoru </td> |
</tr> |
<tr> |
<td> B=0 </td> |
<td> Znak nebliká </td> |
</tr> |
<tr> |
<td> C=1 </td> |
<td> Zapnutí kurzoru </td> |
</tr> |
<tr> |
<td> C=0 </td> |
<td> Vypnutí kurzoru </td> |
</tr> |
<tr> |
<td> D=1 </td> |
<td> Zapnutí displeje </td> |
</tr> |
<tr> |
<td> D=0 </td> |
<td> Vypnutí displeje </td> |
</tr> |
<tr> |
<td> RL=1 </td> |
<td> Okamžitý posuv doprava </td> |
</tr> |
<tr> |
<td> RL=0 </td> |
<td> Okamžitý posuv doleva </td> |
</tr> |
<tr> |
<td> SC=1 </td> |
<td> Okamžitý posuv textu </td> |
</tr> |
<tr> |
<td> SC=0 </td> |
<td> Okamžitý posuv kurzoru </td> |
</tr> |
<tr> |
<td> F=1 </td> |
<td> Znaky v rastru 5x10 </td> |
</tr> |
<tr> |
<td> F=0 </td> |
<td> Znaky v rastru 5x7 (běžné) </td> |
</tr> |
<tr> |
<td> N=1 </td> |
<td> Počet řádek displeje 2 nebo 4 </td> |
</tr> |
<tr> |
<td> N=0 </td> |
<td> Počet řádek displeje 1 (některé jednořádkové displeje jsou |
dvouřádkové – místo řádek mají levou a pravou polovinu) </td> |
</tr> |
<tr> |
<td> DL=1 </td> |
<td> Přenos dat 8 bitů </td> |
</tr> |
<tr> |
<td> DL=0 </td> |
<td> Přenos dat 4 bity (používají se vodiče D7 až D4) </td> |
</tr> |
<tr> |
<td> BF=1 </td> |
<td> Bussy – probíhá vnitřní operace </td> |
</tr> |
<tr> |
<td> BF=0 </td> |
<td> Ready – je možné posílat instrukce </td> |
</tr> |
</table> |
|
<h2> Mechanická konstrukce </h2> |
|
<p> |
Mechanická konstrukce je standardní. Displej je přišroubován šrouby M2.5, |
jako distanční podložky mezi displej a plošný spoj je možné použít |
matičky M3. |
</p> |
|
<h1> Osazení a oživení </h1> |
|
<h2> Osazení </h2> |
|
<p> |
Strana součástí |
</p> |
|
<p> |
<img width="530" height="319" src="Pictures/image005.jpg" |
alt="Oszení, strana součástí"> |
</p> |
|
<p> |
Strana spojů |
</p> |
|
<p> |
<img width="529" height="319" src="Pictures/image006.jpg" |
alt="Osazení, strana spojů"> |
</p> |
|
<h2> Oživení </h2> |
|
<p> |
Pokud jsou součásti, plošný spoj a pájení v pořádku není co oživovat. |
</p> |
|
<h1> Programové vybavení </h1> |
|
<p> |
Pro ovládání LCD displeje procesorem PIC je připraven knihovní modul |
LCD.C napsaný v jazyce C pro překladač CCS. |
</p> |
|
<h2> Uživatelský návod </h2> |
|
<p> |
V programu, který bude ovládat LCD displeje je třeba definovat připojení |
LCD displeje a včlenit knihovnu LCD.C do zdrojového programu. První |
příklad ukazuje jak se definuje připojení LCD displeje, když jsou datové |
bity displeje připojeny na libovolné porty procesoru: |
</p> |
|
<p> |
<code>#define LCD_RS PIN_A2 // Signal RS</code><br> |
<code>#define LCD_E PIN_A3 // Signal E</code><br> |
<code>#define LCD_D0 PIN_A4 // Data</code><br> |
<code>#define LCD_D1 PIN_B1</code><br> |
<code>#define LCD_D2 PIN_B2</code><br> |
<code>#define LCD_D3 PIN_B3</code><br> |
<code>#include <LCD.C></code> |
<p> |
|
<p> |
Následující příklad zobrazuje připojení, kdy jsou jednotlivé bity datové |
sběrnice displeje připojeny na jediný port procesoru za sebou: |
</p> |
|
<p> |
<code>#define LCD_RS PIN_A2 // Signal RS</code><br> |
<code>#define LCD_E PIN_A3 // Signal E</code><br> |
<code>#define LCD_DATA_LSB PIN_C2 // 4 bity za sebou</code><br> |
<code>#include <LCD.C></code> |
<p> |
|
<p> |
Pak je třeba LCD displej inicializovat (například ve funkci main() ): |
</p> |
|
<p> |
<code>lcd_init();</code> |
</p> |
|
<p> |
Pak je možné buď posílat znaky na displej rovnou pomocí funkce LCD_putc() |
nebo prostřednictvím funkce printf(): |
</p> |
|
<p> |
<code>LCD_Putc(0x40);</code><br> |
<code>printf(LCD_Putc,"\n\rText1\r\nText2\n\r");</code> |
</p> |
|
<p> |
V případě potřeby je možné nadefinovat nové znaky (až 8 znaků najednou). |
Jejich tvar se uloží do CG RAM v displeji a je možné je zobrazit jako |
znaky s kódem 0x00 až 0x07 (nebo 0x08 až 0x0F, 0x10 až 0x17 a 0x18 až |
0x1F). Tvary českých znaků a některých užitečných symbolů je již |
předpřipravena a používá se takto: |
</p> |
|
<p> |
<code>lcd_define_char(0,LCD_CHAR_BAT50);</code><br> |
<code>// Definice znaku baterie do pozice 0</code><br> |
<code>lcd_define_char(2,LCD_CHAR_HLE LCD_CHAR_LUI);</code><br> |
<code>// Definice znaků ě a Í od pozice 2</code><br> |
<code>// Mezi retezci s definici není carka</code><br> |
<code>printf(lcd_putc,"\fZnaky:\20\22\23");</code><br> |
<code>// Vypis znaku z pozice 0, 2 a 3</code><br> |
<code>delay_ms(1000);</code><br> |
<code>// Prodleva</code><br> |
<code>lcd_define_char(0,LCD_CHAR_BAT0);</code><br> |
<code>// Predefinovani tvaru znaku v pozici 0</code><br> |
<code>delay_ms(1000);</code><br> |
<code>// Prodleva</code> |
</p> |
|
<p> |
Do displeje je možné posílat řídící příkazy nebo displej řídit pomocnými |
funkcemi takto: |
</p> |
|
<p> |
\f = \x0C nová stránka = smazání displeje <br> |
\n = \x0A odřádkování = přechod na druhou řádku <br> |
\b = \x08 backspace = posunutí kurzoru o 1 pozici vlevo <br> |
\r = \x0D přesune se na pozici 1,1 <br> |
\0 .. \7 uživatelsky definovaný znak v pozici 0 až 7 v CG RAM <br> |
\20 .. \27 alternativní způsob jak vypsat uživatelsky definované znaky <br> |
(funkce printf() chápe znak 0 jako ukončení tisku) |
</p> |
|
<p> |
lcd_gotoxy(x,y) přesuň kurzor na uvedenou pozici (1,1 znamená domu) |
lcd_cursor_on() zapne kurzor |
lcd_cursor_off() vypne kurzor |
</p> |
|
<h2> Popis programu </h2> |
|
<p> |
V případě nejasnosti je vhodné nahlédnout do zdrojového textu LCD.C a |
případně vyhledat podrobnosti. Na konci souboru je uveden příklad |
definování uživatelských LCD znaků a hned před ním je definice konstant |
pro české znaky a některé pomocné znaky včetně jejich popisu. |
</p> |
|
<p> |
Aktuální verze LCD.C se může mírně lišit od výše uvedeného popisu, je |
proto třeba primárně vycházet z komentářů ve zdrojovém kódu. |
</p> |
|
</div> |
|
<!-- AUTOINCLUDE START "Page/Footer.cs.ihtml" DO NOT REMOVE --> |
<!-- ============== PATIČKA ============== --> |
<div class="Footer"> |
<script type="text/javascript"> |
<!-- |
SetRelativePath("../../../../../"); |
DrawFooter(); |
// --> |
</script> |
<noscript> |
<p><b> Pro zobrazení (vložení) hlavičky je potřeba JavaScript </b></p> |
</noscript> |
</div> |
<!-- AUTOINCLUDE END --> |
|
</body> |
</html> |