Hi zusammen,
Ich wollte ne kleine Uhr programmieren, da ich mich mit den Strings in C nich wirklich auskenne und die nun bissel beherrschen lernen wollte...
Ich hab jetzt folgenden Code:
Code:
#define preValue 57724
int volatile gSeconds = 0;
SIGNAL (SIG_OVERFLOW1)
{
gSeconds++;
TCNT1 = preValue;
}
int main (void)
{
lcd_init(LCD_DISP_ON);
TCCR1B = (1<<CS12) | (1<<CS10);
TIMSK |= (1<<TOIE1);
TCNT1 = preValue;
sei ();
int seconds = 0;
int minutes = 0;
int hours = 0;
char *sec = "00";
char *min = "00";
char *h = "00";
char *time = "00:00:00";
lcd_puts("Time: ");
lcd_puts(time);
while (1)
{
if (seconds != gSeconds)
{
seconds = gSeconds;
if (seconds == 60)
{
seconds = 0;
gSeconds = 0;
minutes++;
}
if (minutes == 60)
{
minutes = 0;
hours++;
}
if (hours == 24) hours = 0;
time = "00:00:00"; // Problem hier s.u.
// 01234567
itoa(seconds, sec, 10);
// itoa(minutes, min, 10);
//itoa(hours, h, 10);
if (seconds < 10)
{
time[6] = "0"; // zweites Problem hier s.u.
time[7] = sec[0];
}
else
{
time[6] = sec[0];
time[7] = sec[1];
}
/* if (minutes < 10)
{
time[4] = min[0];
}
else
{
time[3] = min[0];
time[4] = min[1];
}
if (hours < 10)
{
time[1] = h[0];
}
else
{
time[0] = h[0];
time[1] = h[1];
}*/
lcd_gotoxy(6,0);
lcd_puts(time);
lcd_gotoxy(0,1);
lcd_puts(sec);
}
}
}
Naja, das Problem ist, dass zwar der itoa der Seconds klappt, aber wenn ich die itoa's der Stunden und Minuten nicht auskommentiere, resetet der µC konstant 
Außerdem bringt folgende Zeile hier gar nix:
Code:
time = "00:00:00"; // Problem hier s.u.
Eigentlich sollte wenn die Seconds wieder bei 0 sind dadurch garantiert werden, dass in der Uhrzeit auch :00 anstatt :50 steht (Die 5 wäre noch aus den 50'er Sekunden geblieben). Ich hoffe ihr versteht was ich meine 
Trotz dieser Zeile, bleibt in den ersten 10 Sekunden jeder neuen Minute die 5 aus den 50'er Sekunden der vorherigen Minute stehen. So als ob die Variable gar nicht refresht wird...
Time: 00:00:58
Time: 00:00:59
Time: 00:00:50
Time: 00:00:51
Time: 00:00:...
Time: 00:00:59
Time: 00:00:10
Code:
time[6] = "0"; // zweites Problem hier s.u.
Ich dachte mir daher: Ach egal, packste halt die Null selber dahin.
Seltsamerweise sieh die ausgabe dann so aus:
Time: 00:00:s0
Time: 00:00:s1
Time: 00:00:...
Time: 00:00:s9
Ich hoffe, jmd hat ne Idee für mich...
ThxInAdv
Alex
Lesezeichen