BASCOM

Przypomnij Babci o lekach


Zegar pokazujący datę i czas.

W tym przykładzie datę i czas początkowy wpisujemy przy pomocy dołączonej klawiatury komputerowej. Jest więc możliwość zmiany tego wpisu lub wpisania nowej daty i czasu, gdy z powodu braku zasilania lub innych powodów utracimy poprzedni wpis.

Godziny powiadamiania o konieczności zarzycia leków muszą być wpisane w czasie programowania procesora. Alarmowanie jest dźwiękowe, diodą Led oraz wyświetlaniem nazwy leku na Lcd.

Teraz, na schemacie można zobaczyć sposób zasilania buforowego przy pomocy akumulatorka, zapobiegające utracie wpisu daty i czasu początkowego gdy zabraknie zasilania z sieci.

'CzasAT1.bas

'Pozwala ustawić datę i czas z klawiatury AT.

'Należy dołączyć klawiaturę komputerową w celu wpisania daty i czasu.

'Wpis daty i czasu: DDspacjaMMspacjaRRGGspacjaMMspacjaSSspacja.

'Gdzie: D-dzień, M-miesiąc, R-rok, G-godzina, M-minuta, S-sekunda.

'Zegar startujemy przyciskiem P7.

'Czas widać na Lcd po włączeniu włącznikiem W.

'W programie wpisane są godziny alarmowania przypominającego konieczność zarzycia leku.

'Procesor Atmega8.

'Pamięć zajęta w 37%.

'Opracował Henryk Wydmuch.

'Fusebit A997 ustawiony na oscylator wewnętrzny 0011.

'Kwarc zewnętrzny, zegarkowy 32768Hz.

 

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

 $crystal = 4000000                                         'Zastosujemy oscylator wewnętrzny 4MHz.

 Config Lcd = 16 * 2

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

 

 Config Keyboard = Pinc.0 , Data = Pinc.1 , Keydata = Keydata       'Keyboard=klawiatura, podłączona do Portc.0 i 1.

 

   Config Clock = Soft                                      'Konfiguruj czas.

   Config Date = Dmy , Separator = /                        'Konfiguruj datę. Będzie: dzień, miesiąc, rok, seperatorem będzie /.

   Config Timer1 = Timer , Prescale = 1                     '

   Config Timer0 = Timer , Prescale = 256                   '

   Enable Interrupts                                        'Odblokuj przerwania.

   Enable Timer0                                            '

 

 Config Pinb.3 = Output                                     'Led czerw. - załączone.

 Set Portb.3                                                'Ustaw poziom wysoki.

 Config Pinc.4 = Input                                      'Włącznik. Włącza lub wyłącza pokazywanie czasu.

 Set Portc.4                                                'Ustaw poziom wysoki.

 Config Pinc.3 = Output                                     'Głośnik.

 Set Portc.3                                                '

 Config Pinb.0 = Input                                      'Kasowanie alarmu

 Set Portb.0                                                '

 Config Pind.6 = Output                                     'Żółta led.

 Set Portd.6                                                '

 Config Pind.7 = Input                                      'Startuje czas.

 Set Portd.7                                                'Ustaw poziom wysoki.

 

 Dim Kodklaw As Long                                        'Deklarujemy zmienną Kodklaw, tu będzie umieszczany kod naciśniętego klawisza.

 Dim Liczba As Byte                                         'Przepełnienia Timer1.

 Dim Licz As Byte                                           'Przepełnienia Timer0.

 Dim Pozycja As Byte                                        'Pozycja, zmienna przechowująca ilość przyciśniętych przycisków.

 Dim Da As String * 9                                       'Deklarujemy zmienną Da, tu będzie umieszczona napisana data.                                       '

 Dim Ti As String * 9                                       'Deklarujemy zmienną Ti, tu umieścimy napisany czas.

 Dim A1 As String * 1                                       'Jednomiejscowa zmienna, tu umieścimy nazwę naciśniętego klawisza.

 Dim A2 As String * 1                                       'Jednomiejscowa zmienna, tu umieścimy nazwę naciśniętego klawisza.

 Dim B As String * 1                                        'Jednomiejscowa zmienna, tu umieścimy nazwę naciśniętego klawisza.

 Dim C1 As String * 1                                       'Jednomiejscowa zmienna, tu umieścimy nazwę naciśniętego klawisza.

 Dim C2 As String * 1                                       'Jednomiejscowa zmienna, tu umieścimy nazwę naciśniętego klawisza.

 Dim D As String * 1                                        'Jednomiejscowa zmienna, tu umieścimy nazwę naciśniętego klawisza.

 Dim E1 As String * 1                                       'Jednomiejscowa zmienna, tu umieścimy nazwę naciśniętego klawisza.

 Dim E2 As String * 1                                       'Jednomiejscowa zmienna, tu umieścimy nazwę naciśniętego klawisza.

 Dim E3 As String * 1                                       'Jednomiejscowa zmienna, tu umieścimy nazwę naciśniętego klawisza.

 Dim E4 As String * 1                                       'Jednomiejscowa zmienna, tu umieścimy nazwę naciśniętego klawisza.

    Dim F1 As String * 1                                    'Jednomiejscowa zmienna, tu umieścimy nazwę naciśniętego klawisza.

    Dim F2 As String * 1                                    'Jednomiejscowa zmienna, tu umieścimy nazwę naciśniętego klawisza.

    Dim G As String * 1                                     'Jednomiejscowa zmienna, tu umieścimy nazwę naciśniętego klawisza.

    Dim H1 As String * 1                                    'Jednomiejscowa zmienna, tu umieścimy nazwę naciśniętego klawisza.

    Dim H2 As String * 1                                    'Jednomiejscowa zmienna, tu umieścimy nazwę naciśniętego klawisza.

    Dim J As String * 1                                     'Jednomiejscowa zmienna, tu umieścimy nazwę naciśniętego klawisza.

    Dim K1 As String * 1                                    'Jednomiejscowa zmienna, tu umieścimy nazwę naciśniętego klawisza.

    Dim K2 As String * 1                                    'Jednomiejscowa zmienna, tu umieścimy nazwę naciśniętego klawisza.

    Dim K3 As String * 1                                    'Jednomiejscowa zmienna, tu umieścimy nazwę naciśniętego klawisza.

    Dim K4 As String * 1                                    'Jednomiejscowa zmienna, tu umieścimy nazwę naciśniętego klawisza.

    Dim K5 As String * 1                                    'Jednomiejscowa zmienna, tu umieścimy nazwę naciśniętego klawisza.

  Display Off                                               'Wyłącz Lcd.

  Waitms 500                                                'Poczekaj 500mS.

  Display On                                                'Włącz Lcd.

  Cls                                                       'Czyść Lcd.

 

  On Timer0 Mig                                             'Podprogram.

  On Timer1 Meg                                             'Podprogram.

 

 Lcd "Data:" ; Chr(34) ; "dd/mm/rr" ; Chr(34)               'Po włączeniu procesora, pokaż jak trzeba wpisać.

 Lowerline                                                  'I w drugiej linii..

 Lcd "Czas:" ; Chr(34) ; "gg:mm:ss" ; Chr(34)               'Po włączeniu procesora, pokaż jak trzeba wpisać.

 Pozycja = 9                                                'Do zmiennej Pozycja wpisz cyfrę 9.

 

'********************************************************************************

 Do                                                         'Pierwsza pętla Do. Służy tylko do wpisania daty i czasu.

 Kodklaw = Getatkbd()                                       'Odczytaj kod klawiatury (Getatkbd) i wpisz do zmiennej.

 

 If Kodklaw > 0 And Kodklaw < 255 Then                      'Jeśli ta cyfra będzie większa od 0 lub mniejsza od 255...

 Cls                                                        'Wyczyść Lcd.

       Locate 1 , 1                                         '

       Cursor Off                                           '

       Lcd "Data " ; A1 ; A2 ; B ; C1 ; C2 ; D ; E1 ; E2;   '

       Locate 2 , 1                                         '

       Lcd "Czas " ; E3 ; E4 ; F1 ; F2 ; G ; H1 ; H2 ; J;   '

 

     Incr Pozycja                                           'Po każdym naciśnięciu klawisza, powiększ Pozycja o 1.

 

     If Pozycja = 10 Then                                   'Jeśli Pozycja zawiera cyfrę 10, to...

     A1 = Chr(kodklaw)                                      'Do zmiennej A1 wpisz nazwę klawisza.

      End If                                                'Koniec warumku.

     If Pozycja = 11 Then                                   'Jeśli Pozycja zawiera cyfrę 11, to...

     A2 = Chr(kodklaw)                                      'Do zmiennej A2 wpisz nazwę klawisza.

      End If                                                '

     If Pozycja = 12 Then                                   'Jeśli Pozycja zawiera cyfrę 12, to...

     B = Chr(kodklaw)                                       'Do zmiennej B wpisz nazwę klawisza.

      End If                                                '

     If Pozycja = 13 Then                                   'Jeśli Pozycja zawiera cyfrę 13, to...

     C1 = Chr(kodklaw)                                      'Do zmiennej C1 wpisz nazwę klawisza.

      End If                                                '

     If Pozycja = 14 Then                                   'Jeśli Pozycja zawiera cyfrę 14, to...

     C2 = Chr(kodklaw)                                      'Do zmiennej C2 wpisz nazwę klawisza.

      End If                                                '

     If Pozycja = 15 Then                                   'Jeśli Pozycja zawiera cyfrę 15, to...

     D = Chr(kodklaw)                                       'Do zmiennej D wpisz nazwę klawisza.

      End If                                                '

     If Pozycja = 16 Then                                   'Jeśli Pozycja zawiera cyfrę 16, to...

     E1 = Chr(kodklaw)                                      'Do zmiennej E1 wpisz nazwę klawisza.

      End If                                                '

     If Pozycja = 17 Then                                   'Jeśli Pozycja zawiera cyfrę 17, to...

     E2 = Chr(kodklaw)                                      'Do zmiennej E2 wpisz nazwę klawisza.

      End If                                                '

     If Pozycja = 18 Then                                   'Jeśli Pozycja zawiera cyfrę 18, to...

     E3 = Chr(kodklaw)                                      'Do zmiennej E3 wpisz nazwę klawisza.

      End If                                                '

     If Pozycja = 19 Then                                   'Jeśli Pozycja zawiera cyfrę 19, to...

     E4 = Chr(kodklaw)                                      'Do zmiennej E4 wpisz nazwę klawisza.

      End If                                                '

     If Pozycja = 20 Then                                   'Jeśli Pozycja zawiera cyfrę 20, to...

     F1 = Chr(kodklaw)                                      'Do zmiennej F1 wpisz nazwę klawisza.

      End If                                                '

     If Pozycja = 21 Then                                   'Jeśli Pozycja zawiera cyfrę 21, to...

     F2 = Chr(kodklaw)                                      'Do zmiennej F2 wpisz nazwę klawisza.

      End If                                                '

     If Pozycja = 22 Then                                   'Jeśli Pozycja zawiera cyfrę 22, to...

     G = Chr(kodklaw)                                       'Do zmiennej G wpisz nazwę klawisza.

      End If                                                '

     If Pozycja = 23 Then                                   'Jeśli Pozycja zawiera cyfrę 23, to...

     H1 = Chr(kodklaw)                                      'Do zmiennej H1 wpisz nazwę klawisza.

      End If                                                '

     If Pozycja = 24 Then                                   'Jeśli Pozycja zawiera cyfrę 24, to...

     H2 = Chr(kodklaw)                                      'Do zmiennej H2 wpisz nazwę klawisza.

      End If                                                '

     If Pozycja = 25 Then                                   'Jeśli Pozycja zawiera cyfrę 25, to...

     J = Chr(kodklaw)                                       'Do zmiennej J wpisz nazwę klawisza.

      End If                                                '

 

      If Pozycja = 26 Then                                  'Ostatnia spacja.

       Da = A1 + A2 + B + C1 + C2 + D + E1 + E2             'Zmienna Da pamięta następujące, naciśnięte przyciski...

       Ti = E3 + E4 + F1 + F2 + G + H1 + H2 + J             'Zmienna Ti pamięta następujące, naciśnięte przyciski...

       Gosub Ustaw                                          'Skocz do podprogramu oczekiwania na start.

      End If                                                '

 End If                                                     '

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

 Loop                                                       'Powtórz pętlę,

 End                                                        'Koniec pętli.

'********************************************************************************

 Ustaw:                                                     'Podprogram oczekiwania na start.

   Do                                                       '

    If Pind.7 = 0 Then                                      'P7.

    Date$ = Da                                              'Zawartość Date$ będzie wyglądać tak, ja w zmiennej Da.

    Time$ = Ti                                              'Zawartość Time$ będzie wyglądać tak, ja w zmiennej Ti.

    Gosub Licz                                              'Skocz do podprogramu liczenia czasu.

    End If                                                  '

    Loop                                                    '

   End                                                      '

 Return                                                     'Wracaj do pierwszej pętli.

'********************************************************************************

 Licz:                                                      'Podprogram liczenia i pokazywania czasu.

   Do                                                       'Druga pętla, obsługująca zegar.

'--------jeśli W jest wyłączony, czasu nie widać, alarmu nie ma-----------

       If Pinc.4 = 0 Then                                   'Jeśli włącznik W ustawiony będzie na 0...

       Cls                                                  'Wyczyść Lcd.

       Lcd Date$                                            'Pokaż zawartość Date$.

       Locate 1 , 12                                        'A w pierwszej linii Lcd, na 12 miejscu...

       Lcd "Data"                                           'Napisz Data.

       Lowerline                                            'W drugiej linii...

       Lcd Time$                                            'Pokaż zawartość Time$.

       Locate 2 , 12                                        'A w drugiej linii, na 12 miejscu napisz Czas.

       Lcd "Czas"                                           '

       Wait 1                                               'Przytrzymaj informacje przez 1s.

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

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

   If _min = 01 Then                                        'Minut 01...

   If _sec = 10 Then                                        'Sekund 10...

   Enable Timer1                                            'Odblokuj Timer1.

   Gosub Mig                                                'I idź do podprogramu Mig.

   Cls                                                      'Wyczyść Lcd.

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

   Lowerline                                                'W drugiej linii.

   Lcd "Z krzyżykiem "                                     '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 Mig                                               'I idź do podprogramu Mig.

     Cls                                                    'Wyczyść Lcd.

   Lcd "Poludniowe"                                         '

   Lowerline                                                '

   Lcd "Ziółka"                                               '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 Mig                                                  'I idź do podprogramu Mig.

  Cls                                                       'Wyczyść Lcd.

   Lcd "Mięta"                                             'Pokaż jakie tabletki trzeba zarzyć.

   Lowerline                                                'W drugiej linii.

   Lcd "Pokrzywa"                                              'Tabletki.

   Wait 60                                                  'Trzymaj nazwy tabletek 60sek.

 End If                                                     '

 End If                                                     '

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

'-------

 

 End If                                                     'Koniec warunku włącznika W.

 Loop                                                       'Powtórz pętlę.

 End                                                        '

 Return                                                     'Wróć do drugiej pętli.

'********************************************************************************

  '--------o czasie alarm ------------

 Meg:                                                       'Podprogram Timera1.

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

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

  Sound Portc.3 , 100 , 205                                 'Jest dźwięk brzęczyka.

  Waitms 100                                                '100mS.

  Sound Portc.3 , 100 , 207                                 'Nie ma dźwięku głośnika.

 

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

   Reset Portd.6                                            'Led zaświeciła się (żółta).

   Disable Timer1                                           'Zablokuj Timer1.

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

   Set Portd.6                                              'Led zgasła.

   End If                                                   'Koniec warunku kasowania alarmu.

 

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

  Return                                                    'Wracaj.

 

 '----miga czerw. Led---

 Mig:                                                       'Podprogram Timer0 (miganie Led).

  Timer0 = 100                                              '

  Incr Licz                                                 '

  If Licz = 1 Then                                          'Jedno przepełnienie Timer0.

  Toggle Portb.3                                            '

  Waitms 100                                                'Krótki czas świecenia Led.

  Toggle Portb.3                                            '

  End If                                                    '

  Return                                                    '

'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

'Tablica numerów przycisków klawiatury AT w kodzie ASCI:

    Keydata:                                                'Podprogram tablicy.

     'Małe litery

   Data 0 , 5 , 0 , 3 , 4 , 5 , 6 , &H07 , 5 , 5 , 5 , &H0B , &H0C , 0,       ''''''''''''A

   Data 63 , 63 , 63 , 63 , 63 , 63 , 63 , 113 , 49 , 63 , 63 , 63 , 122,       ''''''''''B

   Data 115 , 97 , 119 , 50 , 63 , 63 , 99 , 120 , 100 , 101 , 52 ,       ''''''''''''''''C

   Data 51 , 63 , 63 , 32 , 118 , 102 , 116 , 114 , 53 , 63 , 63 , 110 ,       '''''''''''D

   Data 98 , 104 , 103 , 121 , 54 , 63 , 63 , 63 , 109 , 106 , 117 , 55 ,       ''''''''''E

   Data 56 , 63 , 63 , 44 , 107 , 105 , 111 , 48 , 57 , 63 , 63 , 46 , 47 ,       ''''''''F

   Data 108 , 59 , 112 , 95 , 63 , 63 , 63 , 63 , 63 , 63 , 61 , 63 , 63 , 63 ,       ''''G

   Data 63 , 13 , 63 , 63 , 124 , 63 , 63 , 63 , 63 , 63 , 63 , 63 , 63 , 63 , 63,       'H

   Data 63 , 49 , 63 , 52 , 55 , 63 , 63 , 63 , 48 , 127 , 50 , 53 , 54 , 56,       ''''''I

   Data 1 , 63 , 5 , 43 , 51 , 45 , 42 , 57 , 63 , 63       ''''''''''''''''''''''''''''''J

 

    'Duże litery

  Data 0 , 0 , 0 , 5 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0,       ''''''''''K

  Data 0 , 0 , 0 , 0 , 0 , 0 , 81 , 33 , 03 , 0 , 0 , 90 , 83 , 65,       ''''''''L

  Data 87 , 64 , 0 , 0 , 67 , 88 , 68 , 69 , 36 , 35 , 0 , 0 , 0 , 86,       '''''M

  Data 70 , 84 , 82 , 37 , 0 , 0 , 78 , 66 , 72 , 71 , 89 , 94 , 0,       ''''''''N

  Data 0 , 0 , 77 , 74 , 85 , 38 , 42 , 0 , 0 , 60 , 75 , 73 , 79,       '''''''''O

  Data 41 , 40 , 0 , 0 , 62 , 63 , 76 , 58 , 80 , 0 , 0 , 0 , 0 , 34,       ''''''P

  Data 0 , 123 , 43 , 0 , 0 , 0 , 0 , 0 , 125 , 0 , 0 , 0 , 0 , 0 , 0,       '''''Q

  Data 0 , 0 , 0 , 0 , 0 , 0 , 49 , 49 , 0 , 52 , 55 , 0 , 0 , 0 , 48,       '''''R

  Data 44 , 50 , 53 , 54 , 56 , 0 , 0 , 0 , 43 , 51 , 45 , 42 , 57 , 0 , 0       'S

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

'Jak wpisać datę i czas z klawiatury:

'- dołącz klawiaturę komputerową do gniazda,

'- naciśnij Reset,

'- wpisz dzień (np 02), spacja, wpisz miesiąc, spacja, wpisz rok (np 10),

'- wpisz godzinę (np 21), spacja, wpisz minuty, spacja, wpisz skundy, spacja.

'- teraz czas czeka na wystartowanie.

'- przyciskiem P7 wystartuj czas.

'- włącznikiem W możesz ztrzymać wyświetlanie czasu (na Lcd będzie biegł lub stał).

'Wyłącznik W zatrzyma pokazywanie czasu, ale również zatrzyma alarmowanie o leku.

 

'Jak widać w programie, początkową datę  i czas możemy wpisać z klawiatury, a następnie

'o określonej godzinie wystartować czas. Z klawiatury nie można jednak wpisać godzin

'o których będą alarmy. Te czasy należy wpisać do programu i takim programem załadować procesor.

'W prgramie można dokonać wpisu dowolnej daty i czasu w przyszłości, kiedy procesor ma coś załączyć.

'Ważne jest, aby urządzenie posiadało ciągłe zasilanie.