/*--------------------------------------------*/
/*----------------header files----------------*/
/*--------------------------------------------*/
#include <REG51xD2.H>
#include <stdio.h>
#include <stdlib.h>
#include "screen_button.h"
#include "SPI.h"
#include "LCD.h"
#include "MODBUS.h"
#include "SPI.h"

/*------------------------------------globální promenné------------------------------------*/
 int DAC_value_channel1;			// hodnota pro DA prevodník kanál1
 int DAC_value_channel2;			// hodnota pro DA prevodník kanál2
 char page;							// císlo stránky
 char select_menu;					// promenná pro výber z menu
 char select_sub_menu;	    		// výber položky z menu
 char select_input;	 				// výber digitálního vstupu
 char select_output;				// výber digitálního výstupu
 char select_da_channel;			// výber kanálu DA prevodníku 
 char select_set;					// výber položky z nastavení
 char select_kon;					// výber položky z nastavení LCD
 unsigned char menu_x1;	   			// souradnice rádku x1 pro oznacování položek menu 
 unsigned char menu_x2;				// souradnice rádku x2 pro oznacování položek menu 
 unsigned char input_x1;			// souradnice rádku x1 pro oznacování digitálních vstupu 
 unsigned char input_x2;			// souradnice rádku x2 pro oznacování digitálních vstupu
 unsigned char output_x1;			// souradnice rádku x1 pro oznacování digitálních výstupu
 unsigned char output_x2;			// souradnice rádku x2 pro oznacování digitálních výstupu
 unsigned char set_x1;				// souradnice rádku x1 pro oznacování položek v nastavení
 unsigned char set_x2;				// souradnice rádku x2 pro oznacování položek v nastavení
 char force_input[9];	    		// pole pro nastavení(force) digitálních vstupu
 char force_output[9];				// pole pro nastavení(force) digitálních výstupu
 unsigned char modbus_input;	    // promenná pro zaslání stavu digitálních vstupu pres modbus
 unsigned char modbus_output;		// promenná pro zápis stavu digitálních výstupu pres modbus 
 unsigned char modbus_output_read;	// promenná pro zaslání stavu difitálních výstupu pres modbus
 bit setting;						// pomocná promenná pro nastavení(vybraná položka je v režimu nastavování)
 bit setting_da_channel1;			// pomocná promenná pro nastavení DA(vybraný kanál je v režimu nastavování)
 bit setting_da_channel2;			// pomocná promenná pro nastavení DA(vybraný kanál je v režimu nastavování)
 unsigned char set_rychlost;		// pomocná promenná pro nastavení komunikacní rychlosti
 unsigned char set_parita;			// pomocná promenná pro nastavení parity
 unsigned int  set_kontrast;		// pomocná promenná pro nastavení kontrastu LCD
 unsigned int set_led;				// pomocná promenná pro nastavení podsvetlení LCD
 unsigned char char_adresa[3];		// pole znaku pro vykreslování MODBUS adresy na LCD
 unsigned char char_rychlost[7];	// pole znaku pro vykreslování komunikacni rychlosti na LCD
 unsigned char char_parita[5];		// pole znaku pro vykreslování parity na LCD
 unsigned char char_kontrast[4];	// pole znaku pro vykreslování kontrastu LCD na LCD
 unsigned char char_led[4];			// pole znaku pro vykreslování podsvetlení LCD na LCD
 unsigned char char_value_da[8];	// pole znaku pro vykreslování hodnot DA prevodníku
 bit button_up;						// pomocný bit pro test rozepnutí tlacítka
 unsigned int lcd_sleep;			// cítac prekrocení casu 10ms  	
   

/*------------------preruseni od casovace 1 (vyuziva 2. banku registru)-------------------*/
void timer1 (void) interrupt 3 using 2		
{
	lcd_sleep++;							// pri preteceni casovace1 se navysi lcd_sleep o 1
	ET1=0;								    // zakázání preruseni od casovace 1
	TL1 = 0xB0;		    					// napleni TL1 predvolbou
	TH1 = 0x3C;								// naplneni TH1 predvolbou
	TF1=0;									// vynulovaní príznaku pretecení
	ET1=1;		 						    // povolení prerušení od casovace 1
}
/*-----------------------------inicializace I/O,nastavení,D/A-----------------------------*/ 
void init_output_input_setting(){
 int i;

	LCD_LED_ON(1);					// vypnutí LCD podsvetlení
	P2 = 0xFF;				 		// nastavení výstupního portu(0xFF = vsechny výstupy OFF(kvuli fyzickému zapojení))
	Potenciometr(0x00);				// nastavení elektronického potenciometru na 0 - max. hodnota intenzity podsvetlení
	DAC_value_channel1 = 0;			// vynulování hodnoty pro D/A prevodník kanál 1
	DAC_value_channel2 = 0;			// vynulování hodnoty pro D/A prevodník kanál 2

	for(i=0;i<9;i++){				// cyklus vynulování pole pro nastavení dig. vstupu a výstupu
		force_input[i] = 0;			// vynulování pole pro digitální vstupy
		force_output[i] = 0;		// vynulování pole pro digitální výstupy
	}
	modbus_input = 0x00;			// vynulování promenné ctení stavu digitálních vstupu pres modbus
	modbus_output = 0x00;			// vynulování promenné zápis stavu digitálních výstupu pres modbus
	modbus_output_read = 0x00;	    // vynulování promenné ctení stavu digitálních výstupu pres modbus
	set_rychlost = 5;				// defaultní nastavení prenosové rychlosti na 115200 tedy hodnota 5
	setting = 0;					// vynulování promenné pro signalizaci nastavovacího rezimu
	setting_da_channel1	= 0;		// vynulování promenné pro signalizaci nastavovacího rezimu u D/A kanál 1
	setting_da_channel2 = 0;		// vynulování promenné pro signalizaci nastavovacího rezimu u D/A kanál 2
	sprintf(char_adresa,"%d",MODBUS_ADDRES);	// prevod z int na string modbus adresa pro vykreslení na LCD
	sprintf(char_rychlost,"%lu",BAUD_RATE);		// prevod z long na string prenosová rychlost pro vykreslení na LCD
	set_parita = PARITA;						// císlo nastavené parity
	switch(PARITA){								// podle parity výber retezce pro tisk na LCD
		case 0: sprintf(char_parita,"ZADNA");	// 0 - parita zádná
		case 1: sprintf(char_parita,"LICHA");	// 1 - parita lichá
		case 2: sprintf(char_parita,"SUDA");;	// 2 - parita sudá
	}
	set_kontrast = 0x3F;						// defaultní kontrast
	set_led	= 0x00;								// defaultní podsvetlení(max. hodnota)
	lcd_sleep = 0;								// vynulování cítace
	TL1 = 0xB0;		    						// napleni TL1 predvolbou
	TH1 = 0x3C;									// naplneni TH1 predvolbou
	TF1 = 0;									// vynulovaní príznaku pretecení
	ET1 = 1;		 						    // povolení prerušení od casovace 1
	TR1 = 1;									// start casovace 1
}
/*-----------------------------------hlavní strana LCD------------------------------------*/
void main_page(){
	LCDSetRect(115,1,130,130,FILL,BLUE);				// vykreslení horní modrá lišta
	LCDSetRect(1,1,15,130,FILL,BLUE); 					// vykreslení spodní modrá lišta
	LCDPutStr("MENU",4,53,SMALL,WHITE,BLUE);			// vykreslení tlacitka MENU	       
	LCDPutStr("PRUMYSLOVY",100,25,MEDIUM,BLACK,WHITE);	// vykreslení názvu PRUMYSLOVY
	LCDPutStr("STAVOVY",80,37,MEDIUM,BLACK,WHITE); 		// vykreslení názvu STAVOVY
	LCDPutStr("INDIKATOR",60,29,MEDIUM,BLACK,WHITE);  	// vykresleni názvu INDIKATOR
	LCDPutStr("VUT BRNO",16,83,SMALL,BLACK,WHITE);	    // vykreslení názvu VUT BRNO vpravo dole
	page = 0;	   										// nastavení, ze je jedná a 0 stranku
	select_menu = 1;									// nastaveni pro následné oznacení 1. položky menu
	select_sub_menu = 0; 								// nastavení sub menu na 0
	menu_x1 = 102;										// nastavení souradnice x1 pro položky MENU
	menu_x2 = 106;										// nastavení souradnice x2 pro položky NEMU
}
/*-------------------------------------hlavní menu LCD------------------------------------*/													
void main_menu(){
    LCDPutStr("ZPET",4,5,SMALL,WHITE,BLUE);					// vykreslení ZPET
	LCDPutStr("ZVOLIT",4,90,SMALL,WHITE,BLUE); 				// vykresleni ZVOLIT
	LCDPutStr("MENU",119,49,MEDIUM,WHITE,BLUE);				// vykreslení MENU v horní lište
    LCDPutStr("DIGITALNI VSTUPY",100,12,SMALL,BLACK,WHITE);  // vykreslení položky DIG. VSTUPY
    LCDPutStr("DIGITALNI VYSTUPY",80,12,SMALL,BLACK,WHITE); // vykreslení položky DIG. VYSTUPY
    LCDPutStr("ANALOGOVE VSTUPY",60,12,SMALL,BLACK,WHITE); 	// vykreslení položky ANALOG. VSTUPY
    LCDPutStr("ANALOGOVE VYSTUPY",40,12,SMALL,BLACK,WHITE); // vykreslení položky ANALOG. VYSTUPY
    LCDPutStr("NASTAVENI",20,12,SMALL,BLACK,WHITE);  		// vykreslení položky NASTAVENÍ
	switch(select_menu){									// podle vybrané záložky menu její oznaceni
		case 1: LCDSetRect(102,4,106,8,FILL,BLACK);break;	// oznacení • v sub menu DIG. VSTUPY
		case 2: LCDSetRect(82,4,86,8,FILL,BLACK);break;		// oznacení • v sub menu DIG. VYSTUPY
		case 3: LCDSetRect(62,4,66,8,FILL,BLACK);break;		// oznacení • v sub menu ANALOG. VSTUPY
		case 4: LCDSetRect(42,4,46,8,FILL,BLACK);break;		// oznacení • v sub menu ANALOG. VYSTUPY
		case 5: LCDSetRect(22,4,26,8,FILL,BLACK);break;		// oznacení • v sub menu NASTAVENI
		default:break;
	}	  
    page = 1;			// nastavení, ze je jedná a 1. stranku
	select_set = 1;		// nastavení pro budoucí výber z NASTAVENI
	set_x1 = 92;	   	// nastavení souradnice x1 pro položky NASTAVENI
	set_x2 = 96;		// nastavení souradnice x2 pro položky NASTAVENI	 
}
/*-----------------------------------digitální vstupy-------------------------------------*/
void digital_input(){
	unsigned char i;

	LCDPutStr("DIGITALNI VSTUPY",119,2,MEDIUM,WHITE,BLUE);	// vykreslení DIG. VSTUPY na horní lište
	LCDPutStr("INPUT 1:",100,12,SMALL,BLACK,WHITE);			// vykreslení INPUT 1: 
	LCDPutStr("INPUT 2:",90,12,SMALL,BLACK,WHITE);			// vykreslení INPUT 2: 
	LCDPutStr("INPUT 3:",80,12,SMALL,BLACK,WHITE);			// vykreslení INPUT 3:
	LCDPutStr("INPUT 4:",70,12,SMALL,BLACK,WHITE);			// vykreslení INPUT 4: 
	LCDPutStr("INPUT 5:",60,12,SMALL,BLACK,WHITE);			// vykreslení INPUT 5: 
	LCDPutStr("INPUT 6:",50,12,SMALL,BLACK,WHITE);		    // vykreslení INPUT 6: 
	LCDPutStr("INPUT 7:",40,12,SMALL,BLACK,WHITE);			// vykreslení INPUT 7: 
	LCDPutStr("INPUT 8:",30,12,SMALL,BLACK,WHITE);		    // vykreslení INPUT 8: 
	LCDPutChar('[',18,12,MEDIUM,GREEN,WHITE);				// vykreslení zelené signalizace vlevo dole
	LCDPutStr("=TRUE",17,20,SMALL,BLACK,WHITE);				// vykreslení u zelené signalizace, ze se jedná o TRUE  (informace jak vypadá vstup ve stavu 1)
	if(force_input[1] == 1)LCDPutStr("OFF",61,110,SMALL,BLACK,WHITE);	// test zda-li je INPUT 1 ve stavu ON a podle toho vykreslit stav OFF u nastavovacího tlacitka
	else LCDPutStr("ON",61,116,SMALL,BLACK,WHITE);						// není-li ve stavu 1 tak u nastavovacího tlacítka vykreslit stav ON
	page = 2;												// nastavení, ze je jedná a 2. stranku
	select_sub_menu = 1;									// nastavení, ze jsme v 1. sub menu 
	select_input = 1;										// nastavení na 1. vstup  
	input_x1 = 102;	   										//nastavení souradnice x1 pro INPUT1
	input_x2 = 106;											//nastavení souradnice x2 pro INPUT1
	LCDSetRect(input_x1,4,input_x2,8,FILL,BLACK);			//oznaceni • INPUT 1
	for(i=1;i<9;i++){										// cyklus ctení pole pro force intup a oznacování vstupu
		if(force_input[i]==1){								// jestlize daný force input je 1
			LCDPutStr("F",input_x1-2,75,MEDIUM,GREEN,WHITE);	// oznacení F u zelené signalizace
			LCDPutChar('[',input_x1-1,65,MEDIUM,GREEN,WHITE);	// oznacení zelenou signalizací
		}
		input_x1 -= 10;										// souradnice x1 na oznacení dalšího dig. vstupu
		input_x2 -= 10;										// souradnice x2 na oznacení dalšího dig. vstupu
	}
	input_x1 = 102;	 										//zpet nastavení souradnice x1 na INPUT 1:
	input_x2 = 106;											//zpet nastavení souradnice x2 na INPUT 1:
}
/*-----------------------------------digitální výstupy------------------------------------*/
void digital_output(){
	unsigned char i;

	LCDPutStr("DIGITAL VYSTUPY",119,5,MEDIUM,WHITE,BLUE);	// vykreslení DIG. VYSTUPY na horní lište
	LCDPutStr("OUTPUT 1:",100,12,SMALL,BLACK,WHITE);		// vykreslení OUTPUT 1:
	LCDPutStr("OUTPUT 2:",90,12,SMALL,BLACK,WHITE);			// vykreslení OUTPUT 2: 
	LCDPutStr("OUTPUT 3:",80,12,SMALL,BLACK,WHITE);			// vykreslení OUTPUT 3: 
	LCDPutStr("OUTPUT 4:",70,12,SMALL,BLACK,WHITE);			// vykreslení OUTPUT 4: 
	LCDPutStr("OUTPUT 5:",60,12,SMALL,BLACK,WHITE);		    // vykreslení OUTPUT 5: 
	LCDPutStr("OUTPUT 6:",50,12,SMALL,BLACK,WHITE);		    // vykreslení OUTPUT 6: 
	LCDPutStr("OUTPUT 7:",40,12,SMALL,BLACK,WHITE);		    // vykreslení OUTPUT 7: 
	LCDPutStr("OUTPUT 8:",30,12,SMALL,BLACK,WHITE);		    // vykreslení OUTPUT 8: 
	LCDPutChar('[',18,12,MEDIUM,RED,WHITE);					// vykreslení cervené signalizace vlevo dole 
	LCDPutStr("=ON",17,20,SMALL,BLACK,WHITE);				// vykreslení u cervené signalizace, ze je výstup ON (informace jak vypadá výstup ve stavu 1)
	if(force_input[1] == 1)LCDPutStr("OFF",61,110,SMALL,BLACK,WHITE); // test zda-li je 1. výstup  ve stavu ON a podle toho vykreslit stav OFF u nastavovacího tlacitka
	else LCDPutStr("ON",61,116,SMALL,BLACK,WHITE);					  // není-li ve stavu ON tak u nastavovacího tlacítka vykreslit stav ON
	page = 2;												// nastavení, ze je jedná a 2. stranku 
	select_sub_menu = 2;									// nastavení, ze jsme v 2. sub menu 
	select_output = 1;										// nastavení na 1. výstup 
	output_x1 = 102;	   									//nastavení souradnice x pro INPUT1
	output_x2 = 106;											 //nastavení souradnice y pro INPUT1
	LCDSetRect(output_x1,4,output_x2,8,FILL,BLACK);				 //oznaceni • OUTPUT 1
	for(i=1;i<9;i++){											 // cyklus ctení pole pro force output a oznacování výstupu
		if(force_output[i]==1){									 // jestlize daný force output je 1
			LCDPutStr("F",output_x1-2,75,MEDIUM,RED,WHITE);		 // oznacení F u cervené signalizace
			LCDPutChar('[',output_x1-1,65,MEDIUM,RED,WHITE);	 // oznacení cervenou signalizací
		}
		output_x1 -= 10;									// souradnice x1 na oznacení dalšího dig. výstupu
		output_x2 -= 10;									// souradnice x2 na oznacení dalšího dig. výstupu
	}
	output_x1 = 102;	 									//zpet nastavení souradnice x1 na OUTPUT 1:
	output_x2 = 106;										//zpet nastavení souradnice x2 na OUTPUT 1:
}
/*-----------------------------------analogové vstupy-------------------------------------*/
void analog_input(){
	LCDPutStr("ANALOGOVE VSTUPY",119,2,MEDIUM,WHITE,BLUE);	// vykreslení ANALOGOVE VSTUPY na horní lište
	LCDPutStr("CHANNEL 1:",100,5,SMALL,BLACK,WHITE);		// vykreslení CHANNLE 1: 
	LCDPutStr("CHANNEL 1:",90,5,SMALL,BLACK,WHITE);			// vykreslení CHANNLE 1: 
	LCDSetRect(69,15,76,116,NOFILL,BLACK);		  			// orámování baragrafu
	LCDPutChar('0',77,13,SMALL,BLACK,WHITE);				// 0 nad baragrafem
    LCDPutChar('1',77,23,SMALL,BLACK,WHITE);				// 1 nad baragrafem
	LCDPutChar('2',77,33,SMALL,BLACK,WHITE);				// 2 nad baragrafem
	LCDPutChar('3',77,43,SMALL,BLACK,WHITE);				// 3 nad baragrafem
	LCDPutChar('4',77,53,SMALL,BLACK,WHITE);				// 4 nad baragrafem	   
	LCDPutChar('5',77,63,SMALL,BLACK,WHITE);				// 5 nad baragrafem
	LCDPutChar('6',77,73,SMALL,BLACK,WHITE);				// 6 nad baragrafem
	LCDPutChar('7',77,83,SMALL,BLACK,WHITE);				// 7 nad baragrafem
	LCDPutChar('8',77,93,SMALL,BLACK,WHITE);				// 8 nad baragrafem
	LCDPutChar('9',77,103,SMALL,BLACK,WHITE);				// 9 nad baragrafem
	LCDPutStr("10",77,111,SMALL,BLACK,WHITE);				// 10 nad baragrafem
	LCDSetLine(65,1,65,130,BLACK);							// vykreslení delící linky
	LCDPutStr("CHANNEL 2:",50,5,SMALL,BLACK,WHITE);			// vykreslení CHANNLE 2: 
	LCDPutStr("CHANNEL 2:",40,5,SMALL,BLACK,WHITE);			// vykreslení CHANNLE 2: 
	LCDSetRect(19,15,26,116,NOFILL,BLACK);					// orámování baragrafu
	LCDPutChar('0',27,13,SMALL,BLACK,WHITE);				// 0 nad baragrafem
    LCDPutChar('1',27,23,SMALL,BLACK,WHITE);				// 1 nad baragrafem
	LCDPutChar('2',27,33,SMALL,BLACK,WHITE);				// 2 nad baragrafem
	LCDPutChar('3',27,43,SMALL,BLACK,WHITE);				// 3 nad baragrafem
	LCDPutChar('4',27,53,SMALL,BLACK,WHITE);				// 4 nad baragrafem
	LCDPutChar('5',27,63,SMALL,BLACK,WHITE);				// 5 nad baragrafem
	LCDPutChar('6',27,73,SMALL,BLACK,WHITE);				// 6 nad baragrafem
	LCDPutChar('7',27,83,SMALL,BLACK,WHITE);				// 7 nad baragrafem
	LCDPutChar('8',27,93,SMALL,BLACK,WHITE);				// 8 nad baragrafem
	LCDPutChar('9',27,103,SMALL,BLACK,WHITE);				// 9 nad baragrafem
	LCDPutStr("10",27,111,SMALL,BLACK,WHITE);				// 10 nad baragrafem
	page = 2;												// nastavení, ze je jedná a 2. stranku
    select_sub_menu = 3;									// nastavení, ze jsme v 3. sub menu 
}
/*-----------------------------------analogové výstupy------------------------------------*/
void analog_output(){
	LCDPutStr("ANALOG VYSTUPY",119,9,MEDIUM,WHITE,BLUE);	// vykreslení ANALOGOVE VYSTUPY na horní lište
	LCDPutStr("CHANNEL 1:",100,12,SMALL,BLACK,WHITE);		// vykreslení CHANNLE 1: 
	LCDPutStr("CHANNEL 1:",90,12,SMALL,BLACK,WHITE);		// vykreslení CHANNLE 1: 
	LCDSetRect(69,15,76,116,NOFILL,BLACK);		  			// orámování baragrafu
	LCDPutChar('0',77,13,SMALL,BLACK,WHITE);				// 0 nad baragrafem
    LCDPutChar('1',77,23,SMALL,BLACK,WHITE);				// 1 nad baragrafem
	LCDPutChar('2',77,33,SMALL,BLACK,WHITE);				// 2 nad baragrafem
	LCDPutChar('3',77,43,SMALL,BLACK,WHITE);				// 3 nad baragrafem
	LCDPutChar('4',77,53,SMALL,BLACK,WHITE);				// 4 nad baragrafem
	LCDPutChar('5',77,63,SMALL,BLACK,WHITE);				// 5 nad baragrafem
	LCDPutChar('6',77,73,SMALL,BLACK,WHITE);				// 6 nad baragrafem
	LCDPutChar('7',77,83,SMALL,BLACK,WHITE);				// 7 nad baragrafem
	LCDPutChar('8',77,93,SMALL,BLACK,WHITE);				// 8 nad baragrafem
	LCDPutChar('9',77,103,SMALL,BLACK,WHITE);				// 9 nad baragrafem
	LCDPutStr("10",77,111,SMALL,BLACK,WHITE);				// 10 nad baragrafem
	sprintf(char_value_da,"%2.2fV ",prevod_to_float(DAC_value_channel1));	// prevod(analogové napetí) z int na float a poté na retezec znaku
	LCDPutStr(char_value_da,100,78,MEDIUM,BLACK,WHITE);  					// vykreslení retezce na LCD
	sprintf(char_value_da,"%4d",DAC_value_channel1);					    // prevod int na retezec znaku
	LCDPutStr(char_value_da,90,78,MEDIUM,BLACK,WHITE);					    // vykreslení na LCD
	LCDSetLine(65,1,65,130,BLACK);							// vykreslení delící linky
	LCDPutStr("CHANNEL 2:",50,12,SMALL,BLACK,WHITE);		// vykreslení CHANNLE 2: 
	LCDPutStr("CHANNEL 2:",40,12,SMALL,BLACK,WHITE);		// vykreslení CHANNLE 2: 
	LCDSetRect(19,15,26,116,NOFILL,BLACK);			 		// orámování baragrafu
	LCDPutChar('0',27,13,SMALL,BLACK,WHITE);				// 0 nad baragrafem
    LCDPutChar('1',27,23,SMALL,BLACK,WHITE);				// 1 nad baragrafem
	LCDPutChar('2',27,33,SMALL,BLACK,WHITE);				// 2 nad baragrafem
	LCDPutChar('3',27,43,SMALL,BLACK,WHITE);				// 3 nad baragrafem
	LCDPutChar('4',27,53,SMALL,BLACK,WHITE);				// 4 nad baragrafem
	LCDPutChar('5',27,63,SMALL,BLACK,WHITE);				// 5 nad baragrafem
	LCDPutChar('6',27,73,SMALL,BLACK,WHITE);				// 6 nad baragrafem
	LCDPutChar('7',27,83,SMALL,BLACK,WHITE);				// 7 nad baragrafem
	LCDPutChar('8',27,93,SMALL,BLACK,WHITE);				// 8 nad baragrafem
	LCDPutChar('9',27,103,SMALL,BLACK,WHITE);				// 9 nad baragrafem
	LCDPutStr("10",27,111,SMALL,BLACK,WHITE);				// 10 nad baragrafem
	sprintf(char_value_da,"%2.2fV ",prevod_to_float(DAC_value_channel2));	// prevod(analogové napetí) z int na float a poté na retezec znaku
	LCDPutStr(char_value_da,50,78,MEDIUM,BLACK,WHITE); 						// vykreslení retezce na LCD
	sprintf(char_value_da,"%4d",DAC_value_channel2);						// prevod int na retezec znaku
	LCDPutStr(char_value_da,40,78,MEDIUM,BLACK,WHITE);						// vykreslení na LCD
	select_da_channel = 1;									// nastavení na 1 kanál
	LCDSetRect(102,4,106,8,FILL,BLACK);						// oznacení 1. kanálu DA prevodníku
	page = 2;												// nastavení, ze je jedná a 2. stranku 
    select_sub_menu = 4;									// nastavení, ze jsme v 4. sub menu 
}
/*--------------------------------------nastavení-----------------------------------------*/
void nastaveni(){
    LCDPutStr("ZPET",4,5,SMALL,WHITE,BLUE);					// vykreslení ZPET
	LCDPutStr("NASTAVENI",119,29,MEDIUM,WHITE,BLUE);		// vykreslení NASTAVENI na horní lište
	LCDPutStr("KOMUNIKACE A LCD",105,17,SMALL,BLACK,WHITE);	// vykreslení KOMUNIKACE A LCD 
	LCDPutStr("MODBUS ADRESA:",90,12,SMALL,BLACK,WHITE);	// vykreslení MODBUS ADRESA: 
	LCDPutStr(char_adresa,90,102,SMALL,BLACK,WHITE);		// vykreslení aktuální nastavené modbus adresy
	LCDPutStr("BITU/SEKUNDA:",75,12,SMALL,BLACK,WHITE);		// vykreslení BITU/SEKUNDA: 
	LCDPutStr(char_rychlost,75,94,SMALL,BLACK,WHITE);		// vykreslení aktuální nastavené prenosové rychlosti
    LCDPutStr("PARITA:",60,12,SMALL,BLACK,WHITE);			// vykreslení PARITA:
	LCDPutStr(char_parita,60,60,SMALL,BLACK,WHITE);			// vykreslení aktuální nastavené parity
	LCDPutStr("NASTAVENI LCD",45,12,SMALL,BLACK,WHITE);		// vykreslení NASTAVENI LCD
	page = 2;												// nastavení, ze je jedná a 2. stranku 
    select_sub_menu = 5;									// nastavení, ze jsme v 5. sub menu 
	switch(select_set){										// podle vybrané záložky nastavení její oznaceni
		case 1: LCDSetRect(92,4,96,8,FILL,BLACK);break;			 // oznaceni • MODBUS ADRESA 
		case 2: LCDSetRect(77,4,81,8,FILL,BLACK);break;			 // oznaceni • BITU/SEKUNDA
		case 3: LCDSetRect(62,4,66,8,FILL,BLACK);break;			 // oznaceni • PARITA 
		case 4: LCDSetRect(47,4,51,8,FILL,BLACK);				 // oznaceni • NASTAVENI LCD 
				LCDPutStr("ZVOLIT",4,90,SMALL,WHITE,BLUE);break; // vykresleni ZVOLIT
	}
}
/*------------------------------------nastavení LCD---------------------------------------*/
void nastaveni_lcd(){
	LCDPutStr("NASTAVENI LCD",119,13,MEDIUM,WHITE,BLUE);		// vykreslení NASTAVENI LCD v horní lište
	LCDPutStr("LCD KONTRAST",100,12,MEDIUM,BLACK,WHITE);		// vykreslení LCD KONTRAST
	LCDSetLine(65,1,65,130,BLACK);								// vykreselní delící linky
	LCDPutStr("LCD PODSVETLENI",50,12,MEDIUM,BLACK,WHITE);		// vykreslení LCD PODSVETLENI
	LCDSetRect(102,4,106,8,FILL,BLACK);			 				// oznaceni • LCD KONTRAST
	LCDSetRect(74,24,81,106,NOFILL,BLACK);		 				// orámování baragrafu kontrastu
	LCDSetRect(75,25,80,((set_kontrast-35)*2)+25,FILL,BLACK);	// výpocet a vykreslení baragrafu podle hodnoty kontrastu
	LCDSetRect(75,((set_kontrast-35)*2)+25,80,105,FILL,WHITE);	// výpocet a vykreslení baragrafu podle hodnoty kontrastu
	sprintf(char_kontrast,"%d ",set_kontrast);					// prevod nastaveného konstrastu na retezec znaku
	LCDPutStr(char_kontrast,83,59,SMALL,BLACK,WHITE);			// vykreslení hodnoty kontrastu nad baragrafem
	LCDPutStr("35",83,19,SMALL,BLACK,WHITE);					// vykreslení min hodnoty kontrastu
   	LCDPutStr("75",83,102,SMALL,BLACK,WHITE);					// vykreslení max hodnoty kontrastu
 	LCDSetRect(24,24,31,106,NOFILL,BLACK);		 				// orámování baragrafu podsvetlení
	LCDSetRect(25,25,30,(105-(set_led*4)),FILL,BLACK);			// výpocet a vykreslení baragrafu podle hodnoty podsvetlení
	LCDSetRect(25,(105-(set_led*4)),30,105,FILL,WHITE);			// výpocet a vykreslení baragrafu podle hodnoty podsvetlení
	sprintf(char_led,"%d ",(100-(set_led*5)));					// prevod nastaveného konstrastu na retezec znaku
	LCDPutStr(char_led,33,59,SMALL,BLACK,WHITE);				// vykreslení hodnoty kontrastu nad baragrafem
	LCDPutStr("0",33,19,SMALL,BLACK,WHITE);						// vykreslení min hodnoty kontrastu
   	LCDPutStr("100",33,102,SMALL,BLACK,WHITE);					// vykreslení max hodnoty kontrastu
	select_kon = 1;												// nastavení, ze se jedná o nastavení kontrastu 
	page = 3;													// nastavení, ze je jedná a 3. stranku
}  		
/*--------------------------------funkce pro tlacítko up----------------------------------*/
void function_button_up(){
	if(page == 1){													// test 1. stránky
		if(button_up == 0){											// test stisknutí a následné pustení tlacítka
			if(select_menu != 1){									// test, zda-li se nejedná o první položku menu
				LCDSetRect(menu_x1,4,menu_x2,8,FILL,WHITE);			// smazání minulého oznacení položky 
				LCDSetRect(menu_x1+20,4,menu_x2+20,8,FILL,BLACK);	// oznacení nové polozky menu
				menu_x1 += 20;										// posun souradnice x1 na novou položku
				menu_x2 += 20;										// posun souradnice x2 na novou položku
				select_menu--;										// dekrementace vybrané položky
			}
			else{												    // test - jedná se o první položku menu 
				menu_x1 = 22;									    // posun souradnice x1 na poslední položku menu
				menu_x2=26;											// posun souradnice x2 na poslední položku menu
				select_menu=5;										// nastavení vybrané položky menu na pátou(poslední)
				LCDSetRect(menu_x1+80,4,menu_x2+80,8,FILL,WHITE);	// smazání oznacení první položky
				LCDSetRect(menu_x1,4,menu_x2,8,FILL,BLACK);			// oznacení posledení položky
			}
			button_up = 1;											// nastavení signalizace stisknutí tlacítka
		}	
	}
	if((page == 2)&&(select_sub_menu == 1)){						// test 2. stránky a 1. položky menu (DIGITALNI VSTUPY)
		if(button_up == 0){											// test stisknutí a následné pustení tlacítka
			if(select_input != 1){									// test, zda-li se nejedná o první dig. vstup 
				LCDSetRect(input_x1,4,input_x2,8,FILL,WHITE);		// smazání minulého oznacení vstupu
				LCDSetRect(input_x1+10,4,input_x2+10,8,FILL,BLACK);	// oznacení nového vstupu
				input_x1 += 10;										// posun souradnice x1 na nový vstup
				input_x2 += 10;										// posun souradnice x2 na nový vstup
				select_input--;										// dekrementace vybraného vstupu
			}
			else{													// test - jedná se o první dig. vstup
				input_x1 = 32;										// posun souradnice x1 na poslední dig. vstup
				input_x2=36;										// posun souradnice x2 na poslední dig. vstup
				select_input=8;										// nastavení vybraného vstupu na 8.(poslední)
				LCDSetRect(input_x1+70,4,input_x2+70,8,FILL,WHITE);	// smazání oznacení prvního dig. vstupu
				LCDSetRect(input_x1,4,input_x2,8,FILL,BLACK);		// oznacení posledního dig. vstupu
			}
			button_up = 1;											// nastavení signalizace stisknutí tlacítka
		}
		if(force_input[select_input]==1){							// test zda-li je vybraný vstup nastavený do log.1
			LCDSetRect(61,116,69,129,FILL,WHITE);					// smazání minulého stavu u nastavovacího tlacítka
			LCDPutStr("OFF",61,110,SMALL,BLACK,WHITE);				// vykreslení stavu OFF u nastavovacího tlacítka
		}
		else{														// není-li vybraný vstup nastavený do log.1
			LCDSetRect(61,110,69,129,FILL,WHITE);					// smazání minulého stavu u nastavovacího tlacítka
		    LCDPutStr("ON",61,116,SMALL,BLACK,WHITE);				// vykreslení stavu ON u nastavovacího tlacítka
		}
	}
	if((page == 2)&&(select_sub_menu == 2)){						 // test 2. stránky a 2. položky menu (DIGITALNI VYSTUPY)
		if(button_up == 0){											 // test stisknutí a následné pustení tlacítka
			if(select_output != 1){									 // test, zda-li se nejedná o první dig. vystup 
				LCDSetRect(output_x1,4,output_x2,8,FILL,WHITE);		 // smazání minulého oznacení výstupu
				LCDSetRect(output_x1+10,4,output_x2+10,8,FILL,BLACK);// oznacení nového výstupu
				output_x1 += 10;									 // posun souradnice x1 na nový výstup
				output_x2 += 10;									 // posun souradnice x2 na nový výstup
				select_output--;									 // dektrementace vybraného výstupu
			}
			else{												     // test - jedná se o první dig. výstup
				output_x1 = 32;										 // posun souradnice x1 na poslední dig. výstup
				output_x2=36;										 // posun souradnice x2 na poslední dig. výstup
				select_output=8;									 // nastavení vybraného výstupu na osmý(poslední)
				LCDSetRect(output_x1+70,4,output_x2+70,8,FILL,WHITE);// smazání oznacení prvního dig. výstupu
				LCDSetRect(output_x1,4,output_x2,8,FILL,BLACK);		 // oznacení posledního dig. výstupu
			}
			button_up = 1;											 // nastavení signalizace stisknutí tlacítka
		}
		if(force_output[select_output]==1){							 // test zda-li je vybraný výstup nastavený do log.1
			LCDSetRect(61,116,69,129,FILL,WHITE);					 // smazání minulého stavu u nastavovacího tlacítka
			LCDPutStr("OFF",61,110,SMALL,BLACK,WHITE);				 // vykreslení stavu OFF u nastavovacího tlacítka
		}
		else{														 // není-li vybraný výstup nastavený do log.1
			LCDSetRect(61,110,69,129,FILL,WHITE);					 // smazání minulého stavu u nastavovacího tlacítka
		    LCDPutStr("ON",61,116,SMALL,BLACK,WHITE);				 // vykreslení stavu OFF u nastavovacího tlacítka
		}
	}
	if((page==2)&&(select_sub_menu==4)&&(setting_da_channel1!=1)&&(setting_da_channel2!=1)){	// test 2. stránky, 4. položky menu (ANALOGOVE VYSTUPY) a nejsou-li D/A prevodníky v nastavovacím stavu
		if(button_up == 0){							    // test stisknutí a následné pustení tlacítka
			if(select_da_channel == 1){					// test výberu prvního kanálu D/A prevodníku 
				LCDSetRect(102,4,106,8,FILL,WHITE);		// smazání oznacení prvního kanálu
				LCDSetRect(52,4,56,8,FILL,BLACK);		// oznacení druhého kanálu
				select_da_channel = 2;					// nastavení výberu kanálu na druhý
			}
			else{										// vybraný kanál je druhý
				LCDSetRect(102,4,106,8,FILL,BLACK);		// oznacení prvního kanálu
				LCDSetRect(52,4,56,8,FILL,WHITE);		// smazání oznacení druhého kanálu
				select_da_channel = 1;					// nastavení výberu kanálu na první		  
			}
		}
		button_up = 1;									// nastavení signalizace stisknutí tlacítka
	}
	if((page == 2)&&(select_sub_menu == 4)&&(setting_da_channel1 == 1)){ 		// test 2. stránky, 4. položky menu (ANALOGOVE VYSTUPY) a 1. kanál je v rezimu nastavení
		if(DAC_value_channel1 >= 4095)DAC_value_channel1 = 0;					// test prekrocení hodnoty u 12.bitového(4095) D/A prevodníku
		else DAC_value_channel1 += 4;											// pri stisku tlacítka inkremenace o 4(odpovídá cca 0,01V)
		sprintf(char_value_da,"%2.2fV ",((float)DAC_value_channel1/4095)*10);	// prevod z int na float a následný prevod na retezec znaku
		LCDPutStr(char_value_da,100,78,MEDIUM,BLACK,WHITE); 					// vykreslení hodnoty D/A prevodníku 1. kanál  	[V]
		LCDSetRect(90,78,98,110,FILL,BLACK);									// oznacení nastavované hodnoty (cerne)
		sprintf(char_value_da,"%4d",DAC_value_channel1);						// prevod nastavené hodnoty na retezec 
		LCDPutStr(char_value_da,90,78,MEDIUM,WHITE,BLACK);						// vykreslení hodnoty D/A prevodníku   			[dec]
	}
	if((page == 2)&&(select_sub_menu == 4)&&(setting_da_channel2 == 1)){		// test 2. stránky, 4. položky menu (ANALOGOVE VYSTUPY) a 2. kanál je v rezimu nastavení
		if(DAC_value_channel2 >= 4095)DAC_value_channel2 = 0;					// test prekrocení hodnoty u 12.bitového(4095) D/A prevodníku
		else DAC_value_channel2 += 4;											// pri stisku tlacítka inkremenace o 4(odpovídá cca 0,01V)
		sprintf(char_value_da,"%2.2fV ",((float)DAC_value_channel2/4095)*10);	// prevod z int na float a následný prevod na retezec znaku
		LCDPutStr(char_value_da,50,78,MEDIUM,BLACK,WHITE); 					    // vykreslení hodnoty D/A prevodníku 2. kanál  	[V]
		LCDSetRect(40,78,48,110,FILL,BLACK);									// oznacení nastavované hodnoty (cerne)
		sprintf(char_value_da,"%4d",DAC_value_channel2);						// prevod nastavené hodnoty na retezec 
		LCDPutStr(char_value_da,40,78,MEDIUM,WHITE,BLACK);						// vykreslení hodnoty D/A prevodníku   			[dec]
	}
	if((page == 2)&&(select_sub_menu == 5)&&(setting != 1)){		// test 2. stránky, 5. položky menu (NASTAVENI) a není v rezimu nastavení
		if(button_up == 0){											// test stisknutí a následné pustení tlacítka
			if(select_set != 1){									// test výberu první polozky v NASTAVENI
				LCDSetRect(set_x1,4,set_x2,8,FILL,WHITE);			// smazání minulého oznacení v NASTAVENI
				LCDSetRect(set_x1+15,4,set_x2+15,8,FILL,BLACK);		// oznacení nové položky v NASTAVENI
				set_x1 += 15;										// posun souradnice x1 na novou položku v NASTAVENI
				set_x2 += 15;										// posun souradnice x2 na novou položku v NASTAVENI
				select_set--;										// dekrementace vybrané položky
			}
			else{													// test - jedná se o první položku v NASTAVENI
				set_x1 = 47;										// posun souradnice x1 na poslední položku v NASTAVENI 
				set_x2 = 51;										// posun souradnice x1 na poslední položku v NASTAVENI
				select_set=4;										// nastavení vybrané položky na 4. poslední)
				LCDSetRect(set_x1+45,4,set_x2+45,8,FILL,WHITE);		// smazání oznacení první položky v NASTAVENI
				LCDSetRect(set_x1,4,set_x2,8,FILL,BLACK);			// oznacení poslední polozky v NASTAVENI
			}
			button_up = 1;											// nastavení signalizace stisknutí tlacítka
		}
	}
	if((page==2)&&(select_sub_menu == 5)&&(select_set == 1)){		// test 2. stránky, 5. položky menu (NASTAVENI) a položky MODBUS ADRESA
		if(button_up == 0){											// test stisknutí a následné pustení tlacítka
			if(setting == 1){										// test rezimu nastavení
				MODBUS_ADDRES++;									// inkrementace modbus adresy
				if(MODBUS_ADDRES >= 247)MODBUS_ADDRES = 1;			// test zda-li je modbus adresa v rozmezí 1-247
				LCDSetRect(90,102,98,120,FILL,BLACK);				// oznacení nastavované položky(cerne)
				sprintf(char_adresa,"%d",MODBUS_ADDRES);			// prevod int modbus adresy na retezec znaku 
				LCDPutStr(char_adresa,90,102,SMALL,WHITE,BLACK);	// vykreslení modbus adresy 				
			}
		button_up = 1;												// nastavení signalizace stisknutí tlacítka
		}	
	}
   	if((page==2)&&(select_sub_menu == 5)&&(select_set == 2)){  			// test 2. stránky, 5. položky menu (NASTAVENI) a položky BITU/SEKUNDA
		if(button_up == 0){												// test stisknutí a následné pustení tlacítka
			if(setting == 1){											// test rezimu nastavení
					set_rychlost++;										// inkrementace rychlost
					if(set_rychlost > 5)set_rychlost = 1;				// osetrení nepodporované rychlosti
					switch(set_rychlost){								// podle promenné výber komunikacní rychlosti
						case 1: BAUD_RATE = 9600;break;					// rychlost 9600b/s
						case 2: BAUD_RATE = 19200;break;				// rychlost 19200b/s
						case 3: BAUD_RATE = 38400;break;				// rychlost 38400b/s
						case 4: BAUD_RATE = 57600;break;				// rychlost 57600b/s
						case 5: BAUD_RATE = 115200;break;				// rychlost 115200b/s
	 				}
					LCDSetRect(75,94,83,130,FILL,BLACK);			 	// oznacení nastavované položky (cerne)
					sprintf(char_rychlost,"%lu",BAUD_RATE);			 	// prevod long rychlosti na retezec znaku
					LCDPutStr(char_rychlost,75,94,SMALL,WHITE,BLACK);	// vykreslení komunikacni rychlosti
				}					
		button_up = 1;												 	// nastavení signalizace stisknutí tlacítka
		}	
	}
	if((page==2)&&(select_sub_menu == 5)&&(select_set == 3)){  					// test 2 stránky, 5 položky menu (NASTAVENI) a položky PARITA
		if(button_up == 0){														// test stisknutí a následné pustení tlacítka
			if(setting == 1){													// test rezimu nastavení
					set_parita++;											    // inkrementace parity
					if(set_parita > 3)set_parita = 1;							// osetrení nepodporované hodnoty
					switch(set_parita){											// podle promenné výber parity
						case 1: PARITA = 0;sprintf(char_parita,"ZADNA");break;	// parita 0 - ZADNA, prevod na retezec znaku
						case 2: PARITA = 1;sprintf(char_parita,"LICHA");break;	// parita 1 - LICHA, prevod na retezec znaku
						case 3: PARITA = 2;sprintf(char_parita,"SUDA");break;	// parita 2 - SUDA, prevod na retezec znaku
	 				}
					LCDSetRect(60,59,68,90,FILL,BLACK);						    // oznacení nastavované položky (cerne)
					LCDPutStr(char_parita,60,60,SMALL,WHITE,BLACK);			    // vykreslení parity 
				}					
		button_up = 1;	  														// nastavení signalizace stisknutí tlacítka
		}	
	}
	if((page==2)&&(select_sub_menu == 5)&&(select_set == 4)){  				// test 2. stránky, 5. položky menu (NASTAVENI) a položky NASTAVENI LCD
		LCDPutStr("ZVOLIT",4,90,SMALL,WHITE,BLUE); 							// vykresleni ZVOLIT
	}
	else if((page == 2)&&(select_sub_menu == 5)&&(select_set != 4))LCDSetRect(4,90,12,126,FILL,BLUE);	// test 2. stránky, 5. položky menu (NASTAVENI) a položky NASTAVENI LCD, smazání ZVOLIT
	if((page==3)&&(select_kon == 1)){										// test 3. stránky a nastavení kontrastu
		if(button_up == 0){													// test stisknutí a následné pustení tlacítka
			if(set_kontrast < 75){											// test zda-li je kontrast mensí jak 75
				set_kontrast++;												// inkrementace kontrastu
				SendLCD(LCDCommand,SETCON);									// LCD príkaz nastavení kontrastu
				SendLCD(LCDData,set_kontrast);								// nastavení kontrastu
				LCDSetRect(75,25,80,((set_kontrast-35)*2)+25,FILL,BLACK);	// výpocet a vykreslení baragrafu podle hodnoty kontrastu 
				LCDSetRect(75,((set_kontrast-35)*2)+25,80,105,FILL,WHITE);	// výpocet a vykreslení baragrafu podle hodnoty kontrastu
				sprintf(char_kontrast,"%d ",set_kontrast);					// prevod hodnoty kontrastu ba retezec znaku
				LCDPutStr(char_kontrast,83,59,SMALL,BLACK,WHITE);			// vykreslení hodnoty kontrastu
			}
		}					
		button_up = 1;														// nastavení signalizace stisknutí tlacítka
	}
	if((page==3)&&(select_kon == 2)){								// test 3. stránky a nastavení podsvetlení
		if(button_up == 0){											// test stisknutí a následné pustení tlacítka
			if(set_led > 0){										// test zda-li je hodnota podsvetlení vetsí jak 0
				set_led--;											// dekrementace podsvetlení
				LCDSetRect(25,25,30,(105-(set_led*4)),FILL,BLACK);	// výpocet a vykreslení baragrafu podle hodnoty podsvetlení 
				LCDSetRect(25,(105-(set_led*4)),30,105,FILL,WHITE);	// výpocet a vykreslení baragrafu podle hodnoty podsvetlení
				sprintf(char_led,"%d ",(100-(set_led*5)));			// prevod hodnoty podsvetlení na retezec znaku
				LCDPutStr(char_led,33,59,SMALL,BLACK,WHITE);		// vykreslení hodnoty podsvetlení
				Potenciometr(set_led);								// nastavení potenciometru
			}
		}					
		button_up = 1;												// nastavení signalizace stisknutí tlacítka
	}
}
/*------------------------------funkce pro tlacítko setting-------------------------------*/
void function_button_setting(){									
	if((page == 2)&&(select_sub_menu == 1)){						// test 2. stránky a 1. položky v menu (DIGITALNI VSTUPY) 						    
		if(button_up == 0){											// test stisknutí a následné pustení tlacítka
			if(force_input[select_input] == 1){						// test nastavení vybraného vstupu do log. 1
				LCDSetRect(input_x1-1,65,input_x1+7,83,FILL,WHITE);	// smazání oznacení zelené signalizace a F u vstupu 
				LCDSetRect(61,110,69,129,FILL,WHITE);				// smazání OFF u nastavovacího tlacitka 
				LCDPutStr("ON",61,116,SMALL,BLACK,WHITE);			// vykreslení ON u nastavovacího tlacítka
				force_input[select_input] = 0;						// zapsání log. 0 na prislusnou pozici v poli
			}
			else{												    // test nastavení vybraného vstupu do log. 0
				LCDPutStr("F",input_x1-2,75,MEDIUM,GREEN,WHITE);	// vykreslení F u príslusného vstupu
				LCDPutChar('[',input_x1-1,65,MEDIUM,GREEN,WHITE);	// vykreslení zelené signalizace u príslusného vstupu
				LCDSetRect(61,116,69,129,FILL,WHITE);				// smazání ON u nastavovacího tlacítka
				LCDPutStr("OFF",61,110,SMALL,BLACK,WHITE);			// vykreslení OFF u nastavovacího tlacítka
				force_input[select_input] = 1;						// zapsání log. 1 na prislusnou pozici v poli, nastavení vstupu do log.1 
			}
			button_up = 1;											// nastavení signalizace stisknutí tlacítka
		}
	}
	if((page == 2)&&(select_sub_menu == 2)){						 	// test 2. stránky a 2. položky v menu (DIGITALNI VYSTUPY)
		if(button_up == 0){					 						 	// test stisknutí a následné pustení tlacítka
			if(force_output[select_output]==1){						 	// test nastavení vybraného výstupu do log. 1
				LCDSetRect(output_x1-1,65,output_x1+7,83,FILL,WHITE);	// smazání oznacení cervené signalizace a F u výstupu
				LCDSetRect(61,110,69,129,FILL,WHITE);				 	// smazání OFF u nastavovacího tlacitka
				LCDPutStr("ON",61,116,SMALL,BLACK,WHITE);			 	// vykreslení ON u nastavovacího tlacítka
				force_output[select_output] = 0;					 	// zapsání log. 0 na prislusnou pozici v poli
			}
			else{													 	// test nastavení vybraného výstupu do log. 0
				LCDPutStr("F",output_x1-2,75,MEDIUM,RED,WHITE);		 	// vykreslení F u príslusného výstupu
				LCDPutChar('[',output_x1-1,65,MEDIUM,RED,WHITE);	 	// vykreslení cervené signalizace u príslusného výstupu
				LCDSetRect(61,116,69,129,FILL,WHITE);				 	// smazání ON u nastavovacího tlacítka
				LCDPutStr("OFF",61,110,SMALL,BLACK,WHITE);			 	// vykreslení OFF u nastavovacího tlacítka
				force_output[select_output] = 1;					 	// zapsání log. 1 na prislusnou pozici v poli, nastavení výstupu do log.1
			}
 			button_up = 1;												// nastavení signalizace stisknutí tlacítka
		}
 	}
	if((page == 2)&&(select_sub_menu == 4)){								   	// test 2. stránky a 4. položky v menu (ANALOGOVE VYSTUPY)
		switch(select_da_channel){											   	// výber podle zvoleného kanálu D/A prevodníku 
			case 1:	if(button_up == 0){										   	// (1. kanál), test stisknutí a následné pustení tlacítka
						if(setting_da_channel1){							   	// test rezimu nastavovaní D/A prevodníku(1. kanál) - je v rezimu
							LCDSetRect(90,78,98,110,FILL,WHITE);			   	// smazání oznacení nastavované hodnoty
							sprintf(char_value_da,"%4d",DAC_value_channel1);   	// prevod hodnoty pro D/A prevodník(1. kanál) na retezec znaku
							LCDPutStr(char_value_da,90,78,MEDIUM,BLACK,WHITE);	// vykreslení hodnoty D/A prevodníku(1. kanál) 
							setting_da_channel1 = 0;						   	// vypnutí rezimu nastavování 1. kanálu D/A prevodníku(1. kanál)
						}
						else{												   	// test rezimu D/A prevodníku(1.kanál) nastavovaní - není v rezimu
							LCDSetRect(90,78,98,110,FILL,BLACK);			   	// oznacení nastavované hodnoty
							sprintf(char_value_da,"%4d",DAC_value_channel1);   	// prevod hodnoty pro D/A prevodník(1.kanál) na retezec znaku
							LCDPutStr(char_value_da,90,78,MEDIUM,WHITE,BLACK); 	// vykreslení hodnoty D/A prevodníku(1.kanál)
							setting_da_channel1 = 1; 						   	// nastavení rezimu nastavovaní D/A prevodníku(1.kanál)
						}
						button_up = 1;											// nastavení signalizace stisknutí tlacítka
					}
					break;
			case 2: if(button_up == 0){										   	// (2.kanál), test stisknutí a následné pustení tlacítka
						if(setting_da_channel2){							   	// test rezimu  D/A prevodníku(2.kanál) nastavovaní - je v rezimu 
							LCDSetRect(40,78,48,110,FILL,WHITE);			   	// smazání oznacení nastavované hodnoty
							sprintf(char_value_da,"%4d",DAC_value_channel2);   	// prevod hodnoty pro D/A prevodník(2.kanál) na retezec znaku
							LCDPutStr(char_value_da,40,78,MEDIUM,BLACK,WHITE); 	// vykreslení hodnoty D/A prevodníku(2.kanál) 
							setting_da_channel2 = 0;						   	// vypnutí rezimu nastavování D/A prevodníku(2.kanál)
						}
						else{												   	// test rezimu D/A prevodníku(2.kanál) nastavovaní - není v rezimu 
							LCDSetRect(40,78,48,110,FILL,BLACK);			   	// oznacení nastavované hodnoty
							sprintf(char_value_da,"%4d",DAC_value_channel2);   	// prevod hodnoty pro D/A prevodník(2.kanál) na retezec znaku
							LCDPutStr(char_value_da,40,78,MEDIUM,WHITE,BLACK); 	// vykreslení hodnoty D/A prevodníku(2.kanál)
							setting_da_channel2 = 1;  						   	// nastavení rezimu nastavovaní D/A prevodníku(2.kanál)
						}
						button_up = 1;											// nastavení signalizace stisknutí tlacítka
					}
					break;
		}	
	}
 	if((page == 2)&&(select_sub_menu == 5)){	 								// test 2. stránky a 5. položky v menu (NASTAVENI)
		switch(select_set){														// výber podle zvolené položky
			case 1:	if(button_up == 0){											// MODBUS ADRESA, test stisknutí a následné pustení tlacítka
						if(setting){											// test režimu nastavování - je v režimu
							LCDSetRect(90,101,98,120,FILL,WHITE);				// smazání oznacení modbus adresy
							LCDPutStr(char_adresa,90,102,SMALL,BLACK,WHITE);	// vykreslení odznacené modbus adresy 
							setting = 0;										// vypnutí rezimu nastavování
						}
						else{													// test režimu nastavování - není v režimu
							LCDSetRect(90,101,98,119,FILL,BLACK);				// vykreslení oznacení modbus adresy
							LCDPutStr(char_adresa,90,102,SMALL,WHITE,BLACK);	// vykreslení oznacené modbus adresy
							setting = 1; 										// nastavení rezimu nastavování
						}
						button_up = 1;											// nastavení signalizace stisknutí tlacítka
					}
					break;
			case 2: if(button_up == 0){										 	// BITU/SEKUNDA, test stisknutí a následné pustení tlacítka
						if(setting){										 	// test režimu nastavování - je v režimu
							LCDSetRect(75,93,83,130,FILL,WHITE);			 	// smazání oznacení rychlosti
							LCDPutStr(char_rychlost,75,94,SMALL,BLACK,WHITE);	// vykreslení odznacené rychlosti
							setting = 0;									 	// vypnutí rezimu nastavování
						}
						else{												 	// test režimu nastavování - není v režimu
							LCDSetRect(75,93,83,130,FILL,BLACK);			 	// vykreslení oznacení rychlosti
							LCDPutStr(char_rychlost,75,94,SMALL,WHITE,BLACK);	// vykreslení oznacené rychlosti
							setting = 1; 									 	// nastavení rezimu nastavování
						}
						button_up = 1;											// nastavení signalizace stisknutí tlacítka
					}
					break;
			case 3: if(button_up == 0){										 	// PARITA, test stisknutí a následné pustení tlacítka
						if(setting){										 	// test režimu nastavování - je v režimu
							LCDSetRect(60,59,68,90,FILL,WHITE);				 	// smazání oznacení parity
							LCDPutStr(char_parita,60,60,SMALL,BLACK,WHITE);	 	// vykreslení odznacené parity
							setting = 0;									 	// vypnutí rezimu nastavování
						}
						else{												 	// test režimu nastavování - není v režimu
							LCDSetRect(60,59,68,90,FILL,BLACK);				 	// vykreslení oznacení parity
							LCDPutStr(char_parita,60,60,SMALL,WHITE,BLACK);	 	// vykreslení oznacené rychlosti
							setting = 1; 									 	// nastavení rezimu nastavování
						}
						button_up = 1;											// nastavení signalizace stisknutí tlacítka
					}
					break;
		}
	}
	if(page == 3){										// test 3. stránky
		if(button_up == 0){								// test stisknutí a následné pustení tlacítka
			if(select_kon == 1){						// test výberu nastavení kontrastu
				LCDSetRect(102,4,106,8,FILL,WHITE);		// smazání oznaceného • LCD KONTRAST
				LCDSetRect(52,4,56,8,FILL,BLACK);		// oznaceni • LCD PODSVETLENI
				select_kon = 2;							// nastavení na výber podsvetlení
			}
			else{										// test výberu podsvetlení
				LCDSetRect(102,4,106,8,FILL,BLACK);		// smazání oznaceného • LCD KONTRAST
				LCDSetRect(52,4,56,8,FILL,WHITE);		// oznaceni • LCD PODSVETLENI
				select_kon = 1;							// nastavení na výber konsrast
			}
		}
		button_up = 1;									// nastavení signalizace stisknutí tlacítka
	}
}
/*-------------------------------funkce pro tlacítko down---------------------------------*/
void function_button_down(){
	if(page == 1){												 	// test 1. stránky											
		if(button_up == 0){										 	// test stisknutí a následné pustení tlacítka
			if(select_menu != 5){								 	// test, zda-li se nejedná o pátou položku menu
				LCDSetRect(menu_x1,4,menu_x2,8,FILL,WHITE);		 	// smazání minulého oznacení položky 
				LCDSetRect(menu_x1-20,4,menu_x2-20,8,FILL,BLACK);	// oznacení nové polozky menu
				menu_x1 -= 20;									 	// posun souradnice x1 na novou položku
				menu_x2 -= 20;									 	// posun souradnice x2 na novou položku
				select_menu++;									 	// inkrementace vybrané položky
			}
			else{												 	// test - jedná se o pátou(poslední) položku menu
				menu_x1 = 102;									 	// posun souradnice x1 na první položku menu
				menu_x2=106;									 	// posun souradnice x2 na první položku menu
				select_menu=1;									 	// nastavení vybrané položky menu na první
				LCDSetRect(menu_x1-80,4,menu_x2-80,8,FILL,WHITE);	// smazání oznacení páté(poslední) položky
				LCDSetRect(menu_x1,4,menu_x2,8,FILL,BLACK);		 	// oznacení první položky
			}
			button_up = 1;											// nastavení signalizace stisknutí tlacítka
		}
	}
    if((page == 2)&&(select_sub_menu == 1)){					   	// test 2. stránky a 1. položky menu (DIGITALNI VSTUPY)
		if(button_up == 0){										   	// test stisknutí a následné pustení tlacítka
			if(select_input != 8){								   	// test, zda-li se nejedná o osmý dig. vstup
				LCDSetRect(input_x1,4,input_x2,8,FILL,WHITE);	   	// smazání minulého oznacení vstupu
				LCDSetRect(input_x1-10,4,input_x2-10,8,FILL,BLACK);	// oznacení nového vstupu
				input_x1 -= 10;									   	// posun souradnice x1 na nový vstup
				input_x2 -= 10;									   	// posun souradnice x2 na nový vstup
				select_input++;									   	// inkrementace vybraného vstupu
			}
			else{												   	// test - jedná se o osmý dig. vstup 
				input_x1 = 102;									   	// posun souradnice x1 na první dig. vstup
				input_x2=106;									   	// posun souradnice x2 na první dig. vstup
				select_input=1;									   	// nastavení vybraného vstupu na první
				LCDSetRect(input_x1-70,4,input_x2-70,8,FILL,WHITE);	// smazání oznacení 8. dig. vstupu
				LCDSetRect(input_x1,4,input_x2,8,FILL,BLACK);	   	// oznacení prvního dig. vstupu
			}
			button_up = 1;											// nastavení signalizace stisknutí tlacítka
		}
		if(force_input[select_input]==1){							// test zda-li je vybraný vstup nastavený do log.1
			LCDSetRect(61,116,69,129,FILL,WHITE);					// smazání minulého stavu u nastavovacího tlacítka
			LCDPutStr("OFF",61,110,SMALL,BLACK,WHITE);				// vykreslení stavu OFF u nastavovacího tlacítka
		}														   	
		else{													   	// není-li vybraný vstup nastavený do log.1
			LCDSetRect(61,110,69,129,FILL,WHITE);				   	// smazání minulého stavu u nastavovacího tlacítka
	    	LCDPutStr("ON",61,116,SMALL,BLACK,WHITE);			   	// vykreslení stavu ON u nastavovacího tlacítka
		}
	}
	if((page == 2)&&(select_sub_menu == 2)){						 	// test 2. stránky a 2. položky menu (DIGITALNI VYSTUPY)
		if(button_up == 0){											 	// test stisknutí a následné pustení tlacítka
			if(select_output != 8){									 	// test, zda-li se nejedná o osmý dig. vystup 
				LCDSetRect(output_x1,4,output_x2,8,FILL,WHITE);		 	// smazání minulého oznacení výstupu
				LCDSetRect(output_x1-10,4,output_x2-10,8,FILL,BLACK);	// oznacení nového výstupu
				output_x1 -= 10;									 	// posun souradnice x1 na nový výstup
				output_x2 -= 10;									 	// posun souradnice x2 na nový výstup
				select_output++;										// inktrementace vybraného výstupu
			}
			else{													 	// test - jedná se o osmý dig. výstup
				output_x1 = 102;									 	// posun souradnice x1 na první dig. výstup
				output_x2 = 106;									 	// posun souradnice x2 na první dig. výstup
				select_output=1;
				LCDSetRect(output_x1-70,4,output_x2-70,8,FILL,WHITE);	// smazání oznacení osmého dig. výstupu
				LCDSetRect(output_x1,4,output_x2,8,FILL,BLACK);		 	// oznacení prvního dig. výstupu
			}
			button_up = 1;											 	// nastavení signalizace stisknutí tlacítka
		}
		if(force_output[select_output] == 1){						 	// test zda-li je vybraný výstup nastavený do log.1
			LCDSetRect(61,116,69,129,FILL,WHITE);					 	// smazání minulého stavu u nastavovacího tlacítka
			LCDPutStr("OFF",61,110,SMALL,BLACK,WHITE);				 	// vykreslení stavu OFF u nastavovacího tlacítka
		}
		else{														 	// není-li vybraný výstup nastavený do log.1
			LCDSetRect(61,110,69,129,FILL,WHITE);					 	// smazání minulého stavu u nastavovacího tlacítka
			LCDPutStr("ON",61,116,SMALL,BLACK,WHITE);				 	// vykreslení stavu OFF u nastavovacího tlacítka
		}
	}
	if((page==2)&&(select_sub_menu==4)&&(setting_da_channel1!=1)&&(setting_da_channel2!=1)){	// test 2. stránky, 4. položky menu (ANALOGOVE VYSTUPY) a nejsou-li D/A prevodníky v nastavovacím stavu
		if(button_up == 0){							 	// test stisknutí a následné pustení tlacítka
			if(select_da_channel == 1){					// test výberu prvního kanálu D/A prevodníku
				LCDSetRect(102,4,106,8,FILL,WHITE);		// smazání oznacení prvního kanálu
				LCDSetRect(52,4,56,8,FILL,BLACK);		// oznacení druhého kanálu
				select_da_channel = 2;					// nastavení výberu kanálu na druhý
			}
			else{										// vybraný kanál je druhý
				LCDSetRect(102,4,106,8,FILL,BLACK);		// oznacení prvního kanálu
				LCDSetRect(52,4,56,8,FILL,WHITE);		// smazání oznacení druhého kanálu
				select_da_channel = 1;					// nastavení výberu kanálu na první
			}
		}
		button_up = 1;									// nastavení signalizace stisknutí tlacítka
	}
 	if((page == 2)&&(select_sub_menu == 4)&&(setting_da_channel1 == 1)){ 		// test 2. stránky, 4. položky menu (ANALOGOVE VYSTUPY) a 1.kanál je v rezimu nastavení
		if(DAC_value_channel1 <= 4)DAC_value_channel1 = 4095;					// test prekrocení hodnoty u 12.bitového(<4) D/A prevodníku
		else DAC_value_channel1 -= 4;											// pri stisku tlacítka dekremenace o 4(odpovídá cca 0,01V)
		sprintf(char_value_da,"%2.2fV ",((float)DAC_value_channel1/4095)*10);	// prevod z int na float a následný prevod na retezec znaku
		LCDPutStr(char_value_da,100,78,MEDIUM,BLACK,WHITE); 					// vykreslení hodnoty D/A prevodníku kanál 1 	[V]
		LCDSetRect(90,78,98,110,FILL,BLACK);									// oznacení nastavované hodnoty (cerne)
		sprintf(char_value_da,"%4d",DAC_value_channel1);					    // prevod nastavené hodnoty na retezec
		LCDPutStr(char_value_da,90,78,MEDIUM,WHITE,BLACK);						// vykreslení hodnoty D/A prevodníku   			[dec]
	}
 	if((page == 2)&&(select_sub_menu == 4)&&(setting_da_channel2 == 1)){		// test 2. stránky, 4. položky menu (ANALOGOVE VYSTUPY) a 2.kanál je v rezimu nastavení
		if(DAC_value_channel2 <= 4)DAC_value_channel2 = 4095;					// test prekrocení hodnoty u 12.bitového(<4) D/A prevodníku
		else DAC_value_channel2 -= 4;											// pri stisku tlacítka dekremenace o 4(odpovídá cca 0,01V)
		sprintf(char_value_da,"%2.2fV ",((float)DAC_value_channel2/4095)*10);	// prevod z int na float a následný prevod na retezec znaku
		LCDPutStr(char_value_da,50,78,MEDIUM,BLACK,WHITE); 						// vykreslení hodnoty D/A prevodníku 2.kanálu  	[V]
		LCDSetRect(40,78,48,110,FILL,BLACK);									// oznacení nastavované hodnoty (cerne)
		sprintf(char_value_da,"%4d",DAC_value_channel2);						// prevod nastavené hodnoty na retezec
		LCDPutStr(char_value_da,40,78,MEDIUM,WHITE,BLACK);						// vykreslení hodnoty D/A prevodníku   			[dec]
	}
 	if((page == 2)&&(select_sub_menu == 5)&&(setting != 1)){		// test 2. stránky, 5. položky menu (NASTAVENI) a není v rezimu nastavení		
		if(button_up == 0){											// test stisknutí a následné pustení tlacítka
			if(select_set != 4){									// test výberu ctvrté polozky v NASTAVENI
				LCDSetRect(set_x1,4,set_x2,8,FILL,WHITE);			// smazání minulého oznacení v NASTAVENI
				LCDSetRect(set_x1-15,4,set_x2-15,8,FILL,BLACK);		// oznacení nové položky v NASTAVENI
				set_x1 -= 15;										// posun souradnice x1 na novou položku v NASTAVENI
				set_x2 -= 15;										// posun souradnice x2 na novou položku v NASTAVENI
				select_set++;										// inkrementace vybrané položky
			}
			else{													// test - jedná se o ctvrté(poslední) položku v NASTAVENI
				set_x1 = 92;										// posun souradnice x1 na první položku v NASTAVENI
				set_x2=96;											// posun souradnice x2 na první položku v NASTAVENI
				select_set=1;										// nastavení vybrané položky na 1(první)
				LCDSetRect(set_x1-45,4,set_x2-45,8,FILL,WHITE);		// smazání oznacení ctvrté položky v NASTAVENI
				LCDSetRect(set_x1,4,set_x2,8,FILL,BLACK);			// smazání oznacení ctvrté položky v NASTAVENI
			}
			button_up = 1;											// nastavení signalizace stisknutí tlacítka
		}
		
	}
	if((page==2)&&(select_sub_menu == 5)&&(select_set == 1)){		// test 2 stránky, 5. položky menu (NASTAVENI) a položky MODBUS ADRESA
		if(button_up == 0){											// test stisknutí a následné pustení tlacítka
			if(setting == 1){										// test rezimu nastavení
				MODBUS_ADDRES--;									// dekrementace modbus adresy
				if(MODBUS_ADDRES <= 0)MODBUS_ADDRES = 247;			// test zda-li je modbus adresa v rozmezí 1-247
				LCDSetRect(90,102,98,120,FILL,BLACK);		    	// oznacení nastavované položky(cerne)
				sprintf(char_adresa,"%d",MODBUS_ADDRES);			// prevod int modbus adresy na retezec znaku 
				LCDPutStr(char_adresa,90,102,SMALL,WHITE,BLACK);	// vykreslení modbus adresy					
			}
		button_up = 1;												// nastavení signalizace stisknutí tlacítka
		}	
	}
	if((page==2)&&(select_sub_menu == 5)&&(select_set == 2)){		// test 2. stránky, 5. položky menu (NASTAVENI) a položky BITU/SEKUNDA
		if(button_up == 0){									    	// test stisknutí a následné pustení tlacítka
			if(setting == 1){										// test rezimu nastavení
				set_rychlost--;										// dekrementace rychlost
				if(set_rychlost == 0)set_rychlost = 5;				// osetrení nepodporované rychlosti
				switch(set_rychlost){								// podle promenné výber komunikacní rychlosti
					case 1: BAUD_RATE = 9600;break;					// rychlost 9600b/s
					case 2: BAUD_RATE = 19200;break;				// rychlost 19200b/s
					case 3: BAUD_RATE = 38400;break;				// rychlost 38400b/s
					case 4: BAUD_RATE = 57600;break;				// rychlost 57600b/s
					case 5: BAUD_RATE = 115200;break;				// rychlost 115200b/s
 				}												 
				LCDSetRect(75,94,83,130,FILL,BLACK);			  	// oznacení nastavované položky (cerne)
				sprintf(char_rychlost,"%lu",BAUD_RATE);			  	// prevod long rychlosti na retezec znaku
				LCDPutStr(char_rychlost,75,94,SMALL,WHITE,BLACK); 	// vykreslení komunikacni rychlosti					
			}
		button_up = 1;											  	// nastavení signalizace stisknutí tlacítka
		}	
	}
	if((page==2)&&(select_sub_menu == 5)&&(select_set == 3)){  					// test 2. stránky, 5. položky menu (NASTAVENI) a položky PARITA
		if(button_up == 0){														// test stisknutí a následné pustení tlacítka
			if(setting == 1){													// test rezimu nastavení
					set_parita--;											    // dekrementace parity
					if(set_parita == 0)set_parita = 3;							// osetrení nepodporované hodnoty
					switch(set_parita){											// podle promenné výber parity
						case 1: PARITA = 0;sprintf(char_parita,"ZADNA");break;	// parita 0 - ZADNA, prevod na retezec znaku
						case 2: PARITA = 1;sprintf(char_parita,"LICHA");break;	// parita 1 - LICHA, prevod na retezec znaku
						case 3: PARITA = 2;sprintf(char_parita,"SUDA");break;	// parita 2 - SUDA, prevod na retezec znaku
	 				}
					LCDSetRect(60,59,68,90,FILL,BLACK);							// oznacení nastavované položky (cerne)
					LCDPutStr(char_parita,60,60,SMALL,WHITE,BLACK);				// vykreslení parity
				}					
		button_up = 1;			 												// nastavení signalizace stisknutí tlacítka
		}	
	}
	if((page==2)&&(select_sub_menu == 5)&&(select_set == 4)){  		// test 2. stránky, 5. položky menu (NASTAVENI) a položky NASTAVENI LCD
		LCDPutStr("ZVOLIT",4,90,SMALL,WHITE,BLUE); 					// vykresleni ZVOLIT
	}
	else if((page==2)&&(select_sub_menu == 5)&&(select_set != 4))LCDSetRect(4,90,12,126,FILL,BLUE);	// test 2. stránky, 5. položky menu (NASTAVENI) a položky NASTAVENI LCD, smazání ZVOLIT
	if((page==3)&&(select_kon == 1)){									  	// test 3. stránky a nastavení kontrastu
		if(button_up == 0){												  	// test stisknutí a následné pustení tlacítka
			if(set_kontrast > 35){										  	// test zda-li je kontrast vetsi jak 35
				set_kontrast--;											  	// dekrementace kontrastu
				SendLCD(LCDCommand,SETCON);								  	// LCD príkaz nastavení kontrastu
				SendLCD(LCDData,set_kontrast);							  	// nastavení kontrastu
				LCDSetRect(75,25,80,((set_kontrast-35)*2)+25,FILL,BLACK); 	// výpocet a vykreslení baragrafu podle hodnoty kontrastu
				LCDSetRect(75,((set_kontrast-35)*2)+25,80,105,FILL,WHITE);	// výpocet a vykreslení baragrafu podle hodnoty kontrastu
				sprintf(char_kontrast,"%d ",set_kontrast);				  	// prevod hodnoty kontrastu ba retezec znaku
				LCDPutStr(char_kontrast,83,59,SMALL,BLACK,WHITE);		  	// vykreslení hodnoty kontrastu
			}
		button_up = 1;														// nastavení signalizace stisknutí tlacítka
		}
	}
	if((page==3)&&(select_kon == 2)){								// test 3. stránky a nastavení podsvetlení
		if(button_up == 0){											// test stisknutí a následné pustení tlacítka
			if(set_led < 20){										// test zda-li je podsvetlení mensí jak 20(kroku)
				set_led++;											// inkrementace podsvetlení
				LCDSetRect(25,25,30,(105-(set_led*4)),FILL,BLACK);	// výpocet a vykreslení baragrafu podle hodnoty podsvetlení 
				LCDSetRect(25,(105-(set_led*4)),30,105,FILL,WHITE);	// výpocet a vykreslení baragrafu podle hodnoty podsvetlení
				sprintf(char_led,"%d ",(100-(set_led*5)));			// prevod hodnoty podsvetlení na retezec znaku
				LCDPutStr(char_led,33,59,SMALL,BLACK,WHITE);		// vykreslení hodnoty podsvetlení
				Potenciometr(set_led);								// nastavení potenciometru
			}
		}					
		button_up = 1;												// nastavení signalizace stisknutí tlacítka
	}
}
/*------------------------------funkce pro tlacítko select--------------------------------*/
void function_button_select(){
	if((page == 2)&&(select_sub_menu == 5)&&(select_set == 4)){		// test 2. stránky, 5. položky MENU a 4. položky v NASTAVENI(NASTAVENÍ LCD)
		LCDSetRect(4,90,12,126,FILL,BLUE);					   		// smazání ZVOLIT
		LCDPutStr("ZVOLIT",3,91,SMALL,WHITE,BLUE);			   		// vykreslení uskocené ZVOLIT
		LCDSetRect(2,88,12,127,NOFILL,BLUE1);		           		// orámování zvolit
		LCDSetRect(45,12,53,90,FILL,WHITE);	   				   		// smazání NASTAVENI LCD 	
		LCDPutStr("NASTAVENI LCD",44,13,SMALL,BLACK,WHITE);	   		// vykreslení uskocené NASTAVENI LCD
		LCDSetRect(43,12,53,91,NOFILL,BLACK1);				   		// orámování NASTAVENI LCD
		LCDSetRect(2,88,12,127,FILL,BLUE);							// smazání orámovaného ZVOLIT	
		LCDSetRect(60,4,68,90,FILL,WHITE);							// smazání PARITA:
		LCDSetRect(75,4,83,130,FILL,WHITE);							// smazání BITU/SEKUNDA
		LCDSetRect(90,4,98,120,FILL,WHITE);							// smazání MODBUS ADRESA
		LCDSetRect(105,17,113,113,FILL,WHITE);						// smazání komunikace
		LCDSetRect(43,4,53,91,FILL,WHITE);							// smazání orámovaného NASTAVENI LCD
		LCDSetRect(119,29,127,83,FILL,BLUE);						// smazání NASTAVENI n horní lište
  		nastaveni_lcd();											// volání funkce nastavení LCD
	}
 	if(page == 1){															// test 1. stránky
		switch(select_menu){  												// podle promenné pro výber z menu následné volání funkce
			case 1:	LCDSetRect(4,90,12,126,FILL,BLUE);					   	// smazání ZVOLIT
					LCDPutStr("ZVOLIT",3,91,SMALL,WHITE,BLUE);			   	// vykreslení uskocené ZVOLIT
					LCDSetRect(2,88,12,127,NOFILL,BLUE1);		           	// orámování zvolit
					LCDSetRect(100,12,108,108,FILL,WHITE);					// smazání DIGITALNI VSTUPY
					LCDPutStr("DIGITALNI VSTUPY",99,13,SMALL,BLACK,WHITE);	// vykreslení uskocené DIGITALNI VSTUPY
					LCDSetRect(98,11,108,109,NOFILL,BLACK1);				// orámování DIGITALNI VSTUPY
					LCDSetRect(2,88,12,127,FILL,BLUE);						// smazání orámovaného ZVOLIT
					LCDSetRect(20,12,28,66,FILL,WHITE);						// smazání NASTAVENI
					LCDSetRect(40,12,48,114,FILL,WHITE);					// smazání ANALOGOVE VYSTUPY
					LCDSetRect(60,12,68,108,FILL,WHITE);					// smazání ANALOGOVE VSTUPY
					LCDSetRect(80,12,88,114,FILL,WHITE);					// smazání DIG. VYSTUPY 
					LCDSetRect(98,4,108,109,FILL,WHITE);					// smazání orámované DIG. VSTUPY 							
					LCDSetRect(119,49,127,81,FILL,BLUE);    				// smazání MENU na horní lište
					digital_input();										// volání funkce pro digitílní vstupy
					break;
			case 2:	LCDSetRect(4,90,12,126,FILL,BLUE);					   	// smazání ZVOLIT
					LCDPutStr("ZVOLIT",3,91,SMALL,WHITE,BLUE);			   	// vykreslení uskocené ZVOLIT
					LCDSetRect(2,88,12,127,NOFILL,BLUE1);		           	// orámování zvolit
					LCDSetRect(80,12,88,114,FILL,WHITE);				    // smazání DIGITALNI VYSTUPY 
					LCDPutStr("DIGITALNI VYSTUPY",79,13,SMALL,BLACK,WHITE);	// vykreslení uskocené DIGITALNI VYSTUPY
					LCDSetRect(78,11,88,115,NOFILL,BLACK1);					// orámování DIGITALNI VYSTUPY
					LCDSetRect(2,88,12,127,FILL,BLUE);						// smazání orámovaného ZVOLIT
					LCDSetRect(20,12,28,66,FILL,WHITE);						// smazání NASTAVENI
					LCDSetRect(40,12,48,114,FILL,WHITE);					// smazání ANALOGOVE VYSTUPY
					LCDSetRect(60,12,68,108,FILL,WHITE);					// smazání ANALOGOVE VSTUPY
					LCDSetRect(78,4,88,115,FILL,WHITE);						// smazání orámované DIG. VYSTUPY
					LCDSetRect(100,12,108,114,FILL,WHITE);					// smazání DIG. VSTUPY
					LCDSetRect(119,49,127,81,FILL,BLUE);    				// smazání MENU na horní lište
					digital_output();										// volání funkce pro digitální výstupy
					break;
			case 3:	LCDSetRect(4,90,12,126,FILL,BLUE);					   	// smazání ZVOLIT
					LCDPutStr("ZVOLIT",3,91,SMALL,WHITE,BLUE);			   	// vykreslení uskocené ZVOLIT
					LCDSetRect(2,88,12,127,NOFILL,BLUE1);		           	// orámování zvolit
					LCDSetRect(60,12,68,108,FILL,WHITE);					// smazání ANALOGOVE VSTUPY 
					LCDPutStr("ANALOGOVE VSTUPY",59,13,SMALL,BLACK,WHITE);	// vykreslení uskocené ANALOGOVE VSTUPY
					LCDSetRect(58,11,68,109,NOFILL,BLACK1);					// oramovaní ANALOGOVE VSTUPY
					LCDSetRect(2,88,12,127,FILL,BLUE);						// smazání orámovaného ZVOLIT
					LCDSetRect(20,12,28,66,FILL,WHITE);						// smazání NASTAVENI
					LCDSetRect(40,12,48,114,FILL,WHITE);					// smazání ANALOGOVE VYSTUPY
					LCDSetRect(58,4,68,109,FILL,WHITE);						// smazání orámované ANALOGOVE VSTUPY
					LCDSetRect(80,12,88,114,FILL,WHITE);					// smazání DIG. VYSTUPY
					LCDSetRect(100,12,108,114,FILL,WHITE);					// smazání DIG. VSTUPY
					LCDSetRect(119,49,127,81,FILL,BLUE);    				// smazání MENU na horní lište
 					analog_input();											// volání funkce pro analogové vstupy
					break;
			case 4:	LCDSetRect(4,90,12,126,FILL,BLUE);					   	// smazání ZVOLIT
					LCDPutStr("ZVOLIT",3,91,SMALL,WHITE,BLUE);			   	// vykreslení uskocené ZVOLIT
					LCDSetRect(2,88,12,127,NOFILL,BLUE1);		           	// orámování zvolit
					LCDSetRect(40,12,48,114,FILL,WHITE);					// smazání ANALOGOVE VYSTUPY
					LCDPutStr("ANALOGOVE VYSTUPY",39,13,SMALL,BLACK,WHITE);	// vykreslení uskocené ANALOGOVE VYSTUPY
					LCDSetRect(38,11,48,115,NOFILL,BLACK1);					// orámování ANALOGOVE VYSTUPY
					LCDSetRect(2,88,12,127,FILL,BLUE);						// smazání orámovaného ZVOLIT
					LCDSetRect(20,12,28,66,FILL,WHITE);						// smazání NASTAVENI
					LCDSetRect(38,4,48,115,FILL,WHITE);						// smazání orámované ANALOGOVE VYSTUPY
					LCDSetRect(60,12,68,108,FILL,WHITE);					// smazání  ANALOGOVE VSTUPY
					LCDSetRect(80,12,88,114,FILL,WHITE);					// smazání DIG. VYSTUPY
					LCDSetRect(100,12,108,114,FILL,WHITE);					// smazání DIG. VSTUPY
					LCDSetRect(119,49,127,81,FILL,BLUE);    				// smazání MENU na horní lište
					analog_output();										// volání funkce pro analogové výstupy
					break;
			case 5:	LCDSetRect(4,90,12,126,FILL,BLUE);					// smazání ZVOLIT
					LCDPutStr("ZVOLIT",3,91,SMALL,WHITE,BLUE);			// vykreslení uskocené ZVOLIT
					LCDSetRect(2,88,12,127,NOFILL,BLUE1);		        // orámování zvolit
					LCDSetRect(20,12,28,66,FILL,WHITE);					// smazání NASTAVENI
					LCDPutStr("NASTAVENI",19,13,SMALL,BLACK,WHITE);	    // vykreslení uskocene NASTAVENI
					LCDSetRect(18,11,28,67,NOFILL,BLACK1);				// oramování NASTAVENI
					LCDSetRect(2,88,12,127,FILL,BLUE);					// smazání orámovaného ZVOLIT
					LCDSetRect(18,4,28,67,FILL,WHITE);					// smazání orámované NASTAVENI
					LCDSetRect(40,12,48,114,FILL,WHITE);				// smazání ANALOGOVE VYSTUPY
					LCDSetRect(60,12,68,108,FILL,WHITE);				// smazání  ANALOGOVE VSTUPY
					LCDSetRect(80,12,88,114,FILL,WHITE);				// smazání DIG. VYSTUPY
					LCDSetRect(100,12,108,114,FILL,WHITE);				// smazání DIG. VSTUPY
					LCDSetRect(119,49,127,81,FILL,BLUE);    			// smazání MENU na horní lište
					nastaveni();										// volámní funkce pro NASTAVENI
					break;
		}
	}
} 
/*-------------------------------funkce pro tlacítko menu---------------------------------*/
void function_button_menu(){
	if(page == 0){	    							// test nulté stránky
		LCDSetRect(4,53,11,77,FILL,BLUE);			// smazání bílé-MENU
		LCDPutStr("MENU",3,54,SMALL,WHITE,BLUE);	// vykreslení modre-MENU
		LCDSetRect(2,51,12,78,NOFILL,BLUE1);		// orámování tlacítka MENU
		LCDSetRect(16,83,24,130,FILL,WHITE);		// smazání VUT BRNO
		LCDSetRect(60,29,68,101,FILL,WHITE);		// smazání INDIKATOR
		LCDSetRect(80,37,88,93,FILL,WHITE);			// smazání STAVOVY
		LCDSetRect(100,25,108,105,FILL,WHITE);	 	// smazání PRUMYSLOVY
		LCDSetRect(2,51,12,78,FILL,BLUE);			// smazání orámované MENU	
    	main_menu();			     				// volání funkce pro vykreslení hlaního menu
	}
}
/*-------------------------------funkce pro tlacítko back---------------------------------*/
void function_button_back(){
	if(page == 1){ 									// test 1. stránky (ZPET z hlavního menu)
		LCDSetRect(4,5,11,29,FILL,BLUE);			// smazání bílé-ZPET
		LCDPutStr("ZPET",3,6,SMALL,WHITE,BLUE);		// vykreslení modre-ZPET
		LCDSetRect(2,3,12,30,NOFILL,BLUE1);			// orámování tlacitka ZPET
		LCDSetRect(20,0,28,66,FILL,WHITE);    		// smazání NASTAVENI
		LCDSetRect(40,0,48,114,FILL,WHITE);			// smazání ANALOG. VYSTUPY
		LCDSetRect(60,0,68,108,FILL,WHITE);		 	// smazání ANALOG. VSTUPY
		LCDSetRect(80,0,88,114,FILL,WHITE); 	   	// smazání DIG. VYSTUPY
		LCDSetRect(100,0,108,108,FILL,WHITE); 		// smazání DIG. VSTUPY
		main_page();								// volání funkce pro vykreslení hlavní strany
	}
	if((page == 2)&&(select_sub_menu == 1)){		// test 2.stránky a vybraného menu digitální vstupy
		LCDSetRect(4,5,11,29,FILL,BLUE);			// smazání bílé-ZPET
		LCDPutStr("ZPET",3,6,SMALL,WHITE,BLUE);		// vykreslení modre-ZPET
		LCDSetRect(2,3,12,30,NOFILL,BLUE1);			// orámování tlacitka ZPET
	    LCDSetRect(18,4,108,83,FILL,WHITE);			// smazání INPUT 1-8
		LCDSetRect(61,110,69,129,FILL,WHITE);		// smazání ON/OFF
		LCDSetRect(119,2,127,128,FILL,BLUE);    	// smazání DIG. INPUT na horní lište
		LCDSetRect(2,3,12,30,FILL,BLUE);			// smazání orámované ZPET
		main_menu();								// volání funkce pro vykreslení hlaního menu
	}
	if((page == 2)&&(select_sub_menu == 2)){		// test 2.stránky a vybraného menu digitální vystupy
		LCDSetRect(4,5,11,29,FILL,BLUE);			// smazání bílé-ZPET
		LCDPutStr("ZPET",3,6,SMALL,WHITE,BLUE);		// vykreslení modre-ZPET
		LCDSetRect(2,3,12,30,NOFILL,BLUE1);			// orámování tlacitka ZPET
	    LCDSetRect(18,4,108,83,FILL,WHITE);			// smazání INPUT 1-8
		LCDSetRect(61,110,69,129,FILL,WHITE);		// smazání ON/OFF
		LCDSetRect(119,2,127,128,FILL,BLUE);    	// smazání DIG. OUTPUT na horní lište
		LCDSetRect(2,3,12,30,FILL,BLUE);			// smazání orámované ZPET
		main_menu();							   	// volání funkce pro vykreslení hlaního menu
	}
	if((page == 2)&&(select_sub_menu == 3)){	   	// test 2.stránky a vybraného menu analogové vstupy
		LCDSetRect(4,5,11,29,FILL,BLUE);			// smazání bílé-ZPET
		LCDPutStr("ZPET",3,6,SMALL,WHITE,BLUE);		// vykreslení modre-ZPET
		LCDSetRect(2,3,12,30,NOFILL,BLUE1);			// orámování tlacitka ZPET
	    LCDSetRect(19,13,35,123,FILL,WHITE);		// smazání baragrafu u channel 2
		LCDSetRect(40,5,58,126,FILL,WHITE);			// smazání channel 2
		LCDSetLine(65,1,65,130,WHITE);	  			// smazání delící linky
		LCDSetRect(69,13,85,123,FILL,WHITE);		// smazání baragrafu u channel 1
		LCDSetRect(90,5,108,126,FILL,WHITE);		// smazání channel 1
		LCDSetRect(119,2,127,128,FILL,BLUE);    	// smazání ANALOG. INPUT na horní lište
		LCDSetRect(2,3,12,30,FILL,BLUE);			// smazání orámované ZPET
		main_menu();								// volání funkce pro vykreslení hlaního menu
	}
	if((page == 2)&&(select_sub_menu == 4)){		// test 2.stránky a vybraného menu analogové výstupy
		LCDSetRect(4,5,11,29,FILL,BLUE);			// smazání bílé-ZPET
		LCDPutStr("ZPET",3,6,SMALL,WHITE,BLUE);		// vykreslení modre-ZPET
		LCDSetRect(2,3,12,30,NOFILL,BLUE1);			// orámování tlacitka ZPET
	    LCDSetRect(19,13,35,123,FILL,WHITE);		// smazání baragrafu u channel 2
		LCDSetRect(40,4,58,126,FILL,WHITE);			// smazání channel 2
		LCDSetLine(65,1,65,130,WHITE);	  			// smazání delící linky
		LCDSetRect(69,13,85,123,FILL,WHITE);		// smazání baragrafu u channel 1
		LCDSetRect(90,4,108,126,FILL,WHITE);		// smazání channel 1
		LCDSetRect(119,2,127,128,FILL,BLUE);    	// smazání ANALOG. OUTPUT na horní lište
		LCDSetRect(2,3,12,30,FILL,BLUE);			// smazání orámované ZPET
		main_menu();							   	// volání funkce pro vykreslení hlaního menu
	}
	if((page == 2)&&(select_sub_menu == 5)){		// test 2.stránky a vybraného menu nastavení
		LCDSetRect(4,5,11,29,FILL,BLUE);			// smazání bílé-ZPET
		LCDPutStr("ZPET",3,6,SMALL,WHITE,BLUE);		// vykreslení modre-ZPET
		LCDSetRect(2,3,12,30,NOFILL,BLUE1);			// orámování tlacitka ZPET
		LCDSetRect(45,4,52,90,FILL,WHITE);			// smazání NASTAVENI LCD
		LCDSetRect(60,4,68,90,FILL,WHITE);			// smazání PARITA:
		LCDSetRect(75,4,83,130,FILL,WHITE);			// smazání BITU/SEKUNDA
		LCDSetRect(90,4,98,120,FILL,WHITE);			// smazání MODBUS ADRESA
		LCDSetRect(105,17,112,113,FILL,WHITE);		// smazání KOMUNIKACE A LCD
		LCDSetRect(119,29,127,101,FILL,BLUE);		// smazání NASTAVENI na horní lište
		LCDSetRect(2,3,12,30,FILL,BLUE);			// smazání orámované ZPET
		setting = 0;								// zrušení výberu
		init_modbus();								// inicializace komunikace
		main_menu();								// volání funkce pro vykreslení hlaního menu
 	}
	if(page == 3){									// test 3.stránky 
	   	LCDSetRect(4,5,11,29,FILL,BLUE);			// smazání bílé-ZPET
		LCDPutStr("ZPET",3,6,SMALL,WHITE,BLUE);		// vykreslení uskocené ZPET
		LCDSetRect(2,3,12,30,NOFILL,BLUE1);			// orámování tlacitka ZPET
		LCDSetRect(24,19,40,120,FILL,WHITE); 		// smazání baragrafu podsvetlení
		LCDSetRect(50,4,58,130,FILL,WHITE);			// smazání LCD PODSVETLENI
		LCDSetRect(65,1,65,130,FILL,WHITE);	 		// smazání delící cáry
		LCDSetRect(74,19,90,114,FILL,WHITE); 		// smazání baragrafu kontrastu
		LCDSetRect(100,4,108,108,FILL,WHITE);		// smazání LCD KONTRAST
		LCDSetRect(119,13,127,117,FILL,BLUE);		// smazání NASTAVENI LCD na horní lište
		LCDSetRect(2,3,12,30,FILL,BLUE);			// smazání orámované ZPET 
		nastaveni();
	}
}
/*------------------------------funkce ctení stavu tlacítek-------------------------------*/
void button(){
	unsigned char switch_button;							// pomocná promenná pro ctení stavu tlacítek
	if(!(P3_7&&P3_6&&P3_5)){								// test zda-li není zmácknuté nejaké tlacítko
			LCD_LED_ON(0);									// zapnutí  podsvetlení LCD
			lcd_sleep = 0;									// vynulování cítace
			TL1 = 0xB0;		    							// napleni TL1 predvolbou
			TH1 = 0x3C;										// naplneni TH1 predvolbou
			TF1=0;											// vynulovaní príznaku pretecení
			ET1=1;		 						    		// povolení prerušení od casovace 1
			TR1 = 1;										// start casovace 1
	}
	if(cyclic_read != 1){									// test nastavené promenné z MODBUS pro cyklické ctení vstupu
		if((P3&0xE0) == 0xE0)switch_button = modbus_button;	// test stavu tlacítek(maskování horní 3 bity)- není stisk, cti modbus stavy tlacítek  
		if(modbus_button == 0)switch_button = P3&0xE0;		// test stavu modbus tlacítek - není stisk, cti stavy tlacítek(maskování horní 3 bity)
		switch(switch_button){							    // podle promenné pro ctení stavu tlacítek(fyzické i modbus) se volají funkce
			case 0xC0: function_button_up();break;			// volání funkce pro tlacítko up
			case 0xA0: function_button_setting();break;	 	// volání funkce pro tlacítko setting
		    case 0x80: function_button_down();break;		// volání funkce pro tlacítko down
			case 0x60: function_button_select();break;		// volání funkce pro tlacítko select
			case 0x40: function_button_menu();break;		// volání funkce pro tlacítko menu
			case 0x20: function_button_back();break;		// volání funkce pro tlacítko back
			default  :break;
		}
		modbus_button = 0x00;								// nulování signalizace stisknutého modbus tlacítka
		if(P3_7&&P3_6&&P3_5)button_up = 0;					// nulování signalizace stisknutí tlacítka
	}
	if(lcd_sleep > 6000){									// test prekrocení casu cca 1min
			LCD_LED_ON(1);									// vypnutí  podsvetlení LCD
			lcd_sleep = 0;									// vynulování cítace
		   	TF1=0;											// vynulovaní príznaku pretecení
			ET1=0;		 						    		// zakázání prerušení od casovace 1
		    TR1 = 0;										// stop casovace 1
	}
}
/*-----------------------------funkce pro prevod int na float-----------------------------*/
float prevod_to_float(unsigned int hodnota){	// funkce prevod na float s parametrem prevádené hodnoty
	float vysledek;							 	// pomocná promenná pro výsledek prevodu

	vysledek = ((float)hodnota/4095)*10;		// pretypování na float a následný prevod na hodnotu 0-10 
	return(vysledek);							// vrácení float výsledku
}
/*--funkce pro cyklické ctení stavu digitálních vstupu, výstupu, analogových vstupu, výstupu--*/
void cyclic_write_read_IO(){
 unsigned char char_value1_ad[6];			// pole znaku pro vykreslování hodnot AD prevodníku float hodnota
 unsigned char char_value2_ad[5];			// pole znaku pro vykreslování hodnot AD prevodníku dec hodnota
 unsigned char souradnice_bar_y = 0;	    // pomocná promenná pro výpocet souradnice baragrafu
 	/*--cyklické ctení stavu jen když jsme v menu dig. vstupy--*/
	if((page == 2)&&(select_sub_menu == 1)){											// test 2. stránky, vybrané menu DIGITALNI VSTUPY (cyklické ctení)
		if((!P0_0)||(force_input[1] == 1))LCDPutChar('[',101,65,MEDIUM,GREEN,WHITE);	// test stavu 1. dig. vstupu jeli log. 1 oznacení zelenou signalizací	
		else LCDSetRect(101,65,109,73,FILL,WHITE);										// není-li log. 1 smazání zelené signalizace
		if((!P0_1)||(force_input[2] == 1))LCDPutChar('[',91,65,MEDIUM,GREEN,WHITE);		// test stavu 2. dig. vstupu jeli log. 1 oznacení zelenou signalizací
		else LCDSetRect(91,65,99,73,FILL,WHITE);										// není-li log. 1 smazání zelené signalizace
		if((!P0_2)||(force_input[3] == 1))LCDPutChar('[',81,65,MEDIUM,GREEN,WHITE);		// test stavu 3. dig. vstupu jeli log. 1 oznacení zelenou signalizací
		else LCDSetRect(81,65,89,73,FILL,WHITE);										// není-li log. 1 smazání zelené signalizace
		if((!P0_3)||(force_input[4] == 1))LCDPutChar('[',71,65,MEDIUM,GREEN,WHITE);		// test stavu 4. dig. vstupu jeli log. 1 oznacení zelenou signalizací
		else LCDSetRect(71,65,79,73,FILL,WHITE);										// není-li log. 1 smazání zelené signalizace
		if((!P0_4)||(force_input[5] == 1))LCDPutChar('[',61,65,MEDIUM,GREEN,WHITE);		// test stavu 5. dig. vstupu jeli log. 1 oznacení zelenou signalizací
		else LCDSetRect(61,65,69,73,FILL,WHITE);									    // není-li log. 1 smazání zelené signalizace
		if((!P0_5)||(force_input[6] == 1))LCDPutChar('[',51,65,MEDIUM,GREEN,WHITE);		// test stavu 6. dig. vstupu jeli log. 1 oznacení zelenou signalizací
		else LCDSetRect(51,65,59,73,FILL,WHITE);										// není-li log. 1 smazání zelené signalizace
		if((!P0_6)||(force_input[7] == 1))LCDPutChar('[',41,65,MEDIUM,GREEN,WHITE);		// test stavu 7. dig. vstupu jeli log. 1 oznacení zelenou signalizací
		else LCDSetRect(41,65,49,73,FILL,WHITE);										// není-li log. 1 smazání zelené signalizace
		if((!P0_7)||(force_input[8] == 1))LCDPutChar('[',31,65,MEDIUM,GREEN,WHITE);		// test stavu 8. dig. vstupu jeli log. 1 oznacení zelenou signalizací
		else LCDSetRect(31,65,39,73,FILL,WHITE);										// není-li log. 1 smazání zelené signalizace
	}
	/*--cyklický zápis stavu jen když jsme v menu dig. výstupy--*/
	if((page == 2)&&(select_sub_menu == 2)){								   	// test 2. stránky, vybrané menu DIGITALNI VYSTUPY (cyklické ctení)
		if(modbus_output&0x01)LCDPutChar('[',101,65,MEDIUM,RED,WHITE);			// test stavu 1. dig. výstupu je-li nastavena pres modbus log. 1 oznavení cervenou signalizací
		else if(force_output[1] == 1)LCDPutChar('[',101,65,MEDIUM,RED,WHITE);	// test stavu 1. dig. výstupu je-li	nastaven pres setting tlacítko stav ON oznavení cervenou signalizací
		else LCDSetRect(101,65,109,73,FILL,WHITE);								// není-li ani jedno smazání cervení signalizace
		if(modbus_output&0x02)LCDPutChar('[',91,65,MEDIUM,RED,WHITE);			// test stavu 2. dig. výstupu je-li nastavena pres modbus log. 1 oznavení cervenou signalizací
		else if(force_output[2] == 1)LCDPutChar('[',91,65,MEDIUM,RED,WHITE);	// test stavu 2. dig. výstupu je-li	nastaven pres setting tlacítko stav ON oznavení cervenou signalizací
		else LCDSetRect(91,65,99,73,FILL,WHITE);								// není-li ani jedno smazání cervení signalizace
		if(modbus_output&0x04)LCDPutChar('[',81,65,MEDIUM,RED,WHITE);			// test stavu 3. dig. výstupu je-li nastavena pres modbus log. 1 oznavení cervenou signalizací
		else if(force_output[3] == 1)LCDPutChar('[',81,65,MEDIUM,RED,WHITE);	// test stavu 3. dig. výstupu je-li	nastaven pres setting tlacítko stav ON oznavení cervenou signalizací
		else LCDSetRect(81,65,89,73,FILL,WHITE);								// není-li ani jedno smazání cervení signalizace
		if(modbus_output&0x08)LCDPutChar('[',71,65,MEDIUM,RED,WHITE);			// test stavu 4. dig. výstupu je-li nastavena pres modbus log. 1 oznavení cervenou signalizací
		else if(force_output[4] == 1)LCDPutChar('[',71,65,MEDIUM,RED,WHITE);	// test stavu 4. dig. výstupu je-li	nastaven pres setting tlacítko stav ON oznavení cervenou signalizací
		else LCDSetRect(71,65,79,73,FILL,WHITE);								// není-li ani jedno smazání cervení signalizace
		if(modbus_output&0x10)LCDPutChar('[',61,65,MEDIUM,RED,WHITE);			// test stavu 5. dig. výstupu je-li nastavena pres modbus log. 1 oznavení cervenou signalizací
		else if(force_output[5] == 1)LCDPutChar('[',61,65,MEDIUM,RED,WHITE);	// test stavu 5. dig. výstupu je-li	nastaven pres setting tlacítko stav ON oznavení cervenou signalizací
		else LCDSetRect(61,65,69,73,FILL,WHITE);								// není-li ani jedno smazání cervení signalizace
		if(modbus_output&0x20)LCDPutChar('[',51,65,MEDIUM,RED,WHITE);			// test stavu 6. dig. výstupu je-li nastavena pres modbus log. 1 oznavení cervenou signalizací
		else if(force_output[6] == 1)LCDPutChar('[',51,65,MEDIUM,RED,WHITE);	// test stavu 6. dig. výstupu je-li	nastaven pres setting tlacítko stav ON oznavení cervenou signalizací
		else LCDSetRect(51,65,59,73,FILL,WHITE);								// není-li ani jedno smazání cervení signalizace
		if(modbus_output&0x40)LCDPutChar('[',41,65,MEDIUM,RED,WHITE);			// test stavu 7. dig. výstupu je-li nastavena pres modbus log. 1 oznavení cervenou signalizací
		else if(force_output[7] == 1)LCDPutChar('[',41,65,MEDIUM,RED,WHITE);	// test stavu 7. dig. výstupu je-li	nastaven pres setting tlacítko stav ON oznavení cervenou signalizací
		else LCDSetRect(41,65,49,73,FILL,WHITE);								// není-li ani jedno smazání cervení signalizace
		if(modbus_output&0x80)LCDPutChar('[',31,65,MEDIUM,RED,WHITE);		    // test stavu 8. dig. výstupu je-li nastavena pres modbus log. 1 oznavení cervenou signalizací
		else if(force_output[8] == 1)LCDPutChar('[',31,65,MEDIUM,RED,WHITE);    // test stavu 8. dig. výstupu je-li	nastaven pres setting tlacítko stav ON oznavení cervenou signalizací
		else LCDSetRect(31,65,39,73,FILL,WHITE);								// není-li ani jedno smazání cervení signalizace
	}
	/*--cyklické ctení stavu jen když jsme v menu analog. vstupy--*/
	if((page == 2)&&(select_sub_menu == 3)){							   	// test 2. stránky, vybrané menu ANALOGOVE VSTUPY (cyklické ctení)
		souradnice_bar_y = (ADC(AD_CHANNEL1)/41);						   	// deleni hodnoty z AD prevodníku(1. kanál) pro získání rozsahu cca 0-100
		LCDSetRect(70,15,75,souradnice_bar_y+15,FILL,BLACK);			   	// prepocet souradnice a vzkreslení baragrafu
		LCDSetRect(70,souradnice_bar_y+16,75,115,FILL,WHITE);			   	// prepocet souradnice a vzkreslení baragrafu
		sprintf(char_value1_ad,"%2.2fV ",prevod_to_float(ADC(AD_CHANNEL1)));	// prevod int hodnoty z AD prevodníku(1. kanál) na float a následný prevod na retezec znaku
		LCDPutStr(char_value1_ad,100,80,MEDIUM,BLACK,WHITE);					// vykreslení float hodnoty z AD prevodníku(1. kanál)
		sprintf(char_value2_ad,"%4d",ADC(AD_CHANNEL1));						// prevod int hodnoty z AD prevodníku(1. kanál) na retezec znaku
		LCDPutStr(char_value2_ad,90,80,MEDIUM,BLACK,WHITE);					// vykreslení int hodnoty z AD prevodníku(1. kanál)

		souradnice_bar_y = (ADC(AD_CHANNEL2)/41);							// deleni hodnoty z AD prevodníku(2. kanál) pro získání rozsahu cca 0-100
		LCDSetRect(20,15,25,souradnice_bar_y+15,FILL,BLACK);				// prepocet souradnice a vzkreslení baragrafu
		LCDSetRect(20,souradnice_bar_y+16,25,115,FILL,WHITE);				// prepocet souradnice a vzkreslení baragrafu
		sprintf(char_value1_ad,"%2.2fV ",prevod_to_float(ADC(AD_CHANNEL2)));	// prevod int hodnoty z AD prevodníku(2. kanál) na float a následný prevod na retezec znaku
		LCDPutStr(char_value1_ad,50,80,MEDIUM,BLACK,WHITE);					// vykreslení float hodnoty z AD prevodníku(2. kanál)
		sprintf(char_value2_ad,"%4d",ADC(AD_CHANNEL2));						// prevod int hodnoty z AD prevodníku(2. kanál) na retezec znaku
		LCDPutStr(char_value2_ad,40,80,MEDIUM,BLACK,WHITE);					// vykreslení int hodnoty z AD prevodníku(2. kanál)
	}
	/*--cyklický zápis jen když jsme v menu analog. výstupy a kanál není v ražimu nastavování--*/
	if((page == 2)&&(select_sub_menu == 4)&&(setting_da_channel1 != 1)){	  	// test 2. stránky, vybrané menu ANALOGOVE VYSTUPY a není rezim  nastavování (cyklický zápis)
		souradnice_bar_y = DAC_value_channel1/41;							  	// deleni hodnoty pro DA prevodník(1. kanál) pro získání rozsahu cca 0-100
		LCDSetRect(70,15,75,souradnice_bar_y+15,FILL,BLACK);				  	// prepocet souradnice a vzkreslení baragrafu
		LCDSetRect(70,souradnice_bar_y+16,75,115,FILL,WHITE);				  	// prepocet souradnice a vzkreslení baragrafu
		sprintf(char_value_da,"%2.2fV ",prevod_to_float(DAC_value_channel1));	// prevod int hodnoty pro DA prevodník(1. kanál) na float a následný prevod na retezec znaku	
		LCDPutStr(char_value_da,100,78,MEDIUM,BLACK,WHITE); 					// vykreslení float hodnoty pro DA prevodník(1. kanál)
		sprintf(char_value_da,"%4d",DAC_value_channel1);						// prevod int hodnoty pro DA prevodník(1. kanál) na retezec znaku
		LCDPutStr(char_value_da,90,78,MEDIUM,BLACK,WHITE);						// vykreslení int hodnoty pro DA prevodníku(1. kanál)
		DAC(DA_CHANNEL1,DAC_value_channel1);									// zápis hodnoty do DA prevodníku(1. kanál)
	}
    /*--cyklický zápis jen když jsme v menu analog. výstupy a kanál není v ražimu nastavování--*/
	if((page == 2)&&(select_sub_menu == 4)&&(setting_da_channel2 != 1)){		// test 2. stránky, vybrané menu ANALOGOVE VYSTUPY a není rezim  nastavování (cyklický zápis)
 		souradnice_bar_y = DAC_value_channel2/41;							   	// deleni hodnoty pro DA prevodník(2. kanál) pro získání rozsahu cca 0-100
		LCDSetRect(20,15,25,souradnice_bar_y+15,FILL,BLACK);					// prepocet souradnice a vzkreslení baragrafu
		LCDSetRect(20,souradnice_bar_y+16,25,115,FILL,WHITE);					// prepocet souradnice a vzkreslení baragrafu
		sprintf(char_value_da,"%2.2fV ",prevod_to_float(DAC_value_channel2));	// prevod int hodnoty pro DA prevodník(2. kanál) na float a následný prevod na retezec znaku
		LCDPutStr(char_value_da,50,78,MEDIUM,BLACK,WHITE); 						// vykreslení float hodnoty pro DA prevodník(2. kanál)
		sprintf(char_value_da,"%4d",DAC_value_channel2);						// prevod int hodnoty pro DA prevodník(2. kanál) na retezec znaku
		LCDPutStr(char_value_da,40,78,MEDIUM,BLACK,WHITE);						// vykreslení int hodnoty pro DA prevodníku(2. kanál)
		DAC(DA_CHANNEL2,DAC_value_channel2);									// zápis hodnoty do DA prevodníku(2. kanál)
	} 	
	/*--cyklické ctení bez ohledu na stav LCD--*/
	if((!P0_0)||(force_input[1] == 1))modbus_input |= 0x01;		// test 1. dig. vstupu pri log. 1 zápis bitu log. 1 na príslušnou pozici v bytu modbus input
	else modbus_input &= ~0x01;									// test 1. dig. vstupu pri log. 0 zápis bitu log. 0 na príslušnou pozici v bytu modbus input
	if((!P0_1)||(force_input[2] == 1))modbus_input |= 0x02;		// test 2. dig. vstupu pri log. 1 zápis bitu log. 1 na príslušnou pozici v bytu modbus input
	else modbus_input &= ~0x02;									// test 2. dig. vstupu pri log. 0 zápis bitu log. 0 na príslušnou pozici v bytu modbus input
	if((!P0_2)||(force_input[3] == 1))modbus_input |= 0x04;		// test 3. dig. vstupu pri log. 1 zápis bitu log. 1 na príslušnou pozici v bytu modbus input
	else modbus_input &= ~0x04;									// test 3. dig. vstupu pri log. 0 zápis bitu log. 0 na príslušnou pozici v bytu modbus input
	if((!P0_3)||(force_input[4] == 1))modbus_input |= 0x08;		// test 4. dig. vstupu pri log. 1 zápis bitu log. 1 na príslušnou pozici v bytu modbus input
	else modbus_input &= ~0x08;									// test 4. dig. vstupu pri log. 0 zápis bitu log. 0 na príslušnou pozici v bytu modbus input
	if((!P0_4)||(force_input[5] == 1))modbus_input |= 0x10;		// test 5. dig. vstupu pri log. 1 zápis bitu log. 1 na príslušnou pozici v bytu modbus input
	else modbus_input &= ~0x10; 								// test 5. dig. vstupu pri log. 0 zápis bitu log. 0 na príslušnou pozici v bytu modbus input
	if((!P0_5)||(force_input[6] == 1))modbus_input |= 0x20;		// test 6. dig. vstupu pri log. 1 zápis bitu log. 1 na príslušnou pozici v bytu modbus input
	else modbus_input &= ~0x20;									// test 6. dig. vstupu pri log. 0 zápis bitu log. 0 na príslušnou pozici v bytu modbus input
	if((!P0_6)||(force_input[7] == 1))modbus_input |= 0x40;		// test 7. dig. vstupu pri log. 1 zápis bitu log. 1 na príslušnou pozici v bytu modbus input
	else modbus_input &= ~0x40;								    // test 7. dig. vstupu pri log. 0 zápis bitu log. 0 na príslušnou pozici v bytu modbus input
	if((!P0_7)||(force_input[8] == 1))modbus_input |= 0x80;		// test 8. dig. vstupu pri log. 1 zápis bitu log. 1 na príslušnou pozici v bytu modbus input
	else modbus_input &= ~0x80; 								// test 8. dig. vstupu pri log. 0 zápis bitu log. 0 na príslušnou pozici v bytu modbus input
	/*--cyklický zápis bez ohledu na stav LCD--*/
	if((force_output[1] == 1)||(modbus_output&0x01)){	// test je-li nastaven 1. dig výstup na ON, nebo je-li nastaven pres modbus na ON 
		output1 = 0;									// sepnutí 1. relé(0 z důvodu fyzického zapojení) 
		modbus_output_read |= 0x01;						// nastavení log. 1 na príslušnou pozici v bytu modbus_output_read 
	}
	else{												// není-li ani v jednom log. 1 
		output1 = 1;									// vypnutí 1. relé(1 z důvodu fyzického zapojení) 
		modbus_output_read &= ~0x01;					// nastavení log. 0 na príslušnou pozici v bytu modbus_output_read 
	}
	if((force_output[2] == 1)||(modbus_output&0x02)){	// test je-li nastaven 2. dig výstup na ON, nebo je-li nastaven pres modbus na ON
		output2 = 0;									// sepnutí 2. relé(0 z důvodu fyzického zapojení)
		modbus_output_read |= 0x02;						// nastavení log. 1 na príslušnou pozici v bytu modbus_output_read
	}
	else{												// není-li ani v jednom log. 1
		output2 = 1;									// vypnutí 1. relé(1 z důvodu fyzického zapojení)
		modbus_output_read &= ~0x02; 					// nastavení log. 0 na príslušnou pozici v bytu modbus_output_read
	}
	if((force_output[3] == 1)||(modbus_output&0x04)){	// test je-li nastaven 3. dig výstup na ON, nebo je-li nastaven pres modbus na ON
		output3 = 0;									// sepnutí 3. relé(0 z důvodu fyzického zapojení)
		modbus_output_read |= 0x04;						// nastavení log. 1 na príslušnou pozici v bytu modbus_output_read
	}
	else{												// není-li ani v jednom log. 1
		output3 = 1;									// vypnutí 1. relé(1 z důvodu fyzického zapojení)
		modbus_output_read &= ~0x04;					// nastavení log. 0 na príslušnou pozici v bytu modbus_output_read
	}
	if((force_output[4] == 1)||(modbus_output&0x08)){	// test je-li nastaven 4. dig výstup na ON, nebo je-li nastaven pres modbus na ON
		output4 = 0;									// sepnutí 4. relé(0 z důvodu fyzického zapojení)
		modbus_output_read |= 0x08;						// nastavení log. 1 na príslušnou pozici v bytu modbus_output_read
	}
	else{ 												// není-li ani v jednom log. 1
		output4 = 1;									// vypnutí 1. relé(1 z důvodu fyzického zapojení)
		modbus_output_read &= ~0x08;					// nastavení log. 0 na príslušnou pozici v bytu modbus_output_read
	} 
	if((force_output[5] == 1)||(modbus_output&0x10)){  	// test je-li nastaven 5. dig výstup na ON, nebo je-li nastaven pres modbus na ON
		output5 = 0;									// sepnutí 5. relé(0 z důvodu fyzického zapojení)
		modbus_output_read |= 0x10;						// nastavení log. 1 na príslušnou pozici v bytu modbus_output_read
	}
	else{												// není-li ani v jednom log. 1
		output5 = 1;									// vypnutí 1. relé(1 z důvodu fyzického zapojení)
		modbus_output_read &= ~0x10;					// nastavení log. 0 na príslušnou pozici v bytu modbus_output_read
	}
	if((force_output[6] == 1)||(modbus_output&0x20)){  	// test je-li nastaven 6. dig výstup na ON, nebo je-li nastaven pres modbus na ON
		output6 = 0;									// sepnutí 6. relé(0 z důvodu fyzického zapojení)
		modbus_output_read |= 0x20;						// nastavení log. 1 na príslušnou pozici v bytu modbus_output_read
	}
	else{												// není-li ani v jednom log. 1
		output6 = 1;									// vypnutí 1. relé(1 z důvodu fyzického zapojení)
		modbus_output_read &= ~0x20;					// nastavení log. 0 na príslušnou pozici v bytu modbus_output_read
	}
	if((force_output[7] == 1)||(modbus_output&0x40)){	// test je-li nastaven 7. dig výstup na ON, nebo je-li nastaven pres modbus na ON
		output7 = 0;									// sepnutí 7. relé(0 z důvodu fyzického zapojení)
		modbus_output_read |= 0x40;						// nastavení log. 1 na príslušnou pozici v bytu modbus_output_read
	}
	else{												// není-li ani v jednom log. 1
		output7 = 1;								    // vypnutí 1. relé(1 z důvodu fyzického zapojení)
		modbus_output_read &= ~0x40;					// nastavení log. 0 na príslušnou pozici v bytu modbus_output_read
	}
	if((force_output[8] == 1)||(modbus_output&0x80)){	// test je-li nastaven 8. dig výstup na ON, nebo je-li nastaven pres modbus na ON
		output8 = 0;									// sepnutí 8. relé(0 z důvodu fyzického zapojení)
		modbus_output_read |= 0x80;						// nastavení log. 1 na príslušnou pozici v bytu modbus_output_read
	}
	else{												// není-li ani v jednom log. 1
	   	output8 = 1;									// vypnutí 1. relé(1 z důvodu fyzického zapojení)
		modbus_output_read &= ~0x80;					// nastavení log. 0 na príslušnou pozici v bytu modbus_output_read
	}	
}