Witam wszystkich.Zacząłem naukę programowania (Bascom),więc proszę o wyrozumiałość. Napisałem taki program zegara RTC z kwarcem 32768Hz i nie wiem jak dopisać mam guziki do ustawiania budzika.Siedzę dwa dni i nic mi nie wychodzi.Polski help i książka Marcina Wiązani w tym przypadku jakoś mi nie pomaga.Oto kod źródłowy: $regfile = "m8def.dat" $crystal = 8000000 . Config Lcd = 16 * 2 Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 , Db7 = Portc.0 , E = Portc.4 , Rs = Portc.5 Config Clock = Soft Config Date = Dmy , Separator = / '.............................................................................. Config Pind.0 = Input 'Ustaw godzinę. Portd.0 = 1 Config Pind.1 = Input 'Ustaw minuty. Portd.1 = 1 Config Pind.2 = Input 'Ustaw rok. Portd.2 = 1 Config Pind.3 = Input 'Ustaw miesiąc. Portd.3 = 1 Config Pind.4 = Input 'Ustaw dzień. Portd.4 = 1 Config Pinb.0 = Input 'Powrót do zegara. Portb.0 = 1 Config Pind.7 = Output 'Głośnik. Portd.7 = 1 '.............................................................................. Enable Interrupts Date$ = "00/00/00" Time$ = "00:00:00" '.............................................................................. Zegar: Do Waitms 100 Cls If Pind.0 = 0 Then Waitms 25 If Pind.0 = 0 Then Incr _hour If _hour = 24 Then _hour = 0 End If End If End If If Pind.1 = 0 Then Waitms 25 If Pind.1 = 0 Then Incr _min If _min = 60 Then _min = 0 End If End If End If If Pind.2 = 0 Then Waitms 25 If Pind.2 = 0 Then Incr _year If _year = 50 Then _year = 0 End If End If End If If Pind.3 = 0 Then Waitms 25 If Pind.3 = 0 Then Incr _month If _month = 13 Then _month = 0 End If End If End If If Pind.4 = 0 Then Waitms 25 If Pind.4 = 0 Then Incr _day If _day = 32 Then _day = 0 End If End If End If 'BUDZIK ??? Nie wiem jak przypisać guziki do jego ustawiania................... If _hour = 00 Then If _min = 00 Then If _sec = 05 Then Gosub Budzik End If End If End If '.............................................................................. Lcd Time$ Locate 1 , 10 Lcd "Czas" Lowerline Lcd Date$ Locate 2 , 10 . Lcd "Data" Loop '.............................................................................. Budzik: Do Cls Lcd "Budzik" Sound Portd.7 , 300 , 600 If Pinb.0 = 0 Then Waitms 25 If Pinb.0 = 0 Then Gosub Zegar End If End If Loop End
|
|||








Re: Zegar
gdzie w tym temacie jest coś na temat zegara RTC? Chodzi tu o wewnętrzny tryb timera procesora do odliczania czasu? Po pierwsze reszta programu nie może być napisana tak na chama w głównej pętli. Wykorzystaj drugi timer do odliczania czasu np co 4ms lub co 20ms i w obsłudze przerwania ustawiaj zmienną flagę, która potem sprawdzisz w pętli głównej. To standardowe rozwiązanie, pozwoli uniknąć tych waitms. Potem musisz dodać menu bo bezsensem jest ustawiać na każdym przycisku coś innego. Wystarczą 3 przyciski, +,- i select. Normalnie nic się nie ustawia, po kliknięciu select ustawiasz godziny za pomocą + i -, potem klikasz select drugi raz i ustawiają się teraz minuty za pomocą + i -. Poczytaj kody źródłowe na mojej stronie na temat obsługi klawiatury w mikrokontrolerze. Poza tym w prawie wszystkich programach mam takie menu do ustawień.
Dopisanie samego budzika to nie problem... wystarczy zrobić sobie dwie zmienne pomocnicze: h_budz i m_budz, do których tak samo jak teraz minuty i godziny, wpiszesz wartości czasu budzenia. potem sprawdzisz czy min = m_budz and h = h_budz i jeśli tak to włącz buzzer....... to jest tak w najprostszej wersji
UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.