Naja mit dem Locate-Befehl steht die Anzeige, auch mit Vornullen, immer richtig.
Müste auch ähnlich mit Fusing oder Format gehen, dann muss vorher aber in Strings gewandelt werden.
Code:
$sim
' ATMEGA8- SelbstBauModul
$regfile = "m8def.dat"
$crystal = 14745600 'ext. Quarz
' /// UHR
Dim Sekunde As Word
Dim Minute As Word
Dim Stunde As Word
Dim H As String * 2
Dim H1 As String * 2
Dim M As String * 2
Dim M1 As String * 2
Dim S As String * 2
Dim S1 As String * 2
'// Zum setzten von Stunde Minute Sekunde setzen
Sekunde = 55
Minute = 59
Stunde = 3
'/// LCD ///
Config Lcd = 20 * 4
Config Lcdbus = 4
' LCD im 4Bit I/O Mode
Config Lcdpin = Pin , Db4 = Portd.2 , Db5 = Portd.3 , Db6 = Portd.4 , Db7 = Portd.5 , E = Portd.7 , Rs = Portd.6
'/// TIMER ////
Config Timer1 = Timer , Prescale = 256
Const Startwert = 7936
On Timer1 Ontimer1 'Interrupt-Routine für Timer1-Overflow
Enable Timer1 'Timer1-Overflow-Interrupt einschalten
Enable Interrupts 'Interrupts global zulassen
Cursor Off Noblink
Cls
'-------------------------------------------------------------------------------
Do
'Uhrzeit in Sekunde Minute Stunde
If Sekunde > 59 Then
Sekunde = 0
Incr Minute
End If
If Minute > 59 Then
Minute = 0
Incr Stunde
End If
If Stunde > 23 Then
Stunde = 0
End If
'/// LCD Anzeige Stunde Minute Sekunde
Home
H = Str(stunde)
H1 = Format(h , "00")
M = Str(minute)
M1 = Format(m , "00")
S = Str(sekunde)
S1 = Format(s , "00")
Lcd H1 ; ":" ; M1 ; ":" ; S1
'Waitms 100
Loop
End
'//////////////////
Ontimer1:
Timer1 = Startwert
Incr Sekunde
Return
Hier mal ein Beispiel das ich aus dem www habe:
Code:
$sim
$regfile = "M128def.dat"
$crystal = 16000000
$hwstack = 128 ' default use 32 for the hardware stack
$swstack = 128 'default use 10 for the SW stack
$framesize = 128 'default use 40 for the frame space
'$lib "lcd4busy.lbx"
'$lib "lcd4.lbx"
'$lib "i2c_twi.lbx"
'$baud = 19200
Config Portb = Input
Config Portd = Input
Portb = 255
Config Portg = Input
Portg.0 = 1
Config Portc = Output
'Config Portd = Output
Ddra = 00000000
Porta = 255
Dim Count As Byte
Dim Stunden As Byte
Dim Temp As Byte
Dim Tag As Byte
Dim Tag_str As String * 2
Dim Plus As Byte
Dim Minus As Byte
Dim Uhrzeit(10) As Byte 'enthält die uhrzeit und das datum vorteil kann leicht erweitert werden.
Dim Uhr_help As Byte
Dim Uhrzeit_std As String * 2
Dim Uhrzeit_min As String * 2
Dim Tag_datum As String * 2
Dim Monat As String * 2
Dim Jahr As String * 2
Enable Interrupts
Config Lcd = 20 * 4a , Chipset = Ks077
Config Lcdpin = Pin , Db4 = Portc.4 , Db5 = Portc.5 , Db6 = Portc.6 , Db7 = Portc.7 , E = Portc.2 , Rs = Portc.1
Initlcd
'we run it in bus mode and I hooked up only db4-db7
'tell about the bus mode
'[now init the clock]
Config Date = Dmy , Separator = / ' Deutsches-Format
Config Clock = Soft '
'The format isTag/Monat/Jahr
Date$ = "18/04/07"
Time$ = "00:00:00"
'---------------------------------------------------
'clear the LCD display
Cls
Cursor Off Noblink
Do
Gosub Page
Gosub Tastenabfrage 'Hauptprogramm
Loop
End
Tag:
Tag = Dayofweek()
Select Case Tag
Case 0 : Tag_str = "Mo" 'Die softclock liefert nur zahlen von
Case 1 : Tag_str = "Di" 'zahlen von 0-6 dewswegen muss
Case 2 : Tag_str = "Mi" 'die zahl in einem string gewandelt werden
Case 3 : Tag_str = "Do"
Case 4 : Tag_str = "Fr"
Case 5 : Tag_str = "Sa"
Case 6 : Tag_str = "So"
End Select
Return
Tastenabfrage:
Debounce Pina.1 , 0 , Taste_rechts , Sub
Return
'##########################################
Uhrstellen:
Debounce Pina.3 , 0 , Tasteplus , Sub
Debounce Pina.4 , 0 , Tasteminus , Sub
Debounce Pina.1 , 0 , Taste_rechts_uhr , Sub
Debounce Pina.6 , 0 , Taste_links , Sub
Debounce Pina.2 , 0 , Enter_raus , Sub
Return
'----------------------------------------
Tasteplus:
If Plus = 1 Then Incr Uhrzeit(1)
If Plus = 2 Then Incr Uhrzeit(2)
If Plus = 3 Then Incr Uhrzeit(3)
If Plus = 4 Then Incr Uhrzeit(4)
If Plus = 5 Then Incr Uhrzeit(5)
If Plus = 6 Then Incr Uhrzeit(6)
If Plus = 7 Then Incr Uhrzeit(7)
If Plus = 8 Then Incr Uhrzeit(8)
If Plus = 9 Then Incr Uhrzeit(9)
If Plus = 10 Then Incr Uhrzeit(10)
If Uhrzeit(1) > 2 Then Uhrzeit(1) = 0
If Uhrzeit(2) > 9 Then Uhrzeit(2) = 0
If Uhrzeit(3) > 5 Then Uhrzeit(3) = 0
If Uhrzeit(4) > 9 Then Uhrzeit(4) = 0
If Uhrzeit(5) > 3 Then Uhrzeit(5) = 0
If Uhrzeit(6) > 9 Then Uhrzeit(6) = 0
If Uhrzeit(7) > 1 Then Uhrzeit(7) = 0
If Uhrzeit(8) > 9 Then Uhrzeit(8) = 0
If Uhrzeit(9) > 9 Then Uhrzeit(9) = 0
If Uhrzeit(10) > 9 Then Uhrzeit(10) = 0
Return
'-----------------------------
Tasteminus:
If Plus = 1 Then Decr Uhrzeit(1)
If Plus = 2 Then Decr Uhrzeit(2)
If Plus = 3 Then Decr Uhrzeit(3)
If Plus = 4 Then Decr Uhrzeit(4)
If Plus = 5 Then Decr Uhrzeit(5)
If Plus = 6 Then Decr Uhrzeit(6)
If Plus = 7 Then Decr Uhrzeit(7)
If Plus = 8 Then Decr Uhrzeit(8)
If Plus = 9 Then Decr Uhrzeit(9)
If Plus = 10 Then Decr Uhrzeit(10)
If Uhrzeit(1) > 2 Then Uhrzeit(1) = 2
If Uhrzeit(2) > 9 Then Uhrzeit(2) = 9
If Uhrzeit(3) > 5 Then Uhrzeit(3) = 5
If Uhrzeit(4) > 9 Then Uhrzeit(4) = 9
If Uhrzeit(5) > 3 Then Uhrzeit(5) = 3
If Uhrzeit(6) > 9 Then Uhrzeit(6) = 9
If Uhrzeit(7) > 1 Then Uhrzeit(7) = 0
If Uhrzeit(8) > 9 Then Uhrzeit(8) = 0
If Uhrzeit(9) > 9 Then Uhrzeit(9) = 0
If Uhrzeit(10) > 9 Then Uhrzeit(10) = 0
Return
'-----------------
Taste_rechts:
Cursor On Noblink
Cls
Plus = 1
Locate 1 , 8
Lcd "--:--"
Locate 2 , 8
Lcd "00/00/07"
Locate 1 , 8
Do
Gosub Uhrstellen
Select Case Plus
Case 1 : Locate 1 , 8
Lcd Uhrzeit(1)
Locate 1 , 8
Case 2 : Locate 1 , 9
Lcd Uhrzeit(2)
Locate 1 , 9
Case 3 : Locate 1 , 11
Lcd Uhrzeit(3)
Locate 1 , 11
Case 4 : Locate 1 , 12
Lcd Uhrzeit(4)
Locate 1 , 12
Case 5 : Locate 2 , 8
Lcd Uhrzeit(5)
Locate 2 , 8
Case 6 : Locate 2 , 9
Lcd Uhrzeit(6)
Locate 2 , 9
Case 7 : Locate 2 , 11
Lcd Uhrzeit(7)
Locate 2 , 11
Case 8 : Locate 2 , 12
Lcd Uhrzeit(8)
Locate 2 , 12
Case 9 : Locate 2 , 14
Lcd Uhrzeit(9)
Locate 2 , 14
Case 10 : Locate 2 , 15
Lcd Uhrzeit(10)
Locate 2 , 15
End Select
Loop Until Pina.2 = 0
Uhrzeit_std = Str(uhrzeit(1)) + Str(uhrzeit(2)) 'wandelt zahl in string um und packt 2 zahlen in eine speicherstelle
Uhrzeit_min = Str(uhrzeit(3)) + Str(uhrzeit(4)) ' 00000001+ 00000010 = 0000000100000010 ----> "12 "
Tag_datum = Str(uhrzeit(5)) + Str(uhrzeit(6))
Monat = Str(uhrzeit(7)) + Str(uhrzeit(8))
Jahr = Str(uhrzeit(9)) + Str(uhrzeit(10))
_hour = Val(uhrzeit_std )
_min = Val(uhrzeit_min) 'umwanden vom string in eine zahle und übergabe an die uhr internen variablen.
_day = Val(tag_datum)
_month = Val(monat)
_year = Val(jahr)
_sec = 00
Cls
Return
'-----------------------------
Taste_links:
Decr Plus
If Plus > 10 Then Plus = 10
Return
'------------------------------
Enter:
Return
'------------------------
Enter_raus:
Return
Taste_rechts_uhr:
Incr Plus
If Plus > 10 Then Plus = 1
Return
'-----------------------
Page:
Gosub Tag
'cursor home
Locate 1 , 7
Lcd Date$
Locate 2 , 7
Lcd Time$
Locate 3 , 10
'show the date and time
Lcd Tag_str
Locate 4 , 13
Lcd "Press >"
Return
Lesezeichen