#include <pic.h>
 //    

/*
  .
      .
   .
      . 
      +     +    
 . 
       2 .
     .
      
   EEPROM    0x00.
    24  124.

  20.06.08
 Mizar

*/
//     
//#pragma romdata eedata = 0xf00000 
//rom unsigned char St0[]= __DATE__;
//rom unsigned char St1[]= __TIME__;
//#pragma romdata eedata

	__CONFIG(0x03FF1);

//#pragma psect 



//  
volatile unsigned int RTC = 0; 	//   
unsigned char cor; //   24  124 
bit key1, key2, key3, iled; //    
bit fv, ft,ftt;		//      
unsigned int Dfv; //  
unsigned int Dlay; //  
unsigned char sec=0, min=0, hour=0,thk=11;  // 
unsigned char edsec, edmin, edhour, dessec, desmin, deshour;  // 
unsigned char mess; //    
char   message1 [9] = "lena+jeny";
char   message2 [12] = "y teby lublu";




//   
void Delay (int T)  //  . 1 == 160
{	Dlay = RTC + T;
	while (Dlay != RTC);
}

void corr () //      
{	eeprom_write(0x00 ,cor);
	PORTB = cor;	//   
}
void key () //   
{	if ((RA2 == 0) || (RA3 == 0) || (RA4 == 0)){
		if ((RA4 == 0) & (RA2 == 1) & (RA3 == 1)){//   
			hour++;			//  
			if (hour > 23) hour = 0;
			PORTB = hour;	//   
		}
//		if ((RA3 == 0) & (RA2 == 1) & (RA4 == 1)){//   
//			min = min +10;			//  10 
//			if (min > 59) min = 0;
//			PORTB = min;	//   
//		}
		if ((RA2 == 0) & (RA3 == 1) & (RA4 == 1)){//   
			min++;			//  1 
			if (min > 59) min = 0;
			PORTB = min;	//   
		}
	//   
		if ((RA4 == 0) & (RA3 == 0)) {cor++; corr();} //     +  
		if ((RA4 == 0) & (RA2 == 0)) {cor--; corr();}
	}
}


void symbol (char CH)	//  
{	PORTB = 0;		// 
	Delay (2);		//    
	switch (CH){	//  
		case 0 : 
			PORTB = 126;	Delay (1);
			PORTB = 129;	Delay (2);
	//		PORTB = 129;	Delay (1);
			PORTB = 126;	Delay (1);
		break;
	    case 1 : 
			PORTB = 128;	Delay (1);
			PORTB = 255;	Delay (1);
			PORTB = 130;	Delay (1);
			PORTB = 0;		Delay (1);
		break;			
       	case 2 : 
			PORTB = 142;	Delay (1);
			PORTB = 145;	Delay (1);
			PORTB = 161;	Delay (1);
			PORTB = 194;	Delay (1);
		break;			
       	case 3 :
			PORTB = 110;	Delay (1);
			PORTB = 145;	Delay (2);
	//		PORTB = 145;	Delay (1);
			PORTB = 66;		Delay (1);
		break;			
       	case 4 :
			PORTB = 255;	Delay (1);
			PORTB = 18;		Delay (1);
			PORTB = 20;		Delay (1);
			PORTB = 24;		Delay (1);
		break;			
       	case 5 :
			PORTB = 97;		Delay (1);
			PORTB = 145;	Delay (2);
	//		PORTB = 145;	Delay (1);
			PORTB = 159;	Delay (1);
		break;  
     	case 6 :
			PORTB = 98;		Delay (1);
			PORTB = 145;	Delay (2);
	//		PORTB = 145;	Delay (1);
			PORTB = 126;	Delay (1);
		break;  
     	case 7 :
			PORTB = 31;		Delay (1);
			PORTB = 33;		Delay (1);
			PORTB = 65;		Delay (1);
			PORTB = 129;	Delay (1);
		break;
     	case 8 :
			PORTB = 110;	Delay (1);
			PORTB = 145;	Delay (2);
	//		PORTB = 145;	Delay (1);
			PORTB = 110;	Delay (1);
		break;  
     	case 9 :
			PORTB = 126;	Delay (1);
			PORTB = 145;	Delay (2);
	//		PORTB = 145;	Delay (1);
			PORTB = 78;		Delay (1);
		break;
	    case 'l' : // 
			PORTB = 255;	Delay (1);
			PORTB = 1;		Delay (1);
			PORTB = 2;		Delay (1);
			PORTB = 252;	Delay (1);
		break;
	    case 'e' : // 
			PORTB = 129;	Delay (1);
			PORTB = 145;	Delay (2);
	//		PORTB = 145;	Delay (1);
			PORTB = 255;	Delay (1);
		break;			
       	case 'n' : // 
			PORTB = 255;	Delay (1);
			PORTB = 16;		Delay (2);
	//		PORTB = 16;		Delay (1);
			PORTB = 255;	Delay (1);
		break;			
       	case 'a' :// 
			PORTB = 255;	Delay (1);
			PORTB = 17;		Delay (1);
			PORTB = 18;		Delay (1);
			PORTB = 252;	Delay (1);
		break;			
       	case 'j' :// 
			PORTB = 199;	Delay (1);
			PORTB = 40;		Delay (1);
			PORTB = 255;	Delay (1);
			PORTB = 40;		Delay (1);
			PORTB = 199;	Delay (1);
		break;			
      	case 'y' :// 
			PORTB = 255;	Delay (1);
			PORTB = 17;		Delay (1);
			PORTB = 49;		Delay (1);
			PORTB = 206;	Delay (1);
		break;  
		case 't' :// 
			PORTB = 1;		Delay (2);
			PORTB = 255;	Delay (1);
			PORTB = 1;		Delay (2);
		break;  
		case 'b' :// 
			PORTB = 97;		Delay (1);
			PORTB = 145;	Delay (2);
			PORTB = 255;	Delay (1);
			
		break;  
		case 'u' :// 
			PORTB = 126;	Delay (1);
			PORTB = 129;	Delay (1);
			PORTB = 126;	Delay (1);
			PORTB = 16;		Delay (2);
			PORTB = 255;	Delay (1);
		break;  

		case ' ' : // 
		//	PORTB = 0;		Delay (1);
		//	PORTB = 0;		Delay (1);
	//		PORTB = 0;		Delay (1);
			PORTB = 0;		Delay (2);
		break;		
		case '+' : // +
		//	PORTB = 0;		Delay (1);
			PORTB = 16;		Delay (1);
			PORTB = 56;		Delay (1);
			PORTB = 16;		Delay (1);
		break;	
		case 12 : //   
		//	PORTB = 0;		Delay (1);
			PORTB = 6;		Delay (1);
		//	PORTB = 0;		Delay (1);
		//	PORTB = 0;		Delay (1);
		break;	
		case 13 : //   
		//	PORTB = 0;		Delay (1);
			PORTB = 102;	Delay (1);
		//	PORTB = 0;		Delay (1);
		//	PORTB = 0;		Delay (1);
		break;
		case 14 : //   
		//	PORTB = 0;		Delay (1);
			PORTB = 96;		Delay (1);
		//	PORTB = 0;		Delay (1);
		//	PORTB = 0;		Delay (1);
		break;
			case 15 : // 
			PORTB = 0;		Delay (1);
			PORTB = 24;		Delay (1);
			PORTB = 36;		Delay (1);
			PORTB = 72;		Delay (1);
			PORTB = 36;		Delay (1);
			PORTB = 24;		Delay (1);
			PORTB = 0;		Delay (1);
		break;
	}
	PORTB = 0; //    .
}

void time ()		//  
{ 
	if (sec > 59){	//   60   0   
		sec = 0;
		min++;
	}
	if (min > 59){	//   60   0   
		min = 0;
		hour++;
	}
	if (hour > 23){ // 24    0    
		hour = 0;
	}
}
void Rtime ()  //   
{ 	
	dessec = sec/10;				//   
	edsec = (sec - (dessec*10));	//   
	
	desmin = min/10;				//   
	edmin = (min - (desmin*10));	//   

	deshour = hour/10;				//   
	edhour = (hour - (deshour*10));	//   
	if (deshour == 0) deshour = 11; //   =0  
}

void interrupt tmr0_int (void) //    
{	
	if (T0IF) { //        TMR0
		T0IF = 0;  //    
	 	RTC++;     //       
//     
//     
		if ((RTC % 512) == 0){ 
			thk++;
			key();
		}
		if ((RTC % (1000+cor)) == 0){
			sec++;				//  
			time();
			Dfv++;
		}
//		if ((RTC %512) == 0) 			// 
//		{	//   
//
//		}  	//  	  
//			//   
	} 	//   
	
//       
//   

} //   
//  

//  
void main (void)
{
	TMR0 = 0; 			//     
	OPTION = 0x0D1; 	//    TMR0 .. 4
//	OPTION = 0x051;
	T0IE = 1;			//    
	GIE = 1;			//   
	//      
	TRISB = 0;   //     
	TRISA = 255;	//   A  
//	PORTB = 0;
	EEADR = 0x00;  //      .
		RD = 1;
	cor = EEDATA;	

	while (1 == 1) { 	//  
	//     .
	
		if (thk == 15) thk = 11;  //   
		//    
		if ((Dfv > 10 ) & (fv == 1)){ 	//  10  
			Dfv = 0; 					//   
			fv = 0;} 					//   
		if ((Dfv > 6 ) & (fv == 0)){ 	//  6  
			Dfv = 0; 					//   
			fv = 1;
			if ((ft == 1) & (ftt == 1)) ft = 0; //    
			if ((ft == 0) & (ftt == 0)) ft = 1;	//   
		} //    

//		if (RA1 == 1) PORTB = 0;	//     
		if (RA1 == 0){				//    
			if (fv == 1) { //   4 
				Rtime();
				Delay(15);  //       
				symbol(edsec);				//  6   
				symbol(dessec);				//  5   
				symbol(thk);				//    :
				symbol(edmin);				//  4  
				symbol(desmin);				//  3   
				symbol(thk);				//    :
				symbol(edhour);				//  2  
				symbol(deshour);			//  1    
			}
			if (fv == 0) { //   6 
				if (ft == 1){ //   
					symbol(15);		// 
					for (mess = 0; mess < 9; mess++){  //  
						symbol(message1[8-mess]);		//  
					}
					symbol(15);		// 
					ftt = 1;  //     2 
				}//   
				if (ft == 0){ //   
					for (mess = 0; mess < 12; mess++){  //  
						symbol(message2[11-mess]);		//  
					}
					ftt = 0;  //     1 
				}//   
			}
		}		//   .

	}			//  
}				//  


