Kód: Vybrat vše
int i=3456;
unsigned char znaky [10] = {
0b00000011, //0
0b10011111, //1
0b00100101, //2
0b00001101, //3
0b10011001, //4
0b01101001, //5
0b01000001, //6
0b00011111, //7
0b00000001, //8
0b00001001 }; //9
unsigned char anody [4] = {
0b0001, //0 - 4.digit
0b0010, //1 - 3.digit
0b0100, //2 - 2.digit
0b1000 }; //3 - 1.digit
ISR(TIMER0_OVF_vect)
{
tisice=i/1000; // 4-cif. cislo rozsekej na cifry
pom=i%1000;
stovky=pom/100;
pom=pom%100;
desitky=pom/10;
jednotky=pom%10;
switch (cyklus) {
case 0:
data_k_odeslani= (znaky[jednotky]<<4) | anody[0]; // sluč registry pro katody a anody
while(pocet_odeslanych < 12) //posilam 12 bitu
{ PORTC=PORTC&0b11111110; //hodiny do nuly
if(data_k_odeslani & 0x01) PORTC=PORTC|0b00000010;
else PORTC=PORTC&0b11111101;
PORTC=PORTC|0b00000001; // hodiny do jednicky
data_k_odeslani>>=1; //posun data o bit doprava
pocet_odeslanych++;
}
PORTC=PORTC|0b00000100; // pusť data na paralelní výstupy
asm("nop");
PORTC=PORTC&0b11111011; // výstupy uzavři
cyklus=1;
break;
case 1:
data_k_odeslani= (znaky[desitky]<<4) | anody[1]; // sluč registry pro katody a anody
while(pocet_odeslanych < 12) //posilam 12 bitu
{ PORTC=PORTC&0b11111110; //hodiny do nuly
if(data_k_odeslani & 0x01) PORTC=PORTC|0b00000010;
else PORTC=PORTC&0b11111101;
PORTC=PORTC|0b00000001; // hodiny do jednicky
data_k_odeslani>>=1; //posun data o bit doprava
pocet_odeslanych++;
}
PORTC=PORTC|0b00000100; // vpusť data na paralelní výstupy
asm("nop");
PORTC=PORTC&0b11111011; // výstupyuzavři
cyklus=0;
break;
} // konec switch
TCNT0=217;
}