Hallo!
Überdenk mal das CLS in Hauptschleife.
MfG
Rone
Code:$regfile = "m8def.dat" ' specify the used micro $crystal = 1000000 ' used crystal frequency $baud = 19200 ' use baud rate $hwstack = 120 ' default use 32 for the hardware stack $swstack = 120 ' default use 10 for the SW stack $framesize = 50 ' default use 40 for the frame space Config Lcdpin = Pin , Db4 = Portb.1 , Db5 = Portb.2 , Db6 = Portb.3 , Db7 = Portb.4 , E = Portb.5 , Rs = Portb.6 Dim A As Byte Config Lcd = 16 * 2 'configure lcd screen Config Timer1 = Timer , Prescale = 1024 Enable Timer1 Dim Minutes As Byte Dim Hours As Byte Dim Minutes10 As Byte Dim Hours10 As Byte Dim Day As Integer Dim I As Byte Minutes = 0 Minutes10 = 0 Hours10 = 0 Hours = 0 Ddrd = &B00000000 'input D On Timer1 Isr_von_timer1 Enable Interrupts Timer1 = 6942 Do ' Hauptprogramm If Hours = 23 And Minutes = 56 Then Day = Day + 1 Hours = 0 End If Hours10 = Hours / 10 Minutes10 = Minutes / 10 If Pind.0 = 1 Then Minutes = Minutes + 1 End If If Pind.1 = 1 Then Hours = Hours + 1 End If If Pind.2 = 1 Then Day = Day + 1 End If If Pind.3 = 1 Then Day = Day + 100 End If Cls 'clear the LCD display Lcd "Vienna Time" 'display this at the top line 'Lowerline Locate 2 , 0 'select the lower line Lcd Str(hours10) Lcd Str(hours) Lcd ":" 'display this at the lower line Lcd Str(minutes10) Lcd Str(minutes) Lcd " " Lcd Day Lcd Str(Day) Loop Isr_von_timer1: Timer1 = 6942 Minutes = Minutes + 1 If Minutes = 60 Then Minutes = 0 Hours = Hours + 1 End If Return End
So, das ist nun meine neue Uhr![]()
Sie schreibt auch
"Vienna Time",
nur darunter die Zahlen 01:02 die wechselt hundert mal pro sekunde oder so, und dann entsteht eine Zahlenkette 1235454545125454512 -> 2ms später5454564545456465 -> 2ms 58645645647865456454 und der ganze Bildschirm flackert herum... Vlt findet jemand den Bug??
Mfg
Geändert von runner02 (15.09.2011 um 09:44 Uhr)
Hallo!
Überdenk mal das CLS in Hauptschleife.
MfG
Rone
Soll ich am Ende der Schleife einfach wieder zurückspringen, sodass alles beim nächsten mal einfach überschrieben wird??
Eine kleine Änerung habe ich übrigens vorgenommen:
Habe die Variable minutes1 eingeführt (=minutes-minutes10) , sonst wäre bei Funktion des Programmeszb. 12 -> zehn (minutes10) + 12 (minutes) also 112.
Das selbe bei hours.
Die unteren Zahlen sind übrigens doch nicht willkürlich! 10:10 -> 11:11 -> 12:12 .... -> 110:11010 usw... Nur geht das umschalten sehr schnell <<1sek.
Hallo!
Hinweis1: Versuch herauszufinden oder einfach logisch denken wie oft Deine Hauptschleife
in einer Sekunde durchlaufen wird, und wie das sich auf Deine Anzeige auswirkt
Hinweis2: Grundsätzlich beschreibt man das Display nur wenn sich eine Variable ändert
also 1mal pro Sekunde >>> Goto Hinweis1
MfG
Rone
Zuerst habe ich nur den Text geschrieben, und das ohne wait gemacht, da ist er nicht so stark geflimmert...
Das mit den Zahlen dürfte dann das Problem gewesen sein... Er überarbeitet sich
Dabei sollten die Zahlen doch nur einmal pro Minute verändert werden... (Timer1 -> 1min)
Hallo
Ich hab mal die zusätzliche Variable Minutes_old eingebaut:
Ungetestet, sollte aber wenigstens das von Rone schon beschriebene Prinzip zeigen.Code:$regfile = "m8def.dat" ' specify the used micro $crystal = 1000000 ' used crystal frequency $baud = 19200 ' use baud rate $hwstack = 120 ' default use 32 for the hardware stack $swstack = 120 ' default use 10 for the SW stack $framesize = 50 ' default use 40 for the frame space Config Lcdpin = Pin , Db4 = Portb.1 , Db5 = Portb.2 , Db6 = Portb.3 , Db7 = Portb.4 , E = Portb.5 , Rs = Portb.6 Dim A As Byte Config Lcd = 16 * 2 'configure lcd screen Config Timer1 = Timer , Prescale = 1024 On Timer1 Isr_von_timer1 Timer1 = 6942 Dim Minutes As Byte Dim Minutes_old As Byte Dim Hours As Byte Dim Minutes10 As Byte Dim Hours10 As Byte Dim Day As Integer Dim I As Byte Minutes = 0 Minutes_old = 100 ' 100 = Startanzeige aufbauen Minutes10 = 0 Hours10 = 0 Hours = 0 Ddrd = &B00000000 'input D Enable Timer1 Enable Interrupts Cls 'clear the LCD display Lcd "Vienna Time" 'display this at the top line Do ' Hauptprogramm If Hours = 23 And Minutes = 56 Then ' Gangkorrektur Day = Day + 1 Hours = 0 Minutes = 0 End If If Pind.0 = 1 Then ' set clock Minutes = Minutes + 1 End If If Pind.1 = 1 Then Hours = Hours + 1 Minutes_old = 100 End If If Pind.2 = 1 Then Day = Day + 1 Minutes_old = 100 End If If Pind.3 = 1 Then Day = Day + 100 Minutes_old = 100 End If 'Lowerline If Minutes <> Minutes_old Then ' Ausgabe, wenn sich die Minuten geändert haben Hours10 = Hours / 10 Minutes10 = Minutes / 10 Locate 2 , 0 'select the lower line Lcd Str(hours10) Lcd Str(hours) Lcd ":" 'display this at the lower line Lcd Str(minutes10) Lcd Str(minutes) Lcd " " Lcd Day Lcd Str(day) Minutes_old = Minutes ' Anzeige wurde aktualisiert End If Loop End Isr_von_timer1: Timer1 = 6942 Minutes = Minutes + 1 If Minutes = 60 Then Minutes = 0 Hours = Hours + 1 End If Return
Gruß
mic
Geändert von radbruch (16.09.2011 um 11:06 Uhr) Grund: Anzeige auch beim Stellen der Uhr aktualisieren
Bild hier
Atmel’s products are not intended, authorized, or warranted for use
as components in applications intended to support or sustain life!
Lesezeichen