Gut, Ich schau' mir das an. Etwas Geduld
Druckbare Version
Gut, Ich schau' mir das an. Etwas Geduld
Versuch mal, Irrtum vorbehalten.
Ein paar Sachen würde ich anders machen, aber eigentlich könnte das gehen. Ist der Code von dir oder wo hast du ihn her ?
Code:$regfile = "m48def.dat"
$crystal = 4000000
Config Timer1 = Timer , Prescale = 64 ' 1 sec
Const Timerpreset = 3036 ' 1 sec
On Timer1 Ontimer1
Config Portd.0 = Output 'A
Config Portd.1 = Output 'B
Config Portd.2 = Output 'C
Config Portd.3 = Output 'D
Config Portd.4 = Output 'E
Config Portd.5 = Output 'F
Config Portd.6 = Output 'G
Config Portb.1 = Output 'Digi 1
Config Portb.2 = Output 'Digi 2
Config Portb.3 = Output 'Digi 3
Config Portb.4 = Output 'Digi 4
Config Portc.2 = Output 'Dezimalpunkt = Sek_blink Gegen +
Config Portc.1 = Output 'Relais
Config Portc.0 = Output 'Peeper Gegen -
Config Portc.3 = Input ' Start/ Stop Taster
Config Portc.4 = Input 'Minuten Taster
Config Portc.5 = Input 'Sekunden Taster
Declare Sub Zeiteinstellung
Declare Sub Soundout
Dim Zeit(4) As Byte
Dim Kontrolle As Eram Byte ' kontrollbyte
Dim Eezeit(4) As Eram Byte
Dim Z As Byte
Dim I As Word
Dim Tmp As Byte
Dim Taste1 As Bit
Dim Taste2 As Bit
Dim Taste3 As Bit
Dim Taste4 As Bit
Portd = &H7F
Portb = &H1E
Portc = &H3C
Taste4 = 1
'--- Sekunden-Punkt darf in diesem Fall nicht in der Multiplexroutine stehen ---
Dezimalpunkt Alias Portc.2 'dezimalpunkt blinkt im halbsekunden takt
Dim Sek_blink As Bit
'Zeit Voreinstellung laden aus EEProm
Call Zeiteinstellung
Enable Timer1
Stop Timer1
Timer1 = Timerpreset
Enable Interrupts
'*******************************************************************************
Main:
Tmp = 1
For Z = 1 To 4
Dezimalpunkt = Sek_blink
I = I + 1
If I = 600 Then
Sek_blink = 0
I = 0
End If
Portd = Lookup(zeit(z) , Led_table) 'zahl aus Variable in 7segment anzeigen
Portb = Tmp
If Tccr1b = 0 Then 'wenn timer gestoppt, ist Relais aus
Portb.5 = 1 'einzelnen segmente ansteuern
End If
Shift Tmp , Left , 1
Waitms 1
'----------------- Start/Stop und wenn geändert EEPROM-werte Schreiben ---------
If Pinc.3 = 0 And Taste4 = 0 Then
Eezeit(1) = Zeit(1)
Eezeit(2) = Zeit(2)
Eezeit(3) = Zeit(3)
Eezeit(4) = Zeit(4)
Kontrolle = 0 ' ERAM Kontrolle
Taste4 = 1 ' reset changed
End If
'----------------- Reine Start/Stop Routien ------------------------------------
If Pinc.3 = 0 And Taste3 = 0 Then
Taste3 = 1 ' disable start/stop
If Tccr1b = 0 Then
Start Timer1
Call Zeiteinstellung
I = 0 ' reset blink-count
Portc.1 = 1 'Relais ON
Else
Stop Timer1
Call Zeiteinstellung
I = 0 ' reset blink-count
Portc.1 = 0 'Relais OFF
End If
End If
If Pinc.3 = 1 Then
Taste3 = 0 ' enable start/stop
End If
'----------------- Minuten um 1 erhöhen Taster ---------------------------------
If Pinc.4 = 0 And Taste2 = 0 And Tccr1b = 0 Then
Taste2 = 1 ' disable up/down MIN
Taste4 = 0 ' set changed
Incr Zeit(2)
If Zeit(2) = 10 Then
Zeit(2) = 0
Incr Zeit(1)
If Zeit(1) = 10 Then Zeit(1) = 0
End If
End If
If Pinc.4 = 1 Then
Taste2 = 0 ' enable up/down MIN
End If
'------------Sekunde und Minuten = Null setzen ---------------------------------
If Pinc.4 = 0 And Tccr1b = 0 And Pinc.5 = 0 Then
Taste4 = 0 ' set changed
Zeit(1) = 0
Zeit(2) = 0
Zeit(3) = 0
Zeit(4) = 0
End If
If Pinc.4 = 1 And Pinc.5 = 1 Then
End If
Next Z
'******************************************************************************
'----------------- Sekunden um 1 erhöhen Taster --------------------------------
If Pinc.5 = 0 And Taste1 = 0 And Tccr1b = 0 Then
Taste1 = 1 ' disable up/down SEC
Taste4 = 0 ' set changed
Incr Zeit(4)
If Zeit(4) = 10 Then
Zeit(4) = 0
Incr Zeit(3)
If Zeit(3) = 6 Then Zeit(3) = 0
End If
End If
If Pinc.5 = 1 Then
Taste1 = 0 ' enable up/down SEC
End If
Goto Main
'******************************************************************************
Ontimer1:
Timer1 = Timerpreset
Decr Zeit(4)
Sek_blink = 1
I = 0 'blink counter
If Zeit(1) = 0 And Zeit(2) = 0 And Zeit(3) = 0 And Zeit(4) = 0 Then
Stop Timer1
Call Zeiteinstellung
I = 0
Portc.1 = 0 'relais OFF
Call Soundout 'Peep-peep
End If
If Zeit(4) = 255 Then
Zeit(4) = 9
Decr Zeit(3)
If Zeit(3) = 255 Then
Zeit(3) = 5
Decr Zeit(2)
If Zeit(2) = 255 Then
Zeit(2) = 9
Decr Zeit(1)
End If
End If
End If
Return
'----------- gespeicherte Timerwerte aus EEPROM laden --------------------------
Sub Zeiteinstellung
If Kontrolle = &HFF Then ' neu oder gelöschter ERAM
Zeit(1) = 0
Zeit(2) = 0
Zeit(3) = 0
Zeit(4) = 0
Else
Zeit(1) = Eezeit(1) 'Minuten Zehner
Zeit(2) = Eezeit(2) 'Minuten Einer
Zeit(3) = Eezeit(3) 'Sekunden zehner
Zeit(4) = Eezeit(4) 'Sekunden Einer
End If
End Sub
Sub Soundout
Portb.1 = 1
Portb.2 = 1
Portb.3 = 1
Portb.4 = 1
Sound Portc.0 , 400 , 100
Portb.1 = 0
Portb.2 = 0
Portb.3 = 0
Portb.4 = 0
Waitms 100
Portb.1 = 1
Portb.2 = 1
Portb.3 = 1
Portb.4 = 1
Sound Portc.0 , 400 , 100
Waitms 100
Portb.1 = 0
Portb.2 = 0
Portb.3 = 0
Portb.4 = 0
Sound Portc.0 , 400 , 100
Portb.1 = 1
Portb.2 = 1
Portb.3 = 1
Portb.4 = 1
End Sub
End
'Parameter für 7Segment um diese Zahl Anzuzeigen über die Ausgänge
Led_table:
' 0 1 2 3 4 5 6 7 8 9
Data &H40 , &H79 , &H24 , &H30 , &H19 , &H12 , &H02 , &H78 , &H0 , &H10
Hallo Robert danke!
Aber leider Geht das letzte Segment nicht,
den Code habe ich irgendwo im Netz gefunden.
MFG Alfons
Du meinst das LED-Segment g ?Zitat:
..leider Geht das letzte Segment nicht, .
Hallo nein ich meine das letzte Segment
Was heisst "letztes" Segment?
A? B? C? D? E? F? G? DP?
hi sorry ich meinte das letzte display
irgendwo,kann nicht sein der ist von mir und wurde für einen namensZitat:
Zitat von alf-k
"manni" im bascom forum geschrieben. hatte mir dafür 3 bis 4 lcd versprochen, die ich nie erhalten habe.
ist schon komisch das es leute gibt die einen alles machen lassen und selbst nicht denken wollen. ist ja einfacher. wird mir nicht mehr passieren
jemanden mit einen kompletten code zu helfen, schnipsel ja ,komplett nein. selber lernen ist halt schwerer als alles sich vorkauen lassen.
gehe lieber heli fliegen und mache meinen kram selbst.
MIKE