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 | }
|