/* ** =================================================================== ** Název souboru : lcd_c.c ** Mikrokontroler : ATmega16 ** Popis : Funkce pro ovládání lcd displeje ** ** Autor : Peter Fleury ( http://homepage.hispeed.ch/peterfleury/ ) ** : Tomáš Frýza ( fryza@feec.vutbr.cz ) ** Předmět : Mikroprocesorová technika ** Poslední změna : 06.11.06 18:40 ** =================================================================== */ /* ** Hlavičkové soubory */ #include // hlavičkový soubor pro mikrokontrolér ATmega16 #define F_CPU 6144000UL // frekvence hodinového signálu (nutné pro delay.h) #include // hlavičkový soubor pro zpoždění #include "lcd_h.h" // hlavičkový soubor pro obsluhu lcd /* ** Globální proměnné */ unsigned char x,y ; // pomocné souřadnice pozice kurzoru /* ** =================================================================== ** Název funkce : lcd_clrscr ** ** Popis : Smazání obsahu lcd displeje. ** Parametry : žádné ** Výst. hodnota : žádné ** =================================================================== */ void lcd_clrscr( void ) { lcd_command( 0x00000001 ) ; x = 0 ; y = 0 ; _delay_ms( 16 ) ; } /* ** =================================================================== ** Název funkce : lcd_command ** ** Popis : Zápis 1bytové instrukce do lcd displeje. ** Parametry : data - instrukce pro lcd diplej ** Výst. hodnota : žádné ** =================================================================== */ void lcd_command( char data ) { lcd_write( data, 0 ) ; } /* ** =================================================================== ** Název funkce : lcd_data ** ** Popis : Zápis 1bytového datového slova do lcd displeje. ** Parametry : data - data pro lcd displej ** Výst. hodnota : žádné ** =================================================================== */ void lcd_data( char data ) { lcd_write( data, 1 ) ; } /* ** =================================================================== ** Název funkce : lcd_write ** ** Popis : Zápis instrukce nebo dat do lcd displeje. ** Parametry : data - instrukce/data pro lcd diplej ** rs - 0: instrukce; 1: data ** Výst. hodnota : žádné ** =================================================================== */ void lcd_write( char data, char rs ) { unsigned char temp ; if( rs ) lcd_rs_high() ; else lcd_rs_low() ; temp = LCD_PORT & 0x0f ; LCD_PORT = temp | ( data & 0xf0 ) ; lcd_e_toggle() ; LCD_PORT = temp | (( data & 0x0f ) << 4 ) ; lcd_e_toggle() ; LCD_PORT = temp | 0xf0 ; _delay_ms( 2 ) ; } /* ** =================================================================== ** Název funkce : toggle_e ** ** Popis : Realizace jednoho "enable" pulsu pro lcd displej. ** Parametry : žádné ** Výst. hodnota : žádné ** =================================================================== */ void toggle_e( void ) { lcd_e_high() ; lcd_e_delay() ; lcd_e_low() ; } /* ** =================================================================== ** Název funkce : lcd_gotoxy ** ** Popis : Přesun kurzoru na pozici x,y lcd displeje. ** Parametry : x_,y_ - nové pozice kurzoru lcd displeje ** Výst. hodnota : žádné ** =================================================================== */ void lcd_gotoxy( char x_, char y_ ) { if( y_ == 0 ) { lcd_command(( 1<