'ZapiszipokazCzas

Bascom



'ZapiszipokazCzas.bas

'Program do nauki.

'Pokazuje o jakim czasie od załączenia procesora naciśnięto jakiś klawisz.

'Jeśli to będzie klawisz "s", to czas ten zostanie zapisany do Eprom i zapamiętany nawet po wyłączeniu procesora.

'Jeśli chcemy sprawdzić, kiedy naciśnięto "s", to robimy to klawiszem F1.

'Oczywiście, może to być inny klawisz, wpisany do Select Case.

'Nie zapomnij dołączyć, w miejsce zewnętrznego kwarcu procesora, kwarcu zegarkowego 32768Hz.

'Uwaga!, po włączeniu prosesora, zegar wystartuje dopiero po naciśnięciu dowolnego klawisza.

'Co było do udowodnienia.

'Prcesor Atmega8.

'Pamięć zajęta w 20%.

'Opracował Henryk Wydmuch.

'Fusebit A997 ustawiony na oscylator wewnętrzny 0100.

 

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

 $crystal = 8000000                                         'Zastosujemy oscylator wewnętrzny 8MHz.

 Config Lcd = 16 * 2

 Config Lcdpin = Pin , Db4 = Portd.2 , Db5 = Portd.3 , Db6 = Portd.4 , Db7 = Portd.6 , 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.

       Config Pinc.4 = Input                                'Przycisk Reset.

       Set Portc.4                                          '

       Config Pinc.2 = Output                               'Port wykonawczy, np. przekaźnik.

       Set Portc.2                                          '

       Config Pind.5 = Output                               'Głośnik.

       Reset Portd.5                                        '

       Date$ = "02/08/06"                                   'Od tej daty liczy w przód.

       Time$ = "00:00:00"                                   'Początkowy czas po włączeniu procesora.

       Enable Interrupts                                    'Odblokuj przerwania.

 

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

 Dim Be As String * 8                                       'Deklarujemy zmienną B, jako tekstową z ośmioma miejscami.                                       '

 Dim Es As String * 1                                       '

 

  Display Off                                               'Wyłącz Lcd.

  Waitms 500                                                'Poczekaj 500mS.

  Display On                                                'Włącz Lcd.

  Cls                                                       'Czyść Lcd.

 

 Do                                                         'Pętla Do.

 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...

 Lcd Chr(kodklaw)                                           'Pokaż, co wpisujemy.

 Lowerline                                                  'W drugiej linii.

 Lcd Time$                                                  'Wyświetl czas.

    Select Case Kodklaw                                     'Przeglądaj zmienną Kodklaw.

    Case 115 : Es = Chr(115)                                'Jeśli przyciśnięto klawisz 115(ASCI), to Es=s.

    Writeeeprom Es , 1                                      'Zapisz teraz tę zmienną do EEPROM, pod adres 1.

    Es = ""                                                 'Po zapisaniu, wyczyść zawartość zmiennej.

    Be = Time$                                              'Do zmiennej Be wpisz czas.

    Writeeeprom Be , 2                                      'Zapisz zmienną Be do Eprom pod adres 2.

    Be = ""                                                 'Czyść zmienną.

    End Select                                              'Koniec przeglądania Kodklaw.

  End If                                                    'Koniec warunku, gdy Kodklaw > 0...

    If Kodklaw = 127 Then                                   'Jeśli w zmiennej pojawi się nr 127 (Delete), to...

    Cls                                                     'Wyczyść Lcd.

    End If                                                  'Koniec warunku.

 If Kodklaw = 13 Then                                       'Jeśli w zmiennej pojawi się nr 13 (Enter), to...

 Lowerline                                                  'Przejdź do drugiej linii LCD.

 End If                                                     '

    If Kodklaw = 5 Then                                     'Jeśli naciśnięto F1...

    Cls                                                     ' Czyść Lcd.

    Readeeprom Es , 1                                       'Odczytaj z EEPROM zmienną Es pod adresem 1.

    Locate 2 , 1                                            'W drugiej linii, na pierwszym miejscu...

    Lcd Es                                                  'Wyświetl zawartość Es.

    Readeeprom Be , 2                                       'Odczytaj zmienną Be w Eprom, adres 2 .

    Locate 2 , 8                                            'W drugiej linii, na 8 miejscu...

    Lcd Be                                                  'Wyświetl zawartość zmiennej Be (czas).

    End If                                                  'Koniec warunków.

 

 Loop                                                       'Powtórz pętlę,

 End                                                        'Koniec pętli.

 

 

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

'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 , 0,       '''''''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