/*
Za?ínáme s novým p?ípravkem ATmega_lcd_uni, který je vybaven znakovým
LCD displejem a klávesnicí.
LCD displej má zobrazovací kapacitu dva ?ádky po šestnácti sloupcích (32 znak?)
znaky (písmenka a speciální znaky jsou uložené p?ímo v pam?ti displeje a
p?ibližn? odpovídají ASCII tabulce (viz datasheet displeje rc1602b-biw-esx)
Protože je ale výrobci jasné, že by n?kdo mohl chtít na displeji zobrazovat
i jiné znaky, než které jsou uvedeny v tabulce, ponechal 8 míst volných, kam
si m?žeme nahrát vlastní znaky V?tšinou se tato místa využívají pro písmena
s ?eskou interpunkcí (ta v základní tabulce nejsou)
Klávesnice je tvo?ena dv?ma ?adami po t?ech tla?ítkách, což je pro v?tšinu
aplikací dostate?ný po?et. Navíc je ke každému tla?ítku sériov? p?ipojena
dioda, a to tak, že lze rozlišit i více stisknutých tla?ítek najednou.
Je tedy možné používat dvojhmaty (i "vícehmaty"), což nám rozši?uje po?et
samotných tla?ítek o jejich vzájemné kombinace.
*/
/*
Jak už to v programování bývá, první co program napíše, je text "Hello World".
Náš první program tedy bude d?lat to samé, ale protože jsme ?eši, p?idáme
ješt? tuto hlášku v ?eštin?.
Nejprve ale musíme do našeho programu vložit rutiny pro komunikaci s displejem,
a soubor s konfigurací pin? mikrokontroléru pro tento p?ípravek.
jedná se o soubory "atmega_lcd_uni_cfg.c" a "lcd.c".
Soubor "atmega_lcd_uni_cfg.c" obsahuje informace o tom, ke kterým pin?m je
p?ipojen displej a ke kterým je p?ipojena klávesnice. Musí být proto vložen
ješt? p?ed souborem "lcd.c".
Soubor "lcd.c" obsahuje rutiny pro práci s displejem. Nemusíme se tedy starat
o to jak s displejem komunikovat, ale m?žeme již rovnou na n?j posílat data
pomocí již hotových funkcí.
Funkce v souboru "lcd.c" jsou:
void lcd_ini (void);//inicializace displeje (nastavení pin? a zahájení komunikace)
void lcd_char (unsigned char dat);//napíše znak pomocí ASCII kódu (písmena, ?ísla)
void lcd_num3 (unsigned int num,unsigned char znak);//napíše cislo (3 cifry)
void lcd_num2 (unsigned char num,unsigned char znak);//napíše cislo (2 cifry) //znak = uvodni znak misto nul
void lcd_byt (unsigned char byt) //napíše bajt (?íslo 0..255) bez úvodních nul
void lcd_text (char* text);//napíše textový ?et?zec (umíst?ný v pam?ti RAM)
void lcd_ftext (const char* text);//napíše textový ?et?zec umíst?ný v pam?ti FLASH
void lcd_instr (unsigned char ins);//pošle displeji instrukci
void cls (void) //vymaže displej
void cursor_off (void) //vypni kurzor
void cursor_on (void) //zapni kurzor
void cursor_blink (void) //kurzor blika
void shift_lcd_left (void) //posun text doleva
void shift_lcd_right(void) //posun text doprava
void gotoxy (unsigned char lin,unsigned char col) //nastav kurzor na ?ádek (lin) a sloupec (col)
*/
/*
M?žeme se tedy pustit do psaní programu:
*/
#define F_CPU 1000000 // Taktovací frekvence procesoru 1 MHz
#include <avr/io.h> //Knihovna vstup? a výstup?
#include "atmega_lcd_uni_cfg.c" //konfigurace vstup? a výstup? pro p?ípravek ATmega_lcd_uni
#include "lcd.c" //Obslužné rutiny pro display
/*
Aby soubory "atmega_lcd_uni_cfg.c" a "lcd.c" šly vložit, musejí být ve stejné
složce jako zdrojový kód tohoto programu (tento soubor).
jinak je pot?eba cestu v direktiv? "#include" náležit? upravit.
*/
intmain(void)
{
lcd_ini();//inicializace displeje (nastavení výstupních pin? a zahájení komunikace)
cls();//p?íkaz pro smazání displeje - te? by na n?m sice nem?lo //nic být, ale pro jistotu
gotoxy(1,1);//nastavíme kurzor na za?átek prvního ?ádku (?ádek 1, znak 1)
lcd_text("Hello World!");//napíšeme text
gotoxy(2,1);//nastavíme kurzor na za?átek druhého ?ádku (?ádek 2, znak 1)
lcd_text("Ahoj Svete!");//napíšeme ?eský text
while(1)//hlavní smy?ka
{
;// nic se ned?lá (po?ád dokola)
}
}
//konec programu
//Pro radioklub OK1KVK naspal Vašek Král