Tu das, schlaf dich erstmal aus, ich muss noch ein C# Programm für die Schule/Ausbildung schreiben, kann mich also noch net hinlegen ;)
Gruß Hunni
Druckbare Version
Tu das, schlaf dich erstmal aus, ich muss noch ein C# Programm für die Schule/Ausbildung schreiben, kann mich also noch net hinlegen ;)
Gruß Hunni
Hallo
Also vielen dank nochmal für die Hilfe.
Hier der Code:
Code:$regfile = "m32def.dat"
$framesize = 32
$swstack = 32
$hwstack = 32
$crystal = 16000000
$baud = 9600
Declare Sub Plussekunde()
Declare Sub Plusminute()
Declare Sub Plusstunde()
Declare Sub Clockstart()
Declare Sub Plustag()
Declare Function Tastenabfrage() As Byte
Dim I As Integer
Dim N As Integer
Dim Ton As Integer
Dim Sekunde As Word
Dim Minute As Word
Dim Stunde As Word
Dim Wochentag As String * 12
Dim Tag As Word
Dim Taste As Byte
Config Portc = Output
Portc = 11111111
Config Adc = Single , Prescaler = Auto 'Für Tastenabfrage und Spannungsmessung
Config Pina.7 = Input 'Für Tastenabfrage
Porta.7 = 1
Tag = 1
Do
Taste = Tastenabfrage()
If Taste <> 0 Then
Select Case Taste
Case 1
Call Plussekunde
Case 2
Call Plusminute
Case 3
Call Plusstunde
Case 4
Call Clockstart
Case 5
Call Plustag
End Select
Sound Portd.7 , 400 , 500 'BEEP
End If
Waitms 100
If Sekunde = 60 Then
Sekunde = 0
Minute = Minute + 1
Else
End If
If Minute = 60 Then
Minute = 0
Stunde = Stunde + 1
Else
End If
If Stunde = 24 Then
Stunde = 0
Tag = Tag + 1
End If
If Tag > 7 Then
Tag = 1
End If
'Select Case Tag
'Case 1 Wochentag = "Montag"
'Case 2 Wochentag = "Dienstag"
'Case 3 Wochentag = "Mittwoch"
'Case 4 Wochentag = "Donnerstag"
'Case 5 Wochentag = "Freitag"
'Case 6 Wochentag = "Samstag"
'Case 7 Wochentag = "Sonntag"
'Else Case
'End Select
Select Case Tag
Case 1
Wochentag = "Montag"
Case 2
Wochentag = "Dienstag"
Case 3
Wochentag = "Mittwoch"
Case 4
Wochentag = "Donnerstag"
Case 5
Wochentag = "Freitag"
Case 6
Wochentag = "Samstag"
Case 7
Wochentag = "Sonntag"
End Select
Loop
End
Function Tastenabfrage() As Byte
Local Ws As Word
Tastenabfrage = 0
Ton = 600
Start Adc
Ws = Getadc(7)
If Ws < 500 Then
Select Case Ws
Case 400 To 450
Tastenabfrage = 1
Ton = 550
Case 330 To 380
Tastenabfrage = 2
Ton = 500
Case 260 To 305
Tastenabfrage = 3
Ton = 450
Case 180 To 220
Tastenabfrage = 4
Ton = 400
Case 90 To 130
Tastenabfrage = 5
Ton = 350
End Select
Sound Portd.7 , 400 , Ton
End If
End Function
Sub Plussekunde()
Sekunde = Sekunde + 1
Print Wochentag ; ", " ; Stunde ; ":" ; Minute ; ":" ; Sekunde
End Sub
Sub Plusminute()
Minute = Minute + 1
Print Wochentag ; ", " ; Stunde ; ":" ; Minute ; ":" ; Sekunde
End Sub
Sub Plusstunde()
Stunde = Stunde + 1
Print Wochentag ; ", " ; Stunde ; ":" ; Minute ; ":" ; Sekunde
End Sub
Sub Plustag()
Tag = Tag + 1
Print Wochentag ; ", " ; Stunde ; ":" ; Minute ; ":" ; Sekunde
End Sub
Sub Clockstart()
Config Timer1 = Timer , Prescale = 256 'Konfiguriere Timer1
Enable Interrupts
Enable Timer1
Sekunde = Sekunde + 1 ' + 1Sekunden für Timerausgleich
On Timer1 Isr_von_timer1 'verzweige bei Timer1 überlauf zu Isr_von_Timer1
Enable Interrupts
Timer1 = 68570 'Timer1 soll schon von 34285 wegzählen
End Sub
Isr_von_timer1: 'ISR von Timer1
Timer1 = 68570
'Sound Portd.7 , 400 , 550
'Print "Stunde" ; Stunde ; " Minute:" ; Minute ; " Sekunde:" ; Sekunde
Print Wochentag ; ", " ; Stunde ; ":" ; Minute ; ":" ; Sekunde
Sekunde = Sekunde + 1
Toggle Portc.0
Return
Ich werde mal sehen ob ich das noch besser hinbkomme.
Gibt es ausser der bascom hilfe noch was wo das beschrieben wird?
Weil ich verstehe es immre besser wen's auf deutsch istt ;)
Gruß Dominik
Halo
habe noch ein kleines problem.
Habe den code etwas benutzerfreundlicher gemacht.
Nur springt die Uhr jetzt nach dem einstellen am anfang immer auf den n#chsten tag (also ich stelle mittwoch 11:11:11 ein und sie springt auf donnerstag 11:11:12) :(
Vieleicht könnt ihr mir nochmal helfe?
Hier der Cide
Code:$regfile = "m32def.dat"
$framesize = 32
$swstack = 32
$hwstack = 32
$crystal = 16000000
$baud = 9600
Declare Sub Plussekunde()
Declare Sub Plusminute()
Declare Sub Plusstunde()
Declare Sub Clockstart()
Declare Sub Plustag()
Declare Function Tastenabfrage() As Byte
Dim I As Integer
Dim N As Integer
Dim Ton As Integer
Dim Tag As Word
Dim Taste As Byte
Dim Wochentag As String * 12
Dim Stunde As Word
Dim Minute As Word
Dim Sekunde As Word
Tag = 2
Config Portc = Output
Portc = 11111111
Config Adc = Single , Prescaler = Auto 'Für Tastenabfrage und Spannungsmessung
Config Pina.7 = Input 'Für Tastenabfrage
Porta.7 = 1
Sound Portd.7 , 400 , 450 'BEEP
Sound Portd.7 , 400 , 250 'BEEP
Sound Portd.7 , 400 , 450 'BEEP
Wait 1
Print "Zeitschaltuhr -Test"
Wait 1
Print "Bitte Uhrzeit und Wochentag einstellen!"
Wait 1
Print "Bitte Wochentag eingeben"
Wait 1
Print "Anleitung:"
Print "Wochentag einstellen: Taste-1"
Print "OK: Taste-5"
Wait 1
Print "Aktueller Tag:"
Print "Montag"
Do
Select Case Tag
Case 1
Wochentag = "Montag"
Case 2
Wochentag = "Dienstag"
Case 3
Wochentag = "Mittwoch"
Case 4
Wochentag = "Donnerstag"
Case 5
Wochentag = "Freitag"
Case 6
Wochentag = "Samstag"
Case 7
Wochentag = "Sonntag"
Case 8
Wochentag = "Montag"
End Select
If Tag > 7 Then
Tag = 1
End If
Taste = Tastenabfrage()
If Taste <> 0 Then
Select Case Taste
Case 1
Tag = Tag + 1
Waitms 200
Print Wochentag
Case 5
Exit Do
End Select
Sound Portd.7 , 400 , 500 'BEEP
End If
Loop
Sound Portd.7 , 400 , 500 'BEEP
Print "Bitte Uhrzeit einstellen"
Wait 1
Print "Anleitung:"
Print "Stunden einstellen : Taste-1"
Print "Minuten einstellen : Taste-2"
Print "Sekunden einstellen: Taste-3"
Print "OK : Tase-5"
Wait 1
Print "Akutelle Zeit:"
Print "0:0:0"
Do
Taste = Tastenabfrage()
If Taste <> 0 Then
Select Case Taste
Case 1
Stunde = Stunde + 1
Waitms 50
Print Stunde ; ":" ; Minute ; ":" ; Sekunde:
Case 2
Minute = Minute + 1
Waitms 50
Print Stunde ; ":" ; Minute ; ":" ; Sekunde
Case 3
Sekunde = Sekunde + 1
Waitms 50
Print Stunde ; ":" ; Minute ; ":" ; Sekunde
Case 5
Exit Do
End Select
Sound Portd.7 , 400 , 500 'BEEP
End If
If Sekunde = 60 Then
Sekunde = 0
End If
If Minute = 60 Then
Minute = 0
End If
If Stunde = 24 Then
Stunde = 0
End If
Loop
Sound Portd.7 , 400 , 500 'BEEP
Config Timer1 = Timer , Prescale = 256 'Konfiguriere Timer1
Enable Interrupts
Enable Timer1
Sekunde = Sekunde + 1 ' + 1Sekunden für Timerausgleich
On Timer1 Isr_von_timer1 'verzweige bei Timer1 überlauf zu Isr_von_Timer1
Enable Interrupts
Timer1 = 68570 'Timer1 soll schon von 34285 wegzählen
Do
If Sekunde = 60 Then
Sekunde = 0
Minute = Minute + 1
Else
End If
If Minute = 60 Then
Minute = 0
Stunde = Stunde + 1
Else
End If
If Stunde = 24 Then
Stunde = 0
Tag = Tag + 1
End If
If Tag > 7 Then
Tag = 1
End If
Select Case Tag
Case 1
Wochentag = "Montag"
Case 2
Wochentag = "Dienstag"
Case 3
Wochentag = "Mittwoch"
Case 4
Wochentag = "Donnerstag"
Case 5
Wochentag = "Freitag"
Case 6
Wochentag = "Samstag"
Case 7
Wochentag = "Sonntag"
End Select
Loop
End
Function Tastenabfrage() As Byte
Local Ws As Word
Tastenabfrage = 0
Ton = 600
Start Adc
Ws = Getadc(7)
If Ws < 500 Then
Select Case Ws
Case 400 To 450
Tastenabfrage = 1
Ton = 550
Case 330 To 380
Tastenabfrage = 2
Ton = 500
Case 260 To 305
Tastenabfrage = 3
Ton = 450
Case 180 To 220
Tastenabfrage = 4
Ton = 400
Case 90 To 130
Tastenabfrage = 5
Ton = 350
End Select
Sound Portd.7 , 400 , Ton
End If
End Function
Isr_von_timer1: 'ISR von Timer1
Timer1 = 68570
'Sound Portd.7 , 400 , 550
Print Wochentag ; ", " ; Stunde ; ":" ; Minute ; ":" ; Sekunde
Sekunde = Sekunde + 1
Toggle Portc.0
Return
also ich bin mir nicht ganz sicher, aber du machst zuerst:
und dann erst fragste die taster ab.Code:Select Case Tag
Case 1
Wochentag = "Montag"
Case 2
Wochentag = "Dienstag"
Case 3
Wochentag = "Mittwoch"
Case 4
Wochentag = "Donnerstag"
Case 5
Wochentag = "Freitag"
Case 6
Wochentag = "Samstag"
Case 7
Wochentag = "Sonntag"
Case 8
Wochentag = "Montag"
End Select
So drückst du im prinzip einmal zu viel drauf. Vielleicht solltest du zuerst die Taster abfragen und dann schreiben, welcher Tag das is.Code:Taste = Tastenabfrage()
If Taste <> 0 Then
Select Case Taste
Case 1
Tag = Tag + 1
Waitms 200
Print Wochentag
Case 5
Exit Do
End Select
Gruß Hunni
hi
also ich habe doch erst den oberen teil und dann den unteren. mit dem unteren muss ich sehen wie ich das löse, weiss noch nicht wie ich das machen soll
So, habe jetzt einfach etwas vertauscht:
Select Case Tag
Case 1
Wochentag = "Dienstag"
Case 2
Wochentag = "Mittwoch"
Case 3
Wochentag = "Donnerstag"
Case 4
Wochentag = "Freitag"
Case 5
Wochentag = "Samstag"
Case 6
Wochentag = "Sonntag"
Case 7
Wochentag = "Montag"
Case 8
Wochentag = "Dienstag"
End Select
was besseres fällt mir momentan nicht ein, bei stunde, minute und sekunde läuftsja supper, nur bei tag nicht :(
aber jetzt gehts ja
mhh, ansonsten probier mal das:
Code:Case 1
Wochentag = "Montag"
Case 2
Wochentag = "Dienstag"
Case 3
Wochentag = "Mittwoch"
Case 4
Wochentag = "Donnerstag"
Case 5
Wochentag = "Freitag"
Case 6
Wochentag = "Samstag"
Case 7
Wochentag = "Sonntag"
Case Else : tag= 1
End Select
bringt nichts :(
immer noch ein tag zuviel, das andere ist halt gefuscht :(
mhh..... komisch..... leider kann ich dir jetzt auch net den code ganz neu schreiben, da ich im augenblick gerade etwas viel mit der schule zu tun hab.
Versuch einfach nochmal den Code neuzuschreiben, ohne den alten anzugucken, so mach ich das auch manchmal, wenns net hilft.
Ansonsten müsstest du gucken, ob du deinen Taster entprellt hast, aber daran kann das eig net liegen.
Gruß Hunni