Bilet 8

Download as txt, pdf, or txt
Download as txt, pdf, or txt
You are on page 1of 3

b).

Numarator incrementat la fiecare sec + se aprinde ledul la multiplu de 5

int ms=0,m=0, s=0, digit=0;

void display(char p, char c)


{
PORTA &= 0b11110000;
PORTC &= 0b00000000;

switch(c){
case 0: PORTC|=0b00111111; break;
case 1: PORTC|=0b00000110; break;
case 2: PORTC|=~0b10100100; break;
case 3: PORTC|=~0b10110000; break;
case 4: PORTC|=~0b10011001; break;
case 5: PORTC|=~0b10010010; break;
case 6: PORTC|=~0b10000010; break;
case 7: PORTC|=~0b11111000; break;
case 8: PORTC|=~0b10000000; break;
case 9: PORTC|=~0b10010000; break;
}
switch(p){
case 1: PORTA|=0b00001000; break;
case 2: PORTA|=0b00000100; break;
case 3: PORTA|=0b00000010; break;
case 4: PORTA|=0b00000001; break;
}
// Delay_ms(1); // #include <util/delay.h>
}

void init_timer()
{
TCCR0 = 0b00001011; //CTC-3,6, Prescaler-0,1,2
TCNT0 = 0;
OCR0 = 125;
TIMSK |= 0b00000010;//set interrupt OCM
}

void Timer0_ISR() iv IVT_ADDR_TIMER0_COMP{


digit++;
switch(digit)
{ case 1: display(4,s%10);break;
case 2: display(3,(s/10)%10);break;
case 3: display(2,(m%10);break;
case 4: display(1,(m/10)%10); digit=0;break;
}
if (ms==1000){
s++;
if(s==60)
{
s=0;
m++;
}
ms=0;
}
else ms++;
if(ms%5==0){
PORTD|=1<<7; //aprinde becul
}
if(PINA&(1<<5)){
ms=0;
s=0;
m=0;}

c).Numara din 2 in 2

void init_timer()
{
TCCR0 = 0b00001011; //CTC-3,6, Prescaler-0,1,2
TCNT0 = 0;
OCR0 = 125;
TIMSK |= 0b00000010;//set interrupt OCM
}

int gain =1;


int counter = 0;
void Init_INT1()
{
GICR = 0b10000000; //Int1
MCUCR = 0b00001000; //Falling edge
DDRD &= ~(1<<3); //PD3 - Input
}

void ISR_Int1() iv IVT_ADDR_INT1 ics ICS_AUTO {


//////contorizarea apasarilor
gain++;

////// Timpul intre 2 apasari


//value = ms;
//ms=0
}
void Timer0_ISR() iv IVT_ADDR_TIMER0_COMP{
digit++;

switch(digit)
{ case 1: display(4,s%10);break;
case 2: display(3,(s/10)%10);break;
case 3: display(2,(m%10);break;
case 4: display(1,(m/10)%10); digit=0;break;
}

if (ms==1000){
//8//counter += gain;
s++;
if(s==60)
{
s=0;
m++;
}
ms=0;
}
else ms++;
//bilet 3//
if(ms%5==0){
PORTA|=1<<5; //aprinde becul
}
if(PINA&(1<<5)){
ms=0;
s=0;
m=0;}

}//

void main()
{
DDRA = 0b00001111; //seteaza pinii de iesire
DDRC = 0b11111111;

init_timer();
SREG_I_bit=1; //Set Enable Interrupt
Init_Int1()?
for(;;){

}
}

d). Se reseteaza si incepe sa numere din 1 in 1 la apasarea unui buton

if(PINDF&(1<<2))
{
if(bp==1){
ms=0;
s=0;
m=0;
}
else bp=0;

You might also like