// Deklaration der Globalen Variablen. bool i1, i2, i3; byte min, h; //__________________________________________________________________________________________________________________________________________ // Zeichnet vertikale Linien der Nummern auf das Display. void v_line(byte left, bool Y) { byte X; switch(left) { case 0: X = 2; break; case 1: X = 20; break; case 2: X = 26; break; case 3: X = 44; break; case 4: X = 56; break; case 5: X = 74; break; case 6: X = 80; break; case 7: X = 98; break; } if (Y) { LineOut((X - 1), 14, (X - 1), 30); LineOut(X, 13, X, 31); LineOut((X + 1), 14, (X + 1), 30); } else { LineOut((X - 1), 34, (X - 1), 50); LineOut(X, 33, X, 51); LineOut((X + 1), 34, (X + 1), 50); } } //__________________________________________________________________________________________________________________________________________ // Zeichnet horizontale Linien der Nummern auf das Display. void h_line(byte left, bool up, bool middle) { byte X; switch(left) { case 0: X = 3; break; case 1: X = 27; break; case 2: X = 57; break; case 3: X = 81; break; } if (up) { LineOut((X + 1), 53, (X + 15), 53); LineOut(X, 52, (X + 16), 52); LineOut((X + 1), 51, (X + 15), 51); } else { if (middle) { LineOut((X + 1), 33, (X + 15), 33); LineOut(X, 32, (X + 16), 32); LineOut((X + 1), 31, (X + 15), 31); } else { LineOut((X + 1), 13, (X + 15), 13); LineOut(X, 12, (X + 16), 12); LineOut((X + 1), 11, (X + 15), 11); } } } //__________________________________________________________________________________________________________________________________________ // Setzt Nummern aus horizontalen und vertikalen Linien zusammen. "left"(1-4) gibt dabei die stelle auf dem Display an. void draw_number(byte n, byte left) { switch(n) { case 0: v_line(((left * 2) - 1), true); v_line(((left * 2) - 2), true); v_line(((left * 2) - 1), false); v_line(((left * 2) - 2), false); h_line((left - 1), true, false); h_line((left - 1), false, false); break; case 1: v_line(((left * 2) - 1), true); v_line(((left * 2) - 1), false); break; case 2: h_line((left - 1), true, false); v_line(((left * 2) - 2), true); h_line((left - 1), false, true); v_line(((left * 2) - 1), false); h_line((left - 1), false, false); break; case 3: h_line((left - 1), true, false); v_line(((left * 2) - 1), true); h_line((left - 1), false, true); v_line(((left * 2) - 1), false); h_line((left - 1), false, false); break; case 4: v_line(((left * 2) - 1), true); v_line(((left * 2) - 2), false); v_line(((left * 2) - 1), false); h_line((left - 1), false, true); break; case 5: h_line((left - 1), true, false); v_line(((left * 2) - 1), true); h_line((left - 1), false, true); v_line(((left * 2) - 2), false); h_line((left - 1), false, false); break; case 6: v_line(((left * 2) - 2), true); v_line(((left * 2) - 1), true); v_line(((left * 2) - 2), false); h_line((left - 1), true, false); h_line((left - 1), false, true); h_line((left - 1), false, false); break; case 7: h_line((left - 1), true, false); v_line(((left * 2) - 1), true); v_line(((left * 2) - 1), false); break; case 8: v_line(((left * 2) - 1), true); v_line(((left * 2) - 2), true); v_line(((left * 2) - 1), false); v_line(((left * 2) - 2), false); h_line((left - 1), true, false); h_line((left - 1), false, true); h_line((left - 1), false, false); break; case 9: v_line(((left * 2) - 1), true); v_line(((left * 2) - 2), false); v_line(((left * 2) - 1), false); h_line((left - 1), true, false); h_line((left - 1), false, true); h_line((left - 1), false, false); break; } } //__________________________________________________________________________________________________________________________________________ // Legt fest ob die zahl ein oder zweistellig ist(bei einstelliger Minute wird eine "0" vorrangestellt). void number(byte n, bool htmp) { byte ntmp; bool h; if(htmp && n < 10) { draw_number(0, 3); } h = htmp; if(n < 10 && n > -1) { ntmp = n; } else { if(n < 20 && n > 9) { ntmp = n - 10; if(h) { draw_number(1, 3); } else { draw_number(1, 1); } } else { if(n < 30 && n > 19) { ntmp = n - 20; if(h) { draw_number(2, 3); } else { draw_number(2, 1); } } else { if(n < 40 && n > 29) { ntmp = n - 30; if(h) { draw_number(3, 3); } else { draw_number(3, 1); } } else { if(n < 50 && n > 39) { ntmp = n - 40; if(h) { draw_number(4, 3); } else { draw_number(4, 1); } } else { if(n < 60 && n > 49) { ntmp = n - 50; if(h) { draw_number(5, 3); } else { draw_number(5, 1); } } } } } } } if(h) { draw_number(ntmp, 4); } else { draw_number(ntmp, 2); } } //__________________________________________________________________________________________________________________________________________ // Display aktuallisieren void show() { byte x,y1,y2; x = 50; y1 = 41; y2 = 22; ClearScreen(); number(h, false); number(min, true); CircleOut(x,y1,1); CircleOut(x,y1,2); CircleOut(x,y2,1); CircleOut(x,y2,2); } //__________________________________________________________________________________________________________________________________________ // Setzt Variablen der NXT Tasten auf "falsch". sub btn_reset() { i1 = false; i2 = false; i3 = false; } //__________________________________________________________________________________________________________________________________________ // Zeigt beim stellen an, ob Stunde oder Minute gerade bearbeitet werden. void show_set(bool h) { show(); TextOut(5,LCD_LINE8,"<< ENTER >>"); if(h) { TextOut(13,LCD_LINE1,"HOUR"); } else { TextOut(60,LCD_LINE1,"MINUTE"); } } //__________________________________________________________________________________________________________________________________________ // Eingabe der Uhrzeit, addiert 1 an Minuten. void min_plus() { if(min < 59) { min = min + 1; } else { if(min == 59 || min > 59) { min = 0; } } } //__________________________________________________________________________________________________________________________________________ // Eingabe der Uhrzeit, subtrahiert 1 von Minuten. void min_minus() { if(min > 0) { min = min - 1; } else { if(min == 0 || min < 0) { min = 59; } } } //__________________________________________________________________________________________________________________________________________ // Eingabe der Uhrzeit, addiert 1 an Stunden. void h_plus() { if(h < 23) { h = h + 1; } else { if(h == 23 || h > 23) { h = 0; } } } //__________________________________________________________________________________________________________________________________________ // Eingabe der Uhrzeit, subtrahiert 1 von Stunden. void h_minus() { if(h > 0) { h = h - 1; } else { if(h == 0 || h < 0) { h = 23; } } } //__________________________________________________________________________________________________________________________________________ // Der Programmstart enthaelt zu Anfang die Eingabeprozedur der Zeit mittels NXT Tasten. task main() { btn_reset(); min = 30; h = 6; ClearScreen(); TextOut(28,LCD_LINE3,"WELCOME!"); TextOut(24,LCD_LINE8,"SET TIME >>"); while(! i3) { i3 = ButtonState(BTN2); } btn_reset(); Wait(500); show_set(false); while(! i1) { i1 = ButtonState(BTN4); i2 = ButtonState(BTN3); i3 = ButtonState(BTN2); if(i2) { min_minus(); show_set(false); } else { if(i3) { min_plus(); show_set(false); } } Wait(400); } Wait(500); show_set(true); btn_reset(); while(! i1) { i1 = ButtonState(BTN4); i2 = ButtonState(BTN3); i3 = ButtonState(BTN2); if(i2) { h_minus(); show_set(true); } else { if(i3) { h_plus(); show_set(true); } } Wait(400); } btn_reset(); show(); // Uhrwerk while(true) { if(min <= 58) { min = min + 1; } else { min = 0; if(h <= 22) { h = h + 1; } else { h = 0; } } repeat(60) { Wait(1000); } show(); } }