BASCOM


'Minutnik.bas

'Program, po osiągnięciu założonego czasu alarmuje i pokazuje nazwy tabletek do zażycia.

'Urządzenie jest zagarem z datą, pokazującym czas na podświetlonym wyświetlaczu Lcd.

'Tu jest brzęczyk.

'Prcesor Atmega8.

'Kwarc zegarkowy 32768Hz.

'Pamięć zajęta w 20%.

'Opracował Henryk Wydmuch.

'Fusebit A997 ustawiony na oscylator wewnętrzny 8MHz, 0100.

 

 $regfile = "m8def.dat"                                     'Dyrektyway dla kompilatora.

 $crystal = 8000000                                         'Oscylator o częstotliwości 8MHz.

  Config Lcd = 16 * 2                                       'Konfiguracja Lcd.

 Config Lcdpin = Pin , Db4 = Portb.2 , Db5 = Portc.2 , Db6 = Portc.1 , Db7 = Portc.0 , E = Portc.4 , Rs = Portc.5

 

 Config Timer0 = Timer , Prescale = 256                     '

 Config Timer1 = Timer , Prescale = 1                       '

 

 Config Clock = Soft                                        '

 Config Date = Dmy , Separator = /                          '

 

 Config Pinb.1 = Input                                      'Przycisk Reset alarmu.

 Set Portb.1                                                '

 Config Pinb.0 = Output                                     'Miganie diody D3.

 Set Portb.0                                                '

 Config Pind.0 = Output                                     'Brzęczyk do +.

 Set Portd.0                                                '

 Config Pind.1 = Input                                      'Start czasu i daty.

 Set Portd.1                                                '

 Config Pind.2 = Output                                     'Led D2.

 Set Portd.2                                                '

 

 Start_czasu Alias Pind.1                                   'Zmiana nazwy bitu.

 

 Enable Interrupts                                          'Zezwalaj na przerwania.

 Enable Timer0                                              '

 

 On Timer0 Mig                                              'Podprogram.

 On Timer1 Meg                                              'Podprogram.

 

 Dim Licz As Byte                                           'Deklaracja zmiennej.

 Dim Liczba As Byte                                         'Deklaracja zmiennej.

 

    'Od tej daty i czasu startujemy urządzenie.

    Date$ = "20/05/10"                                      'Od tej daty liczy w przód.

    Time$ = "09:01:00"                                      'Początkowy czas po Start_czasu.

 Cls                                                        '

 Lcd "Czekam na start"                                      'Komunikat przed naciśnięciem startu czasu.

'------------------------------

 Do                                                         'Pętla główna.

 Bitwait Start_czasu , Reset                                'Czekaj na przycisk startu czasu w Portd.1.

 Gosub Start_czas                                           'Skocz do podprogramu...

 Loop                                                       '

 End                                                        '

'------------------------------

 Start_czas:                                                'Podprogram.

 Do                                                         'Pętla w podprogramie.

    Cls                                                     'Czyść Lcd.

    Lcd Time$                                               'Pobierz aktualny czas.

    Locate 1 , 10                                           'W pierwszej linii na 10 miejscu napisz...

    Lcd "Czas"                                              'Czas

    Lowerline                                               'W drugiej linii.

    Lcd Date$                                               'Pobierz aktualną datę.

    Locate 2 , 10                                           '

    Lcd "Data"                                              '

    Waitms 500                                              'Odnawianie Lcd co 0,5sek.                                            .

 '------

   If _hour = 09 Then                                       'O godzinie 09...

   If _min = 01 Then                                        'Minut 01...

   If _sec = 10 Then                                        'Sekund 10...

   Enable Timer1                                            'Odblokuj Timer1.

   Gosub Meg                                                'I idź do podprogramu Meg.

   Cls                                                      'Wyczyść Lcd.

   Lcd "Milurit"                                            'Pokaż jakie tabletki trzeba zażyć.

   Lowerline                                                'W drugiej linii.

   Lcd "Mieta, Acoro "                                     'Tabletki.

   Wait 60                                                  'Trzymaj nazwy tabletek 60sek.

   End If                                                   '

   End If                                                   '

   End If                                                   'Koniec warunków czasów..

'-------

    If _hour = 14 Then                                      'O godzinie 14...

    If _min = 36 Then                                       'Minut 36...

    If _sec = 10 Then                                       'Sekund 10...

    Enable Timer1                                           'Odblokuj Timer1.

    Gosub Meg                                               'I idź do podprogramu Meg.

     Cls                                                    'Wyczyść Lcd.

   Lcd "Poludniowe"                                         '

   Lowerline                                                '

   Lcd "Beto"                                               'Tabletki

   Wait 60                                                  'Trzymaj nazwy tabletek 60sek.

    End If                                                  '

    End If                                                  '

    End If                                                  'Koniec warunków czasów..

'--------

 If _hour = 22 Then                                         'O godzinie 22...

 If _min = 01 Then                                          'Minut 01...

 If _sec = 10 Then                                          'Sekund 10...

 Enable Timer1                                              'Odblokuj Timer1.

 Gosub Meg                                                  'I idź do podprogramu Meg.

  Cls                                                       'Wyczyść Lcd.

   Lcd "Witamina C"                                             'Pokaż jakie tabletki trzeba zażyć.

   Lowerline                                                'W drugiej linii.

   Lcd "Witamina B"                                              'Tabletki.

   Wait 60                                                  'Trzymaj nazwy tabletek 60sek.

 End If                                                     '

 End If                                                     '

 End If                                                     'Koniec warunków czasów..

'-------

 Loop                                                       'Powtórz pętlę.

 End                                                        'Koniec pętli.

 Return                                                     'Wracaj.

'--------''''''''------------

 Mig:                                                       'Podprogram Timer0 (miganie Led).

  Incr Licz                                                 '

  If Licz = 5 Then                                          '

  Toggle Portb.0                                            '

  Waitms 200                                                '

  Toggle Portb.0                                            '

  End If                                                    '

  Return                                                    '

 '--------''''''''------------

 Meg:                                                       'Podprogram Timera1.

  Incr Liczba                                               'Zmienna Liczba zbiera ilość przepełnień.

  If Liczba = 1 Then                                        'Jeśli jest 1 przepełnienie.

  Toggle Portd.0                                            'Jest dźwięk brzęczyka.

  Waitms 400                                                '400mS.

  Toggle Portd.0                                            'Nie ma dźwięku brzęczyka.

   If Pinb.1 = 0 Then                                       'Jeśli naciśnięto kasowanie alarmu.

   Reset Portd.2                                            'Led D2 zaświeciła się.

   Disable Timer1                                           'Zablokuj Timer1.

   Wait 60                                                  'Trzymaj 60sek świecenie Led kasowania Reset alarmu.

   Set Portd.2                                              'Led zgasła.

   End If                                                   'Koniec warunku kasowania alarmu.

  End If                                                    'Koniec warunku ilości przepełnień Timer1.

  Return                                                    'Wracaj.

 '-------'''''''''------------

 'Objaśnienie:

 'Urządzenie uruchomimy o dokładnej godzinie i dacie wpisanej w program naciśnięciem przycisku Start czasu.

 'Na Lcd będziemy widzieć datę i uciekający czas. Będzie to zegar.

 'Rano, w południe i wieczorem (codziennie) pojawi się alarm, przypominający o konieczności zażycia tabletek.

 'Alarm będzie trwał do czasu skasowania.

 'Moment skasowania potwierdzi żółta dioda, która po minucie wyłączy się.

 'W czasie alarmu na Lcd widzimy nazwę taletek, które trzeba zażyć.

 'Tabletki na Lcd widoczne są przez minutę, potem na Lcd wraca czas.

 'Wszystkie zdarzenia nie wstrzymują liczenia czasu, widoczny lub nie, biegnie swoim torem.

 'Ewentualna regulacja dokładności czasu polega na zwiększaniu lub pomniejszaniu pojemności kondesatora przy kwarcu 32768KHz.

 'Wyłączenie zasilania, spowoduje powrót do czasu wpisanego w program (należałoby dodać buforowe zasilanie).

 '1 min = 60 sek.

 '1 godz = 3600 sek.

 '1 doba = 86400 sek.

 '1 tydz = 604800 sek.