
#include <mega8.h>
#include <delay.h> 

///sba23-11egwa///////////
/////
/////
/////
/////
////seg//
//pb3 C
//pb4 D
//pb5 E
//pb2 B
//pb1 A
//pb0 H (dp)
//pb7 F
//pb6 G
/////////
////dec//
//pc0//R0
//pc1//G0
//pc2//R1
//pc3//G1
/////////
//#define segmt_a PORTB.1
//#define segmt_b PORTB.2
//#define segmt_c PORTB.3
//#define segmt_d PORTB.4
//#define segmt_e PORTB.5
//#define segmt_f PORTB.7
//#define segmt_g PORTB.6
//#define segmt_h PORTB.0
//font
//DIG[0] = segmt_a | segmt_b | segmt_c | segmt_d | segmt_e | segmt_f
//DIG[1] = segmt_b | segmt_c
//DIG[2] = segmt_a | segmt_b | segmt_d | segmt_e
//DIG[3] = segmt_a | segmt_b | segmt_c | segmt_d | segmt_g
//DIG[4] = segmt_b | segmt_c | segmt_g | segmt_f
//DIG[5] = segmt_a | segmt_c | segmt_d | segmt_g | segmt_f
//DIG[6] = segmt_a | segmt_c | segmt_d | segmt_e | segmt_f | segmt_g
//DIG[7] = segmt_a | segmt_b | segmt_c | segmt_f
//DIG[8] = segmt_a | segmt_b | segmt_c | segmt_d | segmt_e | segmt_f | segmt_g
//DIG[9] = segmt_a | segmt_b | segmt_c | segmt_d | segmt_f | segmt_g
//DIG[.|,] = segmt_h
//DIG[a|A] = segmt_a & segmt_b & segmt_c & segmt_e & segmt_f & segmt_g
//DIG[b|B] = segmt_c & segmt_d & segmt_e & segmt_f & segmt_g
//DIG[c|C] = segmt_a & segmt_d & segmt_e & segmt_f
//DIG[d|D] = segmt_b & segmt_c & segmt_d & segmt_e & segmt_f & segmt_g
//DIG[e|E] = segmt_a & segmt_d & segmt_e & segmt_f & segmt_g
//DIG[f|F] = segmt_a & segmt_e & segmt_f & segmt_g
//DIG[g|G] = segmt_a & segmt_c & segmt_d & segmt_e & segmt_f & segmt_g
//DIG[h|H] = segmt_b & segmt_c & segmt_e & segmt_f & segmt_g
//DIG[p|P] = segmt_a & segmt_b & segmt_e & segmt_f & segmt_g
//DIG[l|L] = segmt_d & segmt_e & segmt_f
//DIG[o|O] = segmt_c & segmt_d & segmt_e & segmt_g
//DIG[t|T] = segmt_d & segmt_e & segmt_f & segmt_g
//DIG[°] = segmt_a & segmt_b & segmt_f & segmt_g
//DIG[=] =segmt_a & segmt_g
//DIG[_] = segmt_d
//// Timer/Counter 1 initialization
//// Clock source: System Clock
//// Clock value: 8000,000 kHz
//// Mode: Normal top=0xFFFF
//// OC1A output: Discon.
//// OC1B output: Discon.
//// Noise Canceler: Off
//// Input Capture on Falling Edge
//// Timer1 Overflow Interrupt: Off
//// Input Capture Interrupt: Off
//// Compare A Match Interrupt: Off
//// Compare B Match Interrupt: Off
//TCCR1A=0x00;
//TCCR1B=0x01;
//TCNT1H=0x00;
//TCNT1L=0x00;
//ICR1H=0x00;
////ICR1L=0x00;
////OCR1AH=0x00;
////OCR1AL=0x00;
//OCR1BH=0x00;
//OCR1BL=0x00;
//
// OCR1AH=0x3D;
// OCR1AL=0x09;
//TIMSK=0b00010000; 
//TIMSK=0b00100000;//0x04;//разрешить прерывания от таймеров




/////////////////////
//bit i=0;
//bit red =0;
//bit green=0;
//bit yello=0;
/////////////////////
//bit i;
//unsigned char number_x1 = 0;	; единице числа
//unsigned char number_x10 = 0;	; десятки числа
unsigned char number;
unsigned char sumbol;
//unsigned char sumbol_;

unsigned char ds1307_rddata;

unsigned char pwm_=3; unsigned char i;

unsigned char nn,reg,red_x10=32,green_x10=32,red_x1=32,green_x1=32,red_x10_,green_x10_,red_x1_,green_x1_;
bit red_x10_dp=0,green_x10_dp=0,red_x1_dp=0,green_x1_dp=0;
//bit q;

//red_x10(33),green_x10(33),red_x1(33),green_x1(33);



static flash unsigned char sumbol_[] = {

(0xBE), //case 0 : {PORTB=0xBE,DDRB=0xFF; break;};0
(0x0C), //case 1 : {PORTB=0x0C,DDRB=0xFF; break;};1
(0x76), //case 2 : {PORTB=0x76,DDRB=0xFF; break;};2
(0x5E), //case 3 : {PORTB=0x5E,DDRB=0xFF; break;};3
(0xCC), //case 4 : {PORTB=0xCC,DDRB=0xFF; break;};4
(0xDA), //case 5 : {PORTB=0xDA,DDRB=0xFF; break;};5
(0xFA), //case 6 : {PORTB=0xFA,DDRB=0xFF; break;};6
(0x8E), //case 7 : {PORTB=0x8E,DDRB=0xFF; break;};7
(0xFE), //case 8 : {PORTB=0xFE,DDRB=0xFF; break;};8
(0xDE), //case 9 : {PORTB=0xDE,DDRB=0xFF; break;};9
(0xEE), //case "A" : {PORTB=0xEE;DDRB=0xFF; break;};10
(0xF8), //case "B" : {PORTB=0xF8;DDRB=0xFF; break;};11
(0xB2), //case "C" : {PORTB=0xB2;DDRB=0xFF; break;} 12
(0x7C), //case "D" : {PORTB=0x7C;DDRB=0xFF; break;} 13
(0xF2), //case "E" : {PORTB=0xF2;DDRB=0xFF; break;} 14
(0xE2), //case "F" : {PORTB=0xE2;DDRB=0xFF; break;} 15
(0xE6), //case "P" : {PORTB=0xE6;DDRB=0xFF; break;} 16
(0xF0), //case "T" : {PORTB=0xF0;DDRB=0xFF; break;} 17
(0xDC), //case "Y" : {PORTB=0xDC;DDRB=0xFF; break;} 18
(0xBC), //case "U" : {PORTB=0xBC;DDRB=0xFF; break;} 19
(0xB0), //case "L" : {PORTB=0xB0;DDRB=0xFF; break;} 20
(0xEC), //case "H" : {PORTB=0xEC;DDRB=0xFF; break;} 21
(0xBA), //case "G" : {PORTB=0xBA;DDRB=0xFF; break;} 22
(0xDA), //case "S" : {PORTB=0xDA;DDRB=0xFF; break;} 23
(0xA0), //case "I" : {PORTB=0xA0;DDRB=0xFF; break;} 24
(0x78), //case "O" : {PORTB=0x78;DDRB=0xFF; break;} 25
(0x64), //case "z" : {PORTB=0x64;DDRB=0xFF; break;} 26
(0xC6), //case "°" : {PORTB=0xC6;DDRB=0xFF; break;} 27
(0x10), //case "_" : {PORTB=0x10;DDRB=0xFF; break;} 28
(0x40), //case "-" : {PORTB=0x40;DDRB=0xFF; break;} 29
(0x42), //case "=" : {PORTB=0x42;DDRB=0xFF; break;} 30
(0x01), //case "." : {PORTB=0x01;DDRB=0xFF; break;} 31
(0x00) //case "sp" : {PORTB=0x00;DDRB=0xFF; break;} //space // 32
};

//   switch () {
//    case :
//    break;
//    }; 

///////////////////////////////////////////////
//interrupt [TIM1_OVF] void timer1_ovf_isr(void)
//{};
// Timer1 input capture interrupt service routine
interrupt [TIM1_COMPA] void timer1_compa_isr(void)
{ #asm("cli")
//unsigned char _color_
//////////////////////////


//switch () {
//case 'red_x10':
//    break;
//    
//case'green_x10' :
//    break;
//    
//case'red_x1' :
//    break;
//    
//case 'green_x1' :
//    break;
//    }; 



                      
 switch (green_x1) {
case 0 : green_x1_=(0); break;
case 1 : green_x1_=(1); break;
case 2 : green_x1_=(2); break;
case 3 : green_x1_=(3); break;
case 4 : green_x1_=(4); break;
case 5 : green_x1_=(5); break;
case 6 : green_x1_=(6); break;
case 7 : green_x1_=(7); break;
case 8 : green_x1_=(8); break;
case 9 : green_x1_=(9); break;
case 'A'|'a' : green_x1_=(10); break;
case 'B'|'b' : green_x1_=(11); break;
case 'C'|'c' : green_x1_=(12); break;
case 'D'|'d' : green_x1_=(13); break;
case 'E'|'e' : green_x1_=(14); break;
case 'F'|'f' : green_x1_=(15); break;
case 'P'|'p' : green_x1_=(16); break;
case 'T'|'t' : green_x1_=(17); break;
case 'Y'|'y' : green_x1_=(18); break;
case 'U'|'u' : green_x1_=(19); break;
case 'L'|'l' : green_x1_=(20); break;
case 'H'|'h' : green_x1_=(21); break;
case 'G'|'g' : green_x1_=(22); break;
case 'S'|'s' : green_x1_=(23); break;
case 'I'|'i' : green_x1_=(24); break;
case 'O'|'o' : green_x1_=(25); break;
case 'z' : green_x1_=(26); break;
case '°' : green_x1_=(27); break;
case '_' : green_x1_=(28); break;
case '-' : green_x1_=(29); break;
case '=' : green_x1_=(30); break;
case '.' : green_x1_=(31); break;
case ' ' : green_x1_=(32); break; //space
};

                      
 switch (green_x10) {
case 0 : green_x10_=(0); break;
case 1 : green_x10_=(1); break;
case 2 : green_x10_=(2); break;
case 3 : green_x10_=(3); break;
case 4 : green_x10_=(4); break;
case 5 : green_x10_=(5); break;
case 6 : green_x10_=(6); break;
case 7 : green_x10_=(7); break;
case 8 : green_x10_=(8); break;
case 9 : green_x10_=(9); break;
case 'A'|'a' : green_x10_=(10); break;
case 'B'|'b' : green_x10_=(11); break;
case 'C'|'c' : green_x10_=(12); break;
case 'D'|'d' : green_x10_=(13); break;
case 'E'|'e' : green_x10_=(14); break;
case 'F'|'f' : green_x10_=(15); break;
case 'P'|'p' : green_x10_=(16); break;
case 'T'|'t' : green_x10_=(17); break;
case 'Y'|'y' : green_x10_=(18); break;
case 'U'|'u' : green_x10_=(19); break;
case 'L'|'l' : green_x10_=(20); break;
case 'H'|'h' : green_x10_=(21); break;
case 'G'|'g' : green_x10_=(22); break;
case 'S'|'s' : green_x10_=(23); break;
case 'I'|'i' : green_x10_=(24); break;
case 'O'|'o' : green_x10_=(25); break;
case 'z' : green_x10_=(26); break;
case '°' : green_x10_=(27); break;
case '_' : green_x10_=(28); break;
case '-' : green_x10_=(29); break;
case '=' : green_x10_=(30); break;
case '.' : green_x10_=(31); break;
case ' ' : green_x10_=(32); break; //space
};

                      
 switch (red_x1) {
case 0 : red_x1_=(0); break;
case 1 : red_x1_=(1); break;
case 2 : red_x1_=(2); break;
case 3 : red_x1_=(3); break;
case 4 : red_x1_=(4); break;
case 5 : red_x1_=(5); break;
case 6 : red_x1_=(6); break;
case 7 : red_x1_=(7); break;
case 8 : red_x1_=(8); break;
case 9 : red_x1_=(9); break;
case 'A' : red_x1_=(10); break;
case 'B' : red_x1_=(11); break;
case 'C' : red_x1_=(12); break;
case 'D' : red_x1_=(13); break;
case 'E' : red_x1_=(14); break;
case 'F' : red_x1_=(15); break;
case 'P' : red_x1_=(16); break;
case 'T' : red_x1_=(17); break;
case 'Y' : red_x1_=(18); break;
case 'U' : red_x1_=(19); break;
case 'L' : red_x1_=(20); break;
case 'H' : red_x1_=(21); break;
case 'G' : red_x1_=(22); break;
case 'S' : red_x1_=(23); break;
case 'I' : red_x1_=(24); break;
case 'O' : red_x1_=(25); break;
case 'z' : red_x1_=(26); break;
case '°' : red_x1_=(27); break;
case '_' : red_x1_=(28); break;
case '-' : red_x1_=(29); break;
case '=' : red_x1_=(30); break;
case '.' : red_x1_=(31); break;
case ' ' : red_x1_=(32); break; //space
};

 switch (red_x10) {
case 0 : red_x10_=(0); break;
case 1 : red_x10_=(1); break;
case 2 : red_x10_=(2); break;
case 3 : red_x10_=(3); break;
case 4 : red_x10_=(4); break;
case 5 : red_x10_=(5); break;
case 6 : red_x10_=(6); break;
case 7 : red_x10_=(7); break;
case 8 : red_x10_=(8); break;
case 9 : red_x10_=(9); break;
case 'A' : red_x10_=(10); break;
case 'B' : red_x10_=(11); break;
case 'C' : red_x10_=(12); break;
case 'D' : red_x10_=(13); break;
case 'E' : red_x10_=(14); break;
case 'F' : red_x10_=(15); break;
case 'P' : red_x10_=(16); break;
case 'T' : red_x10_=(17); break;
case 'Y' : red_x10_=(18); break;
case 'U' : red_x10_=(19); break;
case 'L' : red_x10_=(20); break;
case 'H' : red_x10_=(21); break;
case 'G' : red_x10_=(22); break;
case 'S' : red_x10_=(23); break;
case 'I' : red_x10_=(24); break;
case 'O' : red_x10_=(25); break;
case 'z' : red_x10_=(26); break;
case '°' : red_x10_=(27); break;
case '_' : red_x10_=(28); break;
case '-' : red_x10_=(29); break;
case '=' : red_x10_=(30); break;
case '.' : red_x10_=(31); break;
case ' ' : red_x10_=(32); break; //space
};

 
//////////////////////////
TIMSK=0x10;
PORTC.0=0;PORTC.1=0; PORTC.2=0;PORTC.3=0; DDRC   = 0x0F;  // 0b00001111   PORTC=0x00;  DDRC=0x0F;
    if(reg==0){PORTB=sumbol_[red_x10_];PORTC.0=1;    //  number=red_x10      {PORTB=sumbol_[red_x10];PORTC.0=1;
            PORTB.0=red_x10_dp; //десятичная точка - вкл=1; выкл=0.
            switch (pwm_){
            case 0 : {delay_us(700);break;}
            case 1 : {delay_us(300);break;}
            case 2 : {delay_us(100);break;}
            case 3 : {delay_us(50);break;}};
            reg++;PORTC.0=0;}
            
    if(reg==1){PORTB=sumbol_[green_x10_];PORTC.1=1;
            PORTB.0=green_x10_dp;
            switch (pwm_){
            case 0 : {delay_us(700);break;}
            case 1 : {delay_us(300);break;}
            case 2 : {delay_us(100);break;}
            case 3 : {delay_us(50);break;}};
            reg++;PORTC.1=0;}
            
    if(reg==2){PORTB=sumbol_[red_x1_];PORTC.2=1;
           PORTB.0=red_x1_dp;
           switch (pwm_){ 
            case 0 : {delay_us(700);break;}
            case 1 : {delay_us(300);break;}
            case 2 : {delay_us(100);break;}
            case 3 : {delay_us(50);break;}};
            reg++; PORTC.2=0;}
            
    else{PORTB=sumbol_[green_x1_];PORTC.3=1;
            PORTB.0=green_x1_dp;
            switch (pwm_){
            case 0 : {delay_us(700);break;}
            case 1 : {delay_us(300);break;}
            case 2 : {delay_us(100);break;}
            case 3 : {delay_us(50);break;}};           
            reg=0; PORTC.3=0;};
#asm("sei")
};



  void BlkScrAll(void) {
        red_x10=(32);red_x10_dp=(0);
        green_x10=(32);green_x10_dp=(0);
        red_x1=(32);red_x1_dp=(0);
        green_x1=(32);green_x1_dp=(0);};
        
  void BlkScrRed(void) {
        red_x10=(32);red_x10_dp=(0);
        red_x1=(32);red_x1_dp=(0);
        };
          
  void BlkScrGrn(void) {
        green_x10=(32);green_x10_dp=(0);
        green_x1=(32);green_x1_dp=(0);};
        
        

        
        
    void number_y(unsigned char nmb_red_green)
    {
            BlkScrAll();
            red_x1=((nmb_red_green)%10);
            red_x10=((nmb_red_green)/10);
            green_x1=((nmb_red_green)%10);
            green_x10=((nmb_red_green)/10);};

    void number_r(unsigned char nmb_red)
    {
            BlkScrAll();
            red_x1=((nmb_red)%10);
            red_x10=((nmb_red)/10); };

    void number_g(unsigned char nmb_green)
    {
            BlkScrAll();
            green_x1=((nmb_green)%10);
            green_x10=((nmb_green)/10);}; 

