Bascom



'PorownajHasloZeEprom.bas

'Program do nauki. Służy do pokazania, jak wpisać hasło do EEPROM z klawiatury AT.

'Jeśli hasło jest zgodne z hasłem w programie, załącza Portc.2.

'Hasło wpisane z klawiatury zostanie zapamiętane, nawet po wyłączeniu procesora (chyba, że tego nie chcemy).

'Hasło w programie znajduje się w zmiennych: B, C, D, E, F,  i na końcu w A.

'Po wpisaniu hasła przysiskamy przycisk w Portb.1 i równocześnie naciskamy Enter.

'Usłyszymy sygnał dźwiękowy i zostanie załączony Portc.2.

'Jeśli hasło jest błędne, zostaniemy powiadomieni na Lcd.

'Prcesor Atmega8.

'Pamięć zajęta w 17%.

'Opracował Henryk Wydmuch.

'Fusebit A997 ustawiony na kwarc zewnętrzny 1111.

 

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

 $crystal = 16000000                                        'Zastosujemy kwarc zewnętrzny 16MHz.

 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.

 

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

 

 Config Pinc.2 = Output                                     'Tu może być przekaźnik, lub inne urządzenie.

 Set Portc.2                                                '

 Config Pind.5 = Output                                     'Tu jest głośnik.

 Set Portd.5                                                '

 Config Pinb.1 = Input                                      'Tu jest przycisk do masy.

 Set Portb.1                                                '

 Config Pinc.3 = Output                                     'Tu może być przekaźnik, lub inne urządzenie.

 Set Portc.3                                                '

 

 Dim A As String * 9                                        'Deklarujemy zmienną A, jako tekstową z dziewięcioma  miejsami.

 Dim B As String * 1                                        'Deklarujemy zmienną B, jako tekstową z jednym miejscem.

 Dim C As String * 1                                        '

 Dim D As String * 1                                        '

 Dim E As String * 1                                        '

 Dim F As String * 1                                        '                                       '

 

 Deflcdchar 0 , 4 , 4 , 6 , 12 , 4 , 4 , 14 , 32            'ł. Konstrujemy tu: Ctrl+L.

 Deflcdchar 1 , 32 , 32 , 30 , 2 , 30 , 18 , 31 , 2         'ą.

 Deflcdchar 2 , 4 , 8 , 30 , 16 , 30 , 2 , 30 , 32          'ś.

 Deflcdchar 3 , 32 , 14 , 17 , 31 , 16 , 14 , 2 , 32       

  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.

    Select Case Kodklaw                                     'Przeglądaj zmienną Kodklaw.

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

    Case 97 : C = Chr(97)                                   'Jeśli przyciśnięto klawisz 977(ASCI), to D=a.

    Case 109 : D = Chr(109)                                 'Jeśli przyciśnięto klawisz 109(ASCI), to D=m.

    Case 49 : E = Chr(49)                                   'Jeśli przyciśnięto klawisz 49(ASCI), to D=1.

    Case 50 : F = Chr(50)                                   'Jeśli przyciśnięto klawisz 50(ASCI), to D=2.

    'Tu, w A jest hasło: saama112

    A = B + C + C + D + C + E + E + F                       'Zmienna A zawiera poszzczególne znaki zawarte w zmiennych B, C, D, E, F.

    Writeeeprom A , 1                                       'Zapisz zmienną A w pamięci EEPROM pod adresem 1.

    End Select                                              'Koniec przeglądu Kodklaw.

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

 If Kodklaw = 127 Then                                      'Jeśli naciśniemy nr 127 (Delete), to...

 Cls                                                        'Wyczyść Lcd.

 End If                                                     'Koniec warunku.

 If Kodklaw = 13 Then                                       'Jeśli naciśniemy nr 13 (Enter), to...

 Lowerline                                                  'Wejdź do drugiej linii.

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

 Gosub Art                                                  'Skocz do podprogramu Art.

 End If                                                     'Koniec warunków.

 End If                                                     '

 Loop                                                       'Powtórz pętlę,

 End                                                        'Koniec pętli.

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

 Art:                                                       'Podprogram.

  Readeeprom A , 1                                          'Odczytaj z pamięci EEPROM, adres 1.

  Lcd "Has" ; Chr(0) ; "o: " ; A                            'Wyświetl zawartośc zmiennej A (hasło).

  Select Case A                                             'Przeglądaj zmienną A.

  Case "saama112"                                           'Jeśli hasło brzmi: saama112, to...

  Portc.2 = 0                                               'Załącz Portc.2.

  Gosub Zapomnij                                            'Skocz do podprogramu. Opis poniżej.

  Sound Portd.5 , 300 , 550                                 'Sygnał dźwiękowy o załączeniu (300-czas, 550-ton, większa cyfra=niższy ton).

  Case Else : Cls                                           'W przeciwnym razie wyczyść Lcd.

  Lcd "Has" ; Chr(0) ; "o" ; " b" ; Chr(0) ; Chr(3) ; "dne!"       'Lcd: Hasło błędne!.

  End Select                                                'Koniec przeglądania zmiennej A.

  Return                                                    'Wróć do pętli.

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

'Poniższy podprogram powoduje, że wpisane, prawidłowe hasło uruchomi Portc.2,

'a następnie zostanie zapomniane. Ponowne oruchomienie Portc.2 jest możliwe,

'po ponownym wpisaniu hasła. Jeśli z tego podprogramu zrezygnujemy,

'raz wpisane hasło zostanie zapamiętane nawet po wyłączeniu procesora.

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

 Zapomnij:                                                  'Podprogram Zapomnij.

  A = ""                                                    'Wyczyść zmienną A.

  Writeeeprom A , 1                                         'Zapisz do EEPROM pustą zmienną.

  Return                                                    'Wróć do podprogramu Art.

 

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

'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