Ik ben reeds een tijdje bezig aan een timer voor men nieuwe lichtbak. Blijkbaar ben ik wel nog steeds een krabber met picbasic. De volgende code zou eerst voor het testen alle ledpanelen doorlopen (heb er 3 om te kunnen kiezen volgens pcb grootte). Daarna zou de tijd ingesteld worden.
Tijd_omhoog is de subroutine voor het verhogen van de tijd, Tijd_omlaag voor het verlagen ... enz enz. Ik dacht te beginnen met het testen van het verhogen, maar aangezien dat al niet werkt post ik hier maar even...
Hetgeen niet werkt is het verhogen, de testomloop werkt wel.
Code: Selecteer alles
Device 16F628A
Config intrc_osc_noclkout, wdt_off, pwrte_on, lvp_off, mclre_off
ALL_DIGITAL true
PORTB_PULLUPS On
Clear
;Scherm instellen
DelayMS 250 ;lcd stabilisatie
Cls ;scherm leegmaken
;Poorten instellen
; 76543210
PORTA = %00000000
PORTB = %00000000
TRISA = %11100010
TRISB = %00000011
;Logische constanten
Symbol aan = 1
Symbol uit = 0
Symbol Iaan = 0
Symbol Iuit = 1
;Constanten
Symbol Toontijd_opstarten = 2500
;Poorten benoemen
Symbol Omhoog = PORTB.0
Symbol Omlaag = PORTB.1
Symbol Start = PORTA.5
Symbol Stoppen = PORTA.1
Symbol buzzer = PORTA.0
Symbol leds1 = PORTA.2
Symbol leds2 = PORTA.3
Symbol leds3 = PORTA.4
;Variabelen declareren
Dim min_resterend As Byte
Dim sec_resterend As Byte
Dim minuten As Byte
Dim seconden As Byte
Dim buzztel As Byte
;Introductie: alle ledborden en buzzer testen
seconden = 0
minuten = 0
buzztel = 0
; 0123456789ABCDEF
Print At 1,1, "Uv-led lichtbak "
Print At 2,1, "Versie 1.0 "
DelayMS Toontijd_opstarten
Print At 1,1, "(c) 2008 Zatar "
Print At 2,1, " "
DelayMS Toontijd_opstarten
Print At 1,1, "Test Drive "
Print At 2,1, "Paneel 1 "
leds3 = uit
leds1 = aan
DelayMS Toontijd_opstarten
Print At 2,1, "Paneel 2 "
leds1 = uit
leds2 = aan
DelayMS Toontijd_opstarten
Print At 2,1, "Paneel 3 "
leds2 = uit
leds3 = aan
DelayMS Toontijd_opstarten
leds3 = uit
Repeat
buzzer = aan
DelayMS 200
buzzer = uit
DelayMS 200
Inc buzztel
Until buzztel = 5
;Hoofdprogramma: instellen tijd, starten en uitschakelen na afloop
Main:
While 1 = 1
Tijd_instellen: ;hier stel ik de tijd in die afgelopen moet worden
While Omhoog = uit And Omlaag = uit And Start = uit And Stoppen = uit : Wend
GoSub Instelling_tonen ;sub voor het printen van de tekst
GoSub Tijd_omhoog ;in deze subroutine zal gekeken worden of de drukknop voor het verhogen van de tijd is ingedrukt.
GoSub Tijd_omlaag ;in deze subroutine zal gekeken worden of de drukknop voor het verlagen van de tijd is ingedrukt.
GoSub Starten ;in deze sub zal gekeken worden of start is ingedrukt, zo ja zal de tijd beginnen aftellen
Wend
Instelling_tonen:
; 0123456789ABCDEF
Print At 1,1, "Tijd instelling:"
Print At 2,1, Rep " "\16
Print At 2,1, Dec minuten, " min : ", Dec seconden, " sec"
Return
Tijd_omhoog:
If Omhoog = aan Then
Inc seconden
If seconden = 60 Then
Inc minuten
seconden = 0
DelayMS 75
EndIf
EndIf
Return
Tijd_omlaag:
Starten:
End