AVR - LCD panel - #1 Program Tisk
Koutek AVR -
Napsal uživatel Michal, OK1WMR   
Středa, 14 Březen 2012 09:09

Kompatibilní zapojení: LCD panel s ATmega8

Ke stažení: LCD_001.c == LCD_001.pdf == LCD_001.htm
.
.


Untitled
/*
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. */ int main(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