














// Declare your global variables here










///********** **************//////
void set_time()
{           
            ////////  
            if(sub_time==0)           
            {            
              lcd_gotoxy(0,0);
              lcd_puts("Set time");
              lcd_gotoxy(0,1);
              lcd_putchar(hour/10+0x30);
              lcd_putchar(hour%10+0x30);        
              lcd_putchar(':');
              lcd_putchar(min/10+0x30);
              lcd_putchar(min%10+0x30);
              lcd_puts("    ");    //     
              
              if((!PINC.0)&&(ps==0))   //   
              {  delay_ms(80);
               menu=2;
               ps=1;
               lcd_clear();
              } 
              if((!PINC.1)&&(ps==0))   //   
              { 
                if(subProgram==0)    //     
                { 
                sub_time=1;     
                ps_set=1;  //    
                ps=1;                     
                _lcd_write_data(0xe);     //  
                lcd_gotoxy(1,1);     
                subProgram=8;  // 8- 
                }
              }
              if((!PINC.3)&&(ps==0)) //   
              {  delay_ms(80);
                menu=0;             
                ps=1;
              }
            }              
            
            ////////////////  
            if(sub_time==1)           
            { 
              if((!PINC.1)&&(ps_set==0))   //  
              { 
                if(subProgram==9)
                {  
                 ps_set=1;  //    
                 ps=1;                     
                 _lcd_write_data(0xc);     //       
                 subProgram=0;  // 0-  
                 sub_time=0;  
                 rtc_set_time(hour,min,0);
                }                             
                if(subProgram==8)
                {  
                 ps_set=1;  //                         
                 lcd_gotoxy(4,1);     
                 subProgram=9;  //8- 
                } 

              }
              if((!PINC.2)&&(ps_set==0))   //   
              {                              
                if(subProgram==9)
                {  
                 ps_set=1;                        
                 lcd_gotoxy(1,1);     
                 subProgram=8;  
                }

              }
              if((!PINC.0)&&(ps_set==0))  // 
              {                           
                if(subProgram==8)      // 
                {              
                  hour++;
                  if(hour>23)
                  {
                   hour=0;                  
                  }
                  lcd_gotoxy(0,1);  
                  lcd_putchar(hour/10+0x30);
                  lcd_putchar(hour%10+0x30);
                  lcd_gotoxy(1,1);
                } 
                if(subProgram==9)      // 
                {              
                  min++;
                  if(min>59)
                  {
                   min=0;                  
                  }
                  lcd_gotoxy(3,1);  
                  lcd_putchar(min/10+0x30);
                  lcd_putchar(min%10+0x30);
                  lcd_gotoxy(4,1);
                }                
                ps_set=1;
              }  
              
              if((!PINC.3)&&(ps_set==0))  // 
              {                           
                if(subProgram==8)      // 
                {                                
                  if(hour<1)
                  {
                   hour=24;                  
                  }
                  hour--;
                  lcd_gotoxy(0,1);  
                  lcd_putchar(hour/10+0x30);
                  lcd_putchar(hour%10+0x30);
                  lcd_gotoxy(1,1);
                } 
                if(subProgram==9)      // 
                { 
                if(min==0)    
                {
                   min=60;                  
                }
                  min--;
                  lcd_gotoxy(3,1);  
                  lcd_putchar(min/10+0x30);
                  lcd_putchar(min%10+0x30);
                  lcd_gotoxy(4,1);
                }                 
                ps_set=1;
              } 
              if((PINC.0)&&(PINC.1)&&(PINC.2)&&(PINC.3))  //   
              {            
               ps_set=0;
              }
            } 
               
}
//*********** ******************////
void set_date()
{
///   
            if(sub_date==0)
            {   
             
              lcd_gotoxy(0,0);
              lcd_puts("Set date");
              lcd_gotoxy(0,1);
              lcd_putchar(day/10+0x30);
              lcd_putchar(day%10+0x30);
              lcd_putchar('-');
              lcd_putchar(month/10+0x30);
              lcd_putchar(month%10+0x30);
              lcd_putchar('-');
              lcd_putchar(year/10+0x30);
              lcd_putchar(year%10+0x30); 
              
               
              if((!PINC.3)&&(ps==0))
              { 
                if(subProgram==0)     //    
                {
                menu=1;
                ps=1;
                lcd_clear();
                }             
              }
              if((!PINC.1)&&(ps==0))        //   
              {
               sub_date=1;     
               ps_set=1;  //                         
               _lcd_write_data(0xe);     //  
               lcd_gotoxy(1,1);     
               subProgram=4;  //4-  
              }
            } 
///             
            if(sub_date==1)
            {
              if((!PINC.0)&&(ps_set==0))  // 
              {                           
                if(subProgram==4)      // 
                {              
                  day++;
                  if(day>31)
                  {
                   day=1;                  
                  }
                  lcd_gotoxy(0,1);  
                  lcd_putchar(day/10+0x30);
                  lcd_putchar(day%10+0x30);
                  lcd_gotoxy(1,1);
                }
                if(subProgram==5)       // 
                {
                  month++; 
                  if(month>12)    
                  {
                     month=1;                  
                  }
                  
                  lcd_gotoxy(3,1);  
                  lcd_putchar(month/10+0x30);
                  lcd_putchar(month%10+0x30);
                  lcd_gotoxy(4,1);
                }  
                if(subProgram==6)       // 
                {
                  year++; 
                  if(year>99)    
                  {
                     year=0;                  
                  }
                  
                  lcd_gotoxy(6,1);  
                  lcd_putchar(year/10+0x30);
                  lcd_putchar(year%10+0x30);
                  lcd_gotoxy(7,1);
                }
                ps_set=1; 
              }
              if((!PINC.3)&&(ps_set==0))  // 
              {                           
                if(subProgram==4)       // 
                {
                  day--; 
                  if(day<1)    
                  {
                     day=31;                  
                  }
                  
                  lcd_gotoxy(0,1);  
                  lcd_putchar(day/10+0x30);
                  lcd_putchar(day%10+0x30);
                  lcd_gotoxy(1,1);
                }
                if(subProgram==5)       // 
                {
                  month--; 
                  if(month<1)    
                  {
                     month=12;                  
                  }
                  
                  lcd_gotoxy(3,1);  
                  lcd_putchar(month/10+0x30);
                  lcd_putchar(month%10+0x30);
                  lcd_gotoxy(4,1);
                }
                if(subProgram==6)       // 
                {                   
                  if(year==0)    
                  {
                     year=100;                  
                  }
                  year--;
                  lcd_gotoxy(6,1);  
                  lcd_putchar(year/10+0x30);
                  lcd_putchar(year%10+0x30);
                  lcd_gotoxy(7,1);
                }  
                    
                 ps_set=1;
              }
              if((!PINC.1)&&(ps_set==0))  
              {                                         
                ps_set=1; 
                if(subProgram==6) ///   
                { 
                  subProgram=0;
                  sub_date=0; 
                  _lcd_write_data(0xc);  // 
                  rtc_set_date(week_day,day,month,year); 
                  ps=1;             
                }
                if(subProgram==5) ///   
                { 
                  lcd_gotoxy(7,1);
                  subProgram=6;               
                }
                if(subProgram==4) ///  
                { 
                  lcd_gotoxy(4,1);
                  subProgram=5;               
                }               
                
              } 
              if((!PINC.2)&&(ps_set==0))  
              {                                         
                ps_set=1;
                if(subProgram==5) ///  
                { 
                  lcd_gotoxy(1,1);
                  subProgram=4;               
                }  
                if(subProgram==6) ///   
                { 
                  lcd_gotoxy(4,1);
                  subProgram=5;               
                }
              
                
              } 
              if((PINC.0)&&(PINC.1)&&(PINC.2)&&(PINC.3))  //   
              {            
               ps_set=0;
              }
            }
}


//      
void fDisplayMenu(unsigned int countmenu)
{        
        unsigned char tempmenu;                         
        switch(countmenu)
        {// 
                case 1: lcd_puts(str[countmenu-1]); break;
                case 2: lcd_puts(str[countmenu-1]); break;
                case 3: lcd_puts(str[countmenu-1]); break;
                case 4: lcd_puts(str[countmenu-1]); break;
                case 5: lcd_puts(str[countmenu-1]); break;
        //  
                case 20: show_alarm(); break; //  1000
             
        //   
                case 100: 
                {       
                         
                        break;
                }
                case 110: 
                {
                         
                        break;
                }
                case 120: 
                {
                         
                        break;
                }
        //          
                
                case 21: lcd_puts(str[4]); break;  //Distance
                case 22: //Display stopwatcher
                {
                        lcd_puts(str[10]);
                      
                        break;
                } 
        //                 
                case 200: //m/s
                {
                        lcd_puts(str[5]); 
                                    
                        break;
                }
                case 201: //km/h
                {
                        lcd_puts(str[6]);                              
                     
                        break;
                }
                case 220: //      -  3
                {
                       
                        break;
                }
                //    
                case 2000:  count/=10; break;//  0 MDCR            
                case 2010:  count/=10; break; //  0 MDCR
        //    
                case 210: //All distance
                {
                        lcd_puts(str[7]); 
                      
                        break; 
                }
                case 211: //Distance from point
                {
                        lcd_puts(str[8]); 
                       
                        break; 
                }
                case 212: //All
                {
                        lcd_puts(str[9]); 
                        
                        break;
                }
                //    
                case 2100:  count/=10; break;//  1 MDCR
                case 2110:  count/=10; break;//  1 MDCR
                case 2120:   count/=10; break;//  2    1
                //  Reset
                case 30: lcd_puts(str[14]); break;
                case 31: lcd_puts(str[15]); break;
                //   
                case 300:  count/=10; break;
                //  
                case 310: lcd_puts(str[16]); break;
                case 3100:  count/=100; break;
        //              
                default: 
                {   
                        //           7    
                        //                          
                                                
                        break;
                }
        }       
        delay_ms(50);             
}

void fMenu()
{                   
       
        count=1;
        while(1)
        {       
                delay_ms(10);
                lcd_clear();              
                fChangeButton();
                menu=fSelButton();
                //Menu
                if(menu==0x06)
                {    
                        count*=10;          
                }
                //    Left
                if(menu==0x05)
                {
                        count--; 
                        //  6 -     - 
                        
                }
                //   Right
                if(menu==0x09)
                {      
                        count++; 
                        //  6  ,  -     +
                                 
                }
                //  Exit
                if(menu==0x0A)
                {     
                        if(count<10)
                                break;
                        if(count>=10)
                        {                  
                                count/=10; 
                        }
                }
                //        count
                
                fDisplayMenu(count);                        
        };
        //       /1
        TIMSK|=0b00100101;
}


void main(void)
{






PORTB |= 1<<4;
while (1)
      {   
      
      // Place your code here
     /* fChangeButton();
                menu=fSelButton();   */
       
      BUT_Debrief();
      l = BUT_GetKey();         
            
            
            //BUT_SetKey(3);
           if(l==2){ 
           count=1;
           
           } 
            if(l==1){ 
           count=2;
           
           }
           if (count==1){
          PORTB &= ~(1<<4);
                } 
           if (count==2){
          PORTB |= 1<<4;
                }     
      }
}