1 | // Bibliotheken einfüen//
|
2 |
|
3 | #include <avr/io.h>
|
4 | #include "lcd-routines.h"
|
5 | #include <util/delay.h>
|
6 | #include <stdint.h>
|
7 |
|
8 | //PIN Definitionen//
|
9 |
|
10 |
|
11 | #define AUSGANG_SCHALTER PB2
|
12 | #define AUSGANG_GRN PB3
|
13 | #define AUSGANG_ROT PB4
|
14 |
|
15 |
|
16 | #define TASTER_EIN1 PC0
|
17 | #define TASTER_EIN2 PC1
|
18 | #define TASTER_EIN3 PC2
|
19 | #define TASTER_AUS1 PC3
|
20 | #define TASTER_AUS2 PC4
|
21 | #define TASTER_AUS3 PC5
|
22 |
|
23 |
|
24 | #define EINGANG_SYN PB0
|
25 | #define EINGANG_UM PB1
|
26 |
|
27 |
|
28 | // Hauptprogramm //
|
29 |
|
30 | int main(void)
|
31 | {
|
32 |
|
33 | // Initialisierung der Variablen //
|
34 |
|
35 | uint8_t Ein1;
|
36 | uint8_t Ein2;
|
37 | uint8_t Ein3;
|
38 | uint8_t Ein4;
|
39 | uint8_t Aus1;
|
40 | uint8_t Aus2;
|
41 | uint8_t Aus3;
|
42 | uint8_t Aus4;
|
43 | uint16_t ZeitEin;
|
44 | uint16_t ZeitAus;
|
45 |
|
46 |
|
47 |
|
48 | char Buffer1 [10];
|
49 | char Buffer2 [10];
|
50 | char Buffer3 [10];
|
51 | char Buffer4 [10];
|
52 | char Buffer5 [10];
|
53 | char Buffer6 [10];
|
54 | char Buffer7 [10];
|
55 | char Buffer8 [10];
|
56 |
|
57 | // Initialisierung des LCD //
|
58 |
|
59 | lcd_init();
|
60 |
|
61 | // Die Ausgabemarke in die 2te Zeile setzen//
|
62 |
|
63 | lcd_setcursor(5,1);
|
64 |
|
65 | // Willkommenstext ausgeben//
|
66 |
|
67 | lcd_string("Guten Tag");
|
68 | _delay_ms(5000);
|
69 |
|
70 | lcd_clear();
|
71 |
|
72 | // Die Ausgabemarke in die 2te Zeile setzen und Text Ausgeben //
|
73 |
|
74 | lcd_setcursor(0,1);
|
75 | lcd_string("Einschalt.:");
|
76 |
|
77 | // Die Ausgabemarke in die 2te Zeile setzen und Text ausgeben //
|
78 |
|
79 | lcd_setcursor(0,2);
|
80 | lcd_string("Ausschalt.:");
|
81 |
|
82 | // DDRx auf Ausgangs/Eingangs schalten//
|
83 |
|
84 | DDRC = 0b00000000;
|
85 | DDRB = 0b00011100;
|
86 |
|
87 | //Variablen auf 0 setzen //
|
88 |
|
89 | Ein1=0;
|
90 | Ein2=0;
|
91 | Ein3=0;
|
92 | Ein4=0;
|
93 | Aus1=0;
|
94 | Aus2=0;
|
95 | Aus3=0;
|
96 | Aus4=0;
|
97 |
|
98 | // Hauptprogrammschleife //
|
99 |
|
100 | while(1)
|
101 |
|
102 | {
|
103 |
|
104 |
|
105 |
|
106 | //Status LED einschalten (Grün) //
|
107 |
|
108 | PORTB |= (1<<AUSGANG_GRN);
|
109 | PORTB &= ~(1<<AUSGANG_ROT);
|
110 |
|
111 |
|
112 | //Variablen in char umwandeln //
|
113 |
|
114 | itoa (Ein1,Buffer1,10);
|
115 | itoa (Ein2,Buffer2,10);
|
116 | itoa (Ein3,Buffer3,10);
|
117 | itoa (Ein4,Buffer4,10);
|
118 | itoa (Aus1,Buffer5,10);
|
119 | itoa (Aus2,Buffer6,10);
|
120 | itoa (Aus3,Buffer7,10);
|
121 | itoa (Aus4,Buffer8,10);
|
122 |
|
123 | // Die Ausgabemarke 1te Zeile an 12 Stelle setzen Zeit + Einschaltverzögerung ausgeben //
|
124 |
|
125 | lcd_setcursor(11,1);
|
126 | lcd_string(Buffer4);
|
127 | lcd_string(Buffer1);
|
128 | lcd_string(Buffer2);
|
129 | lcd_data('.');
|
130 | lcd_string(Buffer3);
|
131 |
|
132 | // Die Ausgabemarke 2te Zeile an 12 Stelle setzen + Zeit Einschaltverzögerung ausgeben //
|
133 |
|
134 | lcd_setcursor(11,2);
|
135 | lcd_string(Buffer8);
|
136 | lcd_string(Buffer5);
|
137 | lcd_string(Buffer6);
|
138 | lcd_data('.');
|
139 | lcd_string(Buffer7);
|
140 |
|
141 |
|
142 | // Tastenabfrage TASTER_EIN1 //
|
143 |
|
144 | if ( TASTER_EIN1 != 1)
|
145 |
|
146 | {
|
147 | Ein1 = Ein1 + 1;
|
148 |
|
149 | if (Ein1 > 9)
|
150 | {
|
151 | Ein1 = 0;
|
152 | Ein4 = Ein4 + 1;
|
153 |
|
154 | // auf 0 zurücksetzten //
|
155 |
|
156 | if (Ein4 > 3)
|
157 | {
|
158 | Ein4 = 0;
|
159 | }
|
160 | }
|
161 |
|
162 | // Tastenentprellung //
|
163 |
|
164 | _delay_ms(200);
|
165 | }
|
166 |
|
167 | // Tastenabfrage TASTER_EIN2 //
|
168 |
|
169 | if ( TASTER_EIN2 != 1 )
|
170 |
|
171 | {
|
172 | Ein2 = Ein2 + 1;
|
173 |
|
174 | // auf 0 zurücksetzten //
|
175 |
|
176 | if (Ein2 > 9)
|
177 |
|
178 | {
|
179 | Ein2 = 0;
|
180 | }
|
181 |
|
182 | //Tastenentprellung //
|
183 |
|
184 | _delay_ms(200);
|
185 | }
|
186 |
|
187 | // Tastenabfrage TASTER_EIN3 //
|
188 |
|
189 | if ( TASTER_EIN3 != 1 )
|
190 | {
|
191 | Ein3 = Ein3 + 1;
|
192 |
|
193 | // auf 0 zurücksetzten //
|
194 |
|
195 | if (Ein3 > 9)
|
196 |
|
197 | {
|
198 | Ein3 = 0;
|
199 | }
|
200 |
|
201 | // Tastenentprellung //
|
202 |
|
203 | _delay_ms(200);
|
204 | }
|
205 |
|
206 | // Tastenabfrage TASTER_Aus1
|
207 |
|
208 | if ( TASTER_AUS1 != 1 )
|
209 | {
|
210 | Aus1 = Aus1 + 1;
|
211 | if (Aus1 > 9)
|
212 | {
|
213 | Aus1 = 0;
|
214 | Aus4 = Aus4 + 1;
|
215 |
|
216 | // auf 0 zurücksetzten //
|
217 |
|
218 | if (Aus4 > 3)
|
219 | {
|
220 | Aus4 = 0;
|
221 | }
|
222 | }
|
223 | // Tastenentprellung //
|
224 |
|
225 | _delay_ms(200);
|
226 | }
|
227 |
|
228 | // Tastenabfrage TASTER_Aus2
|
229 | if ( TASTER_AUS2 != 1 )
|
230 | {
|
231 | Aus2 = Aus2 + 1;
|
232 |
|
233 | // auf 0 zurücksetzten //
|
234 |
|
235 | if (Aus2 > 9)
|
236 | {
|
237 | Aus2 = 0;
|
238 | }
|
239 |
|
240 | // Tastenentprellung //
|
241 |
|
242 | _delay_ms(200);
|
243 | }
|
244 |
|
245 | // Tastenabfrage TASTER_Aus3 //
|
246 |
|
247 | if ( TASTER_AUS3 != 1 )
|
248 | {
|
249 | Aus3 = Aus3 + 1;
|
250 |
|
251 |
|
252 | // auf 0 zurücksetzten //
|
253 |
|
254 | if (Aus3 > 9)
|
255 |
|
256 | {
|
257 | Aus3 = 0;
|
258 | }
|
259 |
|
260 | //Tastenentprellung //
|
261 |
|
262 | _delay_ms(200);
|
263 | }
|
264 |
|
265 | //Tastenbfrage ob in Schaltmodus umspringen//
|
266 |
|
267 | if ( EINGANG_UM != 1 )
|
268 | {
|
269 |
|
270 | //Status LED einschalten (ROT) //
|
271 |
|
272 | PORTB |= (1<<AUSGANG_ROT);
|
273 | PORTB &= ~(1<<AUSGANG_GRN);
|
274 |
|
275 | // Schaltzeiten Generieren (in Mikrosekunden) //
|
276 |
|
277 | ZeitEin = Ein4 * 100000 + Ein3 + 10000 + Ein2 * 1000 + Ein1 * 100;
|
278 | ZeitAus = Aus4 * 100000 + Aus3 + 10000 + Aus2 * 1000 + Aus1 * 100;
|
279 |
|
280 | _delay_ms(500);
|
281 |
|
282 | // Warten aufs Schaltsignal oder Signal zum Zeiteinstellen //
|
283 |
|
284 | while (EINGANG_UM == 1)
|
285 | {
|
286 |
|
287 | // Abfrage Schaltsignal //
|
288 |
|
289 | if ( EINGANG_SYN != 1 )
|
290 | {
|
291 | // Ausgang ist auf "Aus" und wird mit ZeitEin in Mikrosekunden verzögert eingeschaltet //
|
292 |
|
293 | if ( AUSGANG_SCHALTER != 1 )
|
294 | {
|
295 |
|
296 | //!!!!!!!!!!Hier müsste eine variable Zeitverzögerung stehen!!!!!!!!!!//
|
297 |
|
298 | PORTB |= (1<<AUSGANG_SCHALTER);
|
299 |
|
300 | }
|
301 |
|
302 | // Ausgang ist auf "Ein" und wird mit ZeitAus in Mikrosekunden verzögert ausgeschaltet //
|
303 |
|
304 | if ( AUSGANG_SCHALTER == 1 )
|
305 | {
|
306 |
|
307 | //!!!!!!!!!!Hier müsste eine variable Zeitverzögerung stehen!!!!!!!!!!//
|
308 |
|
309 | PORTB &= ~(1<<AUSGANG_SCHALTER);
|
310 |
|
311 | }
|
312 | }
|
313 |
|
314 | _delay_ms(500);
|
315 |
|
316 | }
|
317 | return 0;
|
318 | }
|
319 |
|
320 |
|
321 | }
|
322 |
|
323 | return 0;
|
324 | }
|