Witam!
Zabrałem się nie dawno za przepisywanie dwóch programów z książki Marcina Wiązani. Są to programy:
Sterowanie z poziomu 1-wire dwoma termometrami,
Zegarek na timer1.
Mój problem polega na tym że nie wiem jak to złączyć w jedną całość tzn. chodzi o to żeby współpracowały ze sobą jak należy, ponieważ tylko ciągle wyświetla mi się zegarek na początku, a ja bym chciał zrobić aby zegarek był na początku, ale jak nacisnę dany przycisk to żeby się przełączał na termometr. Oczywiście próbowałem sam, ale się nic nie udało. Przepraszam, że nie ma za dużo komentarzy w programie.
Program:
inventco.eu - program proszę umieszczać w znacznikach CODE.
Zabrałem się nie dawno za przepisywanie dwóch programów z książki Marcina Wiązani. Są to programy:
Sterowanie z poziomu 1-wire dwoma termometrami,
Zegarek na timer1.
Mój problem polega na tym że nie wiem jak to złączyć w jedną całość tzn. chodzi o to żeby współpracowały ze sobą jak należy, ponieważ tylko ciągle wyświetla mi się zegarek na początku, a ja bym chciał zrobić aby zegarek był na początku, ale jak nacisnę dany przycisk to żeby się przełączał na termometr. Oczywiście próbowałem sam, ale się nic nie udało. Przepraszam, że nie ma za dużo komentarzy w programie.
Program:
$regfile = "m16def.dat" 'Ustawienie mikrokontrolera
$sim
$crystal = 8000000 'Ustawienie taktowania
Config Lcd = 16 * 2 'Konfiguracja wyświetlacza LCD
Config Lcdpin = Pin , Db4 = Porta.0 , Db5 = Porta.1 , Db6 = Porta.2 , Db7 = Porta.3 , E = Porta.4 , Rs = Porta.5 'Ustawienie wyjść do wyświetlacza
Cls
Lcd "Witam!"
Wait 2
Cls
'-------------------------------------------------------------------------------'ustawienie guzików itp.
Config Pina.6 = Input 'zegarek 1
Config Pina.7 = Input 'zegarek 2
Config Pinc.7 = Input 'temp. zewnętrzna
Config Pinc.6 = Input 'temp. wewnętrzna
Config Pinc.5 = Input 'wilgotnościomierz
Config Pinc.4 = Input ' przewidywanie pogody
Config Pinc.3 = Input
Config Pinc.2 = Input
Config Timer1 = Timer , Prescale = 256
If Pinc.3 = 1 Then
Gosub Odcz_temp
End If
'-------------------------------------------------------------------------------'zegarek
Declare Sub Wysw_czas
On Timer1 Odmierz_1s
Dim Sekundy As Byte
Dim Minuty As Byte
Dim Godziny As Byte
Dim Nowa_w As Bit
Dim Wart_bcd As Byte
S1 Alias Pina.6
S2 Alias Pina.7
Enable Interrupts
Enable Timer1
Counter1 = 34286
Set Nowa_w
Set Porta.6
Set Porta.7
Do
Call Wysw_czas
If S1 = 0 Then
Waitms 25
End If
If S1 = 0 Then
Incr Minuty
Sekundy = 0
End If
If Minuty = 60 Then
Minuty = 0
End If
Set Nowa_w
Call Wysw_czas
Waitms 200
If S2 = 0 Then
Incr Godziny
End If
If Godziny = 24 Then
Godziny = 0
End If
Set Nowa_w
Call Wysw_czas
Waitms 200
Loop
End
Sub Wysw_czas :
If Nowa_w = 1 Then
Cls
Wart_bcd = Makebcd(godziny)
Lcd Bcd(wart_bcd) ; ":"
Wart_bcd = Makebcd(minuty)
Lcd Bcd(wart_bcd) ; ":"
Wart_bcd = Makebcd(sekundy)
Lcd Bcd(wart_bcd) ;
Reset Nowa_w
End If
End Sub
Odmierz_1s:
Counter1 = Counter1 + 34286
Incr Sekundy
Set Nowa_w
If Sekundy = 60 Then
Sekundy = 0
Incr Minuty
If Minuty = 60 Then
Minuty = 0
Incr Godziny
If Godziny = 24 Then
Godziny = 0
End If
End If
End If
Return
'-------------------------------------------------------------------------------' termometr
Config 1wire = Portc.3
Declare Sub Odcz_temp(czujnik As Byte)
Declare Sub Zapisz_id
Dim Temperatura(2) As Byte
Dim Id(8) As Byte
Dim I As Byte
Dim J As Byte
Dim K As Byte
Dim Liczba_ukl As Byte
S3 Alias Pinc.7
S4 Alias Pinc.6
Deflcdchar 0 , 32 , 28 , 20 , 28 , 7 , 4 , 4 , 7 ' replace ? with number (0-7)
Set Portc.7
Set Portc.6
Cls
Liczba_ukl = 1wirecount()
If S3 = 0 Then
Lcd "liczba ukladow" ; Liczba_ukl
If Liczba_ukl > 0 Then
Id(1) = 1wsearchfirst()
For I = 1 To 8
Writeeeprom Id(i) , I
Next I
End If
If Liczba_ukl > 1 Then
Id(1) = 1wsearchnext()
J = 0
For I = 9 To 16
Incr J
Writeeeprom Id(j) , I
Next I
End If
Lowerline
Lcd "prog ok"
End If
Do
Home
For K = 1 To Liczba_ukl
Call Odcz_temp(k)
If Temperatura(2) = 0 Then
Lcd "temp. zew." ; K ; ": " ; Temperatura(1) ; Chr(0) ; "C"
Else
Lcd "temp. zew." ; K ; ": -" ; Temperatura(1) ; Chr(0) ; "C"
End If
Lowerline
Next K
Loop
End
Sub Odcz_temp(czujnik As Byte)
If Czujnik = 1 Then
For I = 1 To 8
Readeeprom Id(i) , I
Next I
End If
If Czujnik = 2 Then
J = 0
For I = 9 To 16
Incr J
Readeeprom Id(j) , I
Next I
End If
1wreset
Call Zapisz_id
1wwrite &H44
Waitms 750
1wreset
Call Zapisz_id
1wwrite &HBE
Temperatura(1) = 1wread(2)
1wreset
If Err = 1 Then
Cls
Lcd "awaria"
Do
Loop
End If
If Temperatura(2) > 0 Then
Temperatura(1) = 256 - Temperatura(1)
End If
Temperatura(1) = Temperatura(1) / 2
End Sub
Sub Zapisz_id
1wwrite &H55
For I = 1 To 8
1wwrite Id(i)
Next I
End Sub
inventco.eu - program proszę umieszczać w znacznikach CODE.