Yumurta.c


1
/*Eieruhr*/
2
3
#define F_CPU 8000000
4
5
#include <avr/io.h>
6
#include <util/delay.h>
7
#include <avr/interrupt.h>
8
#include <avr/sleep.h>
9
10
volatile int sek,dez,min;
11
12
void led (int zahl)
13
{
14
  switch (zahl)
15
  {
16
    case 0:
17
  PORTD=0b01000000;
18
  break;
19
    case 1:
20
  PORTD=0b01111001;
21
  break;
22
    case 2:
23
  PORTD=0b00100100;
24
  break;
25
    case 3:
26
  PORTD=0b00110000;
27
  break;
28
    case 4:
29
  PORTD=0b10011001;
30
  break;
31
    case 5:
32
  PORTD=0b00010010;
33
  break;
34
    case 6:
35
  PORTD=0b00000010;
36
  break;
37
    case 7:
38
  PORTD=0b01111000;
39
  break;
40
    case 8:
41
  PORTD=0b00000000;
42
  break;
43
    case 9:
44
  PORTD=0b00010000;
45
  break;
46
  }
47
}
48
49
void ausgabe (void)
50
{
51
  PORTC=0b00000110;
52
  led (min);
53
  _delay_ms(1); 
54
  PORTC=0b00000101;
55
  led (dez);
56
  _delay_ms(1);
57
  PORTC=0b00000011;   //LOW ist"on"!
58
  led (sek);
59
  _delay_ms(1);
60
}
61
62
63
64
main()
65
{
66
  DDRD=0xFF;
67
  DDRC=0b11010111;
68
  
69
  TCCR1B=(1<<CS12);
70
  TIMSK=(1<<TOIE1);
71
  TCNT1=31250;
72
73
  ADMUX=(1<<REFS1)|(1<<REFS0)|(1<<MUX2)|(1<<MUX0)|(1<<ADLAR);
74
  ADCSRA=(1<<ADEN)|(1<<ADSC)|(1<<ADFR)|(1<<ADPS2)|(1<<ADPS1);
75
  
76
  sek=3;
77
  dez=0;
78
  min=0;
79
80
  float i=0,x;
81
  int  a;
82
  
83
  sei();  
84
85
  while(1)
86
  {
87
  i=i++;
88
89
  if ((ADC>30000)&&i>180)
90
    {
91
      cli();
92
        i=0;
93
        sek=0;
94
        
95
          if (dez<3)
96
          {  
97
            dez=3;
98
          }
99
          else
100
          {
101
            min=min++;
102
            dez=0;
103
          }
104
    }
105
106
    if ((ADC>60000)&&i>40)
107
    {
108
      cli();
109
        i=0;
110
        sek=0;
111
        
112
          if (dez<3)
113
          {  
114
            dez=3;
115
          }
116
          else
117
          {
118
            min=min++;
119
            dez=0;
120
          }
121
    }
122
      else if (i>400)
123
      {
124
        sei();
125
      }
126
127
  if (min>=10)
128
    {
129
      cli();
130
      min=0;
131
      dez=0;
132
      sek=0;
133
    }
134
    
135
    if (sek==0 && dez==0 && min==0 && ADC<30000)
136
      {
137
        cli();
138
        a=10;
139
140
        while (ADC<30000 && a>00)
141
        {
142
        x=600;
143
        a=a--; 
144
145
          while (x>100&&(ADC<30000))
146
          {
147
            x=x--;
148
149
            PORTC=0b10011111;
150
            _delay_us(100);
151
            PORTC=0b10001111;
152
            _delay_us(x);      
153
          }
154
          x=100;
155
156
          while(x>0&&(ADC<30000))
157
          {
158
            x=x--;
159
            ausgabe();
160
          }
161
        }
162
        PORTC=0b00000111;
163
        PORTD=0b00000000;
164
165
        _delay_ms(2000);
166
        sei();
167
        while (ADC<30000)
168
        {}
169
        min=0;
170
        dez=0;
171
        sek=0;
172
173
        i=190;
174
      }    
175
    ausgabe();
176
  }
177
}
178
179
ISR (TIMER1_OVF_vect)
180
{
181
  sek=sek--;
182
  if (sek<0)
183
  {
184
    sek=9;
185
    dez=dez--;
186
       if (dez<0)
187
       {  
188
       dez=5;
189
       min=min--;
190
      }
191
  }
192
193
  TCNT1=31250;
194
}