robim si jednoduchy program v bascome (nebite ma ), jedna sa o to, ze potrebujem vytvorit podprogram ktory bude ovladany dvomi tlacitkami - SET a +. Potrebujem za sebou zadat 5 hodnot (hod, min, den, mesiac, rok) tak, ze stlacim prve tlacidlo, druhym zinkrementujem hodiny kazdym stlacenim o 1, potom stlacim prve tlacidlo, presuniem sa na minuty a druhym tlacidlom nastavim minuty atd. Nakoniec vyskocim z podprogramu a vratim sa aj s nastavenymi hodnotami do hlavneho programu. Spravil som zatial program pre hodiny a minuty, problemom je:
na zaciatku sa zobrazi uvodny vypis, nastavim hodiny, minuty ale po dalsom stlaceni tlacidla mi to skoci zase na nastavenie hodin. Neviem akym sposobom mam vyskocit z toho podprogramu do hlavneho kde sa zobrazia hodnoty. Skusal som exit sub, exit function...proste to akoby skakalo stale medzi nastavenim hodin a minut...tu je zdrojak:"
Kód: Vybrať všetko
$regfile = "m8def.DAT"
$crystal = 8000000 'frekvencia procesora = 1Mhz, Lfuse=0xE1 Hfuse=0xD9
'Inicializacia LCD
Config Lcdpin = Pin , Db4 = Portb.4 , Db5 = Portb.3 , Db6 = Portb.2 , Db7 = Portb.1 , E = Portb.5 , Rs = Portc.5
Config Lcd = 16 * 2 'typ LCD, v tomto pripade 16x2
Cursor Off Noblink
' Specialne znaky
Deflcdchar 0 , 7 , 5 , 7 , 32 , 32 , 32 , 32 , 32 ' znak stupna
'Prve tlacidlo
Config Portb.0 = Input
Config Portc.2 = Input
Tl1 Alias Pinc.2
Tl2 Alias Pinb.0
Portb.0 = 1
Portc.2 = 1
Dim Hod As Integer
Dim Minuty As Integer
Dim Den As Integer
Dim Mes As Integer
Dim Rok As Integer
Dim Stav As Integer
Den = 0
Minuty = 0
Den = 0
Mes = 0
Rok = 2013
Declare Sub Set_hod(hod As Integer)
Declare Sub Set_min(minuty As Integer)
Do
Cls
Locate 1 , 1
Lcd Hod ; ":" ; Minuty
Locate 2 , 1
Lcd Den ; "-" ; Mes ; "-" ; Rok
If Tl2 = 0 Then
Call Set_hod(hod)
End If
Waitms 250
Loop
Sub Set_hod( , Hod As Integer)
Do
Cls
Locate 1 , 1
Lcd "Hodiny>" ; Hod
If Tl1 = 0 Then
Hod = Hod + 1
Cls
Lcd "Hodiny>" ; Hod
If Hod = 24 Then
Hod = 0
End If
End If
Waitms 250
If Tl2 = 0 Then
Call Set_min(minuty)
End If
Loop
End Sub
Sub Set_min( , Minuty As Integer)
Do
Cls
Locate 1 , 1
Lcd "Min>" ; Minuty
If Tl1 = 0 Then
Minuty = Minuty + 1
Cls
Lcd "Min>" ; Minuty
If Minuty = 24 Then
Minuty = 0
End If
End If
Waitms 250
If Tl2 = 0 Then
Exit Function
End If
Loop
End Sub