Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- '########################################
- '### ZAMEK Z SZYFREM ###
- '### Autorzy: Sebastian Smoroński ###
- '### Stanisław Szwagrzyk ###
- '### II/UP/KRAKOW ###
- '### 2017 ###
- '########################################
- 'INSTRUKACJA:
- 'Na początku program sprawdza czy w pamięci eeprom zapisany jest szyfr
- 'Jeśli jest zapisany to prosi użytkownika o wprowadzenie szyfru
- 'Jesli szyfr nie został wcześniej ustawione program prosi o podanei długości
- ' szyfru, wprowadzenie szyfru i jego potwierdzenie
- 'Aby ustawić nowy szyfr należy wprowadzić poprawne hasło, odczekać aż zamek się
- ' zamknie a następnie wprowadzić tajny szyfr "1111111111111111" (16x1) i ustawić nowy szyfr
- $sim
- $regfile = "m32def.dat"
- $crystal = 4000000
- $hwstack = 40
- $swstack = 16
- $framesize = 32
- Deflcdchar 0 , 12 , 4 , 6 , 12 , 4 , 4 , 14 , 32 'ł
- Deflcdchar 1 , 2 , 4 , 14 , 16 , 14 , 1 , 30 , 32 'ś
- Deflcdchar 2 , 2 , 4 , 14 , 16 , 16 , 17 , 14 , 32 'ć
- Deflcdchar 3 , 32 , 32 , 14 , 17 , 31 , 16 , 14 , 4 'ę
- Deflcdchar 4 , 32 , 32 , 15 , 17 , 17 , 15 , 1 , 14 'g
- Deflcdchar 5 , 2 , 4 , 31 , 2 , 4 , 8 , 31 , 32 'ź
- Deflcdchar 6 , 2 , 4 , 14 , 17 , 17 , 17 , 14 , 32 'ó
- Deflcdchar 7 , 4 , 32 , 31 , 2 , 4 , 8 , 31 , 32 'ż
- Config Porta = Input
- Porta = &B00000101
- Pina.0 = 1
- Pina.1 = 1
- Pina.2 = 1
- Pina.3 = 1
- Config Portb = Output
- Config Lcd = 16 * 2
- Config Lcdpin = Pin , Db4 = Portb.4 , Db5 = Portb.5 , Db6 = Portb.6 , Db7 = Portb.7 , E = Portb.3 , Rs = Portb.2
- Dim Dlugosc As Byte
- Dim Stan As Byte
- Dim Flaga As Bit
- Dim I As Byte
- Dim J As Byte
- Dim Tajnyszyfriterator As Byte
- Dim Szyfr(9) As Byte
- Dim Szyfruser(9) As Byte
- Dim Tajnyszyfr(16) As Byte
- Dim Tajnyszyfruser(16) As Byte
- '-------------------------------------------
- Const Wsk_flaga = &H00
- Const Wsk_1 = &H01
- Const Wsk_2 = &H02
- Const Wsk_3 = &H03
- Const Wsk_4 = &H04
- Const Wsk_5 = &H05
- Const Wsk_6 = &H06
- Const Wsk_7 = &H07
- Const Wsk_8 = &H08
- Const Wsk_9 = &H09
- Const Wsk_dlugosc = &H0A
- Dim Szyfr_pamiec(9) As Byte
- Szyfr_pamiec(1) = Wsk_1
- Szyfr_pamiec(2) = Wsk_2
- Szyfr_pamiec(3) = Wsk_3
- Szyfr_pamiec(4) = Wsk_4
- Szyfr_pamiec(5) = Wsk_5
- Szyfr_pamiec(6) = Wsk_6
- Szyfr_pamiec(7) = Wsk_7
- Szyfr_pamiec(8) = Wsk_8
- Szyfr_pamiec(9) = Wsk_9
- Dim Flaga_eprom As Byte
- Flaga_eprom = 1
- '--------------------------------------------
- Tajnyszyfr(1) = 1
- Tajnyszyfr(2) = 1
- Tajnyszyfr(3) = 1
- Tajnyszyfr(4) = 1
- Tajnyszyfr(5) = 1
- Tajnyszyfr(6) = 1
- Tajnyszyfr(7) = 1
- Tajnyszyfr(8) = 1
- Tajnyszyfr(9) = 1
- Tajnyszyfr(10) = 1
- Tajnyszyfr(11) = 1
- Tajnyszyfr(12) = 1
- Tajnyszyfr(13) = 1
- Tajnyszyfr(14) = 1
- Tajnyszyfr(15) = 1
- Tajnyszyfr(16) = 1
- Stan = 0
- Dlugosc = 0
- Flaga = 0
- ' tablice w bascomie zaczynają się od 1
- I = 1
- Tajnyszyfriterator = 8
- Declare Sub Wprowadz_dlugosc
- Declare Sub Wprowadz_szyfr1
- Declare Sub Wprowadz_szyfr2
- Declare Sub Sprawdz_szyfr
- Declare Sub Wprowadz_szyfr_otwieranie
- Declare Sub Sprawdz_szyfr_otwieranie
- Declare Sub Zmiana_szyfru
- Dim Pom As Byte
- Dim Pom2 As Byte
- Pom2 = 16
- '-----------------------------------------------------
- ' if eprom == 0 to stan = 0
- ' jezeli w epromie cos jest to stan = 3 i uzupelniamy tablice "szyfr" zawartoscia epromu
- 'zapisane_halo to flaga z adresu pamieci w ktorym trzymam info o tym czy haslojest zapisane w pamieci,
- ' jesli 1 to zapisane
- Dim Zapisane_haslo As Byte
- Readeeprom Zapisane_haslo , Wsk_flaga
- If Zapisane_haslo = 1 Then
- Stan = 3
- Tajnyszyfriterator = 8
- Readeeprom Dlugosc , Wsk_dlugosc
- Print Dlugosc
- I = 1
- For J = 1 To 9
- Readeeprom Szyfr(j) , Szyfr_pamiec(j)
- Print Szyfr(j)
- Next
- Else
- Stan = 0
- End If
- '-------------------------------------------------------
- ' aby zmienic haslo nalezy najpierw podac poprawny szyfr, a nastepnie podac tajny szyfr
- ' main
- Do
- Main:
- Pom = Dlugosc + 1
- If Tajnyszyfriterator = 17 Then Call Zmiana_szyfru
- If Stan = 0 Then Call Wprowadz_dlugosc
- If Stan = 1 Then Call Wprowadz_szyfr1
- If Stan = 2 Then Call Wprowadz_szyfr2
- If Stan = 3 Then Call Wprowadz_szyfr_otwieranie
- Print "dlugosc=" ; Dlugosc ; " i=" ; I ; " TajnySzyfrIterator=" ; Tajnyszyfriterator
- Loop
- End
- ' wprowadzanie dlugosci
- Sub Wprowadz_dlugosc
- If Flaga = 0 Then
- Cls
- Lcd " Jak d" ; Chr(0) ; "u" ; Chr(4) ; "i szyfr?"
- Lowerline
- Lcd " D" ; Chr(0) ; "u" ; Chr(4) ; "o" ; Chr(1) ; Chr(2) ; ": "
- Flaga = 1
- End If
- If Pina.0 = 0 Then
- bitwait pina.0, set
- Cls
- Lcd " D" ; Chr(0) ; "u" ; Chr(4) ; "o" ; Chr(1) ; Chr(2) ; " szyfru "
- Lowerline
- Lcd " Pomi" ; Chr(3) ; "dzy 4 a 8 "
- Wait 5
- Flaga = 0
- Goto Main
- End If
- If Pina.1 = 0 Then
- Bitwait Pina.1 , Set
- Cls
- Lcd " D" ; Chr(0) ; "u" ; Chr(4) ; "o" ; Chr(1) ; Chr(2) ; " szyfru "
- Lowerline
- Lcd " Pomi" ; Chr(3) ; "dzy 4 a 8 "
- Wait 5
- Flaga = 0
- Goto Main
- End If
- If Pina.2 = 0 Then
- Bitwait Pina.2 , Set
- Cls
- Lcd " D" ; Chr(0) ; "u" ; Chr(4) ; "o" ; Chr(1) ; Chr(2) ; " szyfru "
- Lowerline
- Lcd " Pomi" ; Chr(3) ; "dzy 4 a 8 "
- Wait 5
- Flaga = 0
- Goto Main
- End If
- If Pina.3 = 0 Then
- Bitwait Pina.3 , Set
- Lcd "4"
- Dlugosc = 5
- Stan = 1
- Flaga = 0
- End If
- End Sub
- ' wprowadzanie szyfru
- Sub Wprowadz_szyfr1
- If Flaga = 0 Then
- Cls
- Lcd " Podaj szyfr"
- Lowerline
- Lcd "Szyfr: "
- Flaga = 1
- End If
- If I = Dlugosc Then
- ' sprawdzanie czy podany przez uzytkownika szyfr przypadkiem
- ' nie pokrywa się z tajnymszyfrem
- ' jakby się pokrywał to zmiana hasła byłaby niemożliwa
- ' jeden
- Dim Spr2 As Bit
- Dim Jedenkrotszyoddlugosc As Byte
- Jedenkrotszyoddlugosc = Dlugosc - 1
- Spr2 = 0
- For J = 1 To Jedenkrotszyoddlugosc
- If Tajnyszyfr(j) <> Szyfr(j) Then
- Spr2 = 1
- Exit For
- Else
- Spr2 = 0
- End If
- Next J
- Dim Dlugosc2 As Byte
- Dlugosc2 = Jedenkrotszyoddlugosc * 2
- Dim J2 As Byte
- J2 = Dlugosc
- If Dlugosc2 <= 16 And Spr2 <> 0 Then
- Spr2 = 0
- For J = 1 To Jedenkrotszyoddlugosc
- If Tajnyszyfr(j2) <> Szyfr(j) Then
- Spr2 = 1
- Else
- Spr2 = 0
- End If
- Incr J2
- Next J
- End If
- Dlugosc2 = Jedenkrotszyoddlugosc * 3
- J2 = Dlugosc * 2
- J2 = J2 - 1
- If Dlugosc2 <= 16 And Spr2 <> 0 Then
- Spr2 = 0
- For J = 1 To Jedenkrotszyoddlugosc
- If Tajnyszyfr(j2) <> Szyfr(j) Then
- Spr2 = 1
- Exit For
- Else
- Spr2 = 0
- End If
- Incr J2
- Next J
- End If
- Dlugosc2 = Jedenkrotszyoddlugosc * 4
- J2 = Dlugosc * 3
- J2 = J2 - 2
- If Dlugosc2 <= 16 And Spr2 <> 0 Then
- Spr2 = 0
- For J = 1 To Jedenkrotszyoddlugosc
- If Tajnyszyfr(j2) <> Szyfr(j) Then
- Spr2 = 1
- Exit For
- Else
- Spr2 = 0
- End If
- Incr J2
- Next J
- End If
- ' jezeli nie pokrywają się to idz do potwierdzenia
- If Spr2 = 1 Then
- Stan = 2
- Flaga = 0
- I = 1
- Goto Main
- ' jezeli pokrywają się to wróć to ustawiania długosci
- Else
- Stan = 0
- Flaga = 0
- I = 1
- Lcd " wprowadzono "
- Lowerline
- Lcd " zaj" ; Chr(3) ; "ty szyfr "
- Wait 5
- Goto Main
- End If
- End If
- If Pina.0 = 0 Then
- Bitwait Pina.0 , Set
- Lcd "#"
- Szyfr(i) = 1
- Incr I
- End If
- If Pina.1 = 0 Then
- Bitwait Pina.1 , Set
- Lcd "#"
- Szyfr(i) = 2
- Incr I
- End If
- If Pina.2 = 0 Then
- Bitwait Pina.2 , Set
- Lcd "#"
- Szyfr(i) = 3
- Incr I
- End If
- If Pina.3 = 0 Then
- Bitwait Pina.3 , Set
- Lcd "#"
- Szyfr(i) = 4
- Incr I
- End If
- End Sub
- ' potwierdzanie szyfru
- Sub Wprowadz_szyfr2
- If Flaga = 0 Then
- Flaga = 1
- Cls
- Lcd " Potwierd" ; Chr(5) ; " szyfr"
- Lowerline
- Lcd "Szyfr: "
- Flaga = 1
- End If
- If I = Dlugosc Then
- Stan = 2
- Flaga = 0
- I = 1
- Call Sprawdz_szyfr
- End If
- If Pina.0 = 0 Then
- Bitwait Pina.0 , Set
- Lcd "#"
- Szyfruser(i) = 1
- Incr I
- End If
- If Pina.1 = 0 Then
- Bitwait Pina.1 , Set
- Lcd "#"
- Szyfruser(i) = 2
- Incr I
- End If
- If Pina.2 = 0 Then
- Bitwait Pina.2 , Set
- Lcd "#"
- Szyfruser(i) = 3
- Incr I
- End If
- If Pina.3 = 0 Then
- Bitwait Pina.3 , Set
- Lcd "#"
- Szyfruser(i) = 4
- Incr I
- End If
- End Sub
- ' sprawdzanie czy podany szyfr zgadza sie z jego potwierdzeniem
- Sub Sprawdz_szyfr
- Flaga = 0
- Jedenkrotszyoddlugosc = Dlugosc - 1
- For J = 1 To Jedenkrotszyoddlugosc
- If Szyfr(j) <> Szyfruser(j) Then
- Flaga = 0
- Exit For
- Else
- Flaga = 1
- End If
- Next J
- If Flaga = 0 Then
- Cls
- Lcd " Podano r" ; Chr(6) ; Chr(7) ; "ne "
- Lowerline
- Lcd " szyfry! "
- Wait 5
- Stan = 0
- Flaga = 0
- I = 1
- Else
- Cls
- Lcd " Szyfr zosta" ; Chr(0) ; " "
- Lowerline
- Lcd " ustawiony! "
- '------------------------------------------------------------------
- ' Tutaj zrobić zapis tablicy "Szyfr" do EPROM!!!'
- Tajnyszyfriterator = 8
- For I = 1 To 9
- Writeeeprom Szyfr(i) , Szyfr_pamiec(i)
- Next
- Writeeeprom Flaga_eprom , Wsk_flaga
- Writeeeprom Dlugosc , Wsk_dlugosc
- '-----------------------------------------------------------------
- Wait 5
- Stan = 3
- Flaga = 0
- I = 1
- End If
- End Sub
- ' domyslny tryb pracy (otwieranie sejfu jezeli szyfr jest poprawny)
- Sub Wprowadz_szyfr_otwieranie
- If Flaga = 0 Then
- Cls
- Lcd " Podaj szyfr"
- Lowerline
- Lcd "Szyfr: "
- Flaga = 1
- End If
- If I = Dlugosc Then
- Stan = 2
- Flaga = 0
- I = 1
- Call Sprawdz_szyfr_otwieranie
- End If
- If Pina.0 = 0 Then
- Bitwait Pina.0 , Set
- Lcd "#"
- Szyfruser(i) = 1
- Incr I
- Tajnyszyfruser(tajnyszyfriterator) = 1
- Incr Tajnyszyfriterator
- End If
- If Pina.1 = 0 Then
- Bitwait Pina.1 , Set
- Lcd "#"
- Szyfruser(i) = 2
- Incr I
- Tajnyszyfruser(tajnyszyfriterator) = 2
- Incr Tajnyszyfriterator
- End If
- If Pina.2 = 0 Then
- Bitwait Pina.2 , Set
- Lcd "#"
- Szyfruser(i) = 3
- Incr I
- Tajnyszyfruser(tajnyszyfriterator) = 3
- Incr Tajnyszyfriterator
- End If
- If Pina.3 = 0 Then
- Bitwait Pina.3 , Set
- Lcd "#"
- Szyfruser(i) = 4
- Incr I
- Tajnyszyfruser(tajnyszyfriterator) = 4
- Incr Tajnyszyfriterator
- End If
- End Sub
- ' sprawdzanie czy podany przez uzytkownika szyfr jest poprawny
- Sub Sprawdz_szyfr_otwieranie
- Flaga = 0
- Jedenkrotszyoddlugosc = Dlugosc - 1
- For J = 1 To Jedenkrotszyoddlugosc
- If Szyfr(j) <> Szyfruser(j) Then
- Flaga = 0
- Exit For
- Else
- Flaga = 1
- End If
- Next J
- If Flaga = 1 Then
- Cls
- Lcd " Otwarte :) "
- Wait 60
- Stan = 3
- Flaga = 0
- I = 1
- Tajnyszyfriterator = 1
- Else
- Dim Spr As Bit
- Dim Jedenmniej As Byte
- Jedenmniej = Tajnyszyfriterator - 1
- For J = 1 To Jedenmniej
- If Tajnyszyfruser(j) <> Tajnyszyfr(j) Then
- Spr = 0
- Exit For
- Else
- Spr = 1
- End If
- Next J
- If Spr = 0 Then
- ' reset zawartosci tablicy tajnyszyfruser coby przez przypadek nie udało się zmienić szyfru
- Tajnyszyfruser(1) = 0
- Tajnyszyfruser(2) = 0
- Tajnyszyfruser(3) = 0
- Tajnyszyfruser(4) = 0
- Tajnyszyfruser(5) = 0
- Tajnyszyfruser(6) = 0
- Tajnyszyfruser(7) = 0
- Tajnyszyfruser(8) = 0
- Tajnyszyfruser(9) = 0
- Tajnyszyfruser(10) = 0
- Tajnyszyfruser(11) = 0
- Tajnyszyfruser(12) = 0
- Tajnyszyfruser(13) = 0
- Tajnyszyfruser(14) = 0
- Tajnyszyfruser(15) = 0
- Tajnyszyfruser(16) = 0
- Tajnyszyfriterator = 8
- End If
- Cls
- Lcd " Podano b" ; Chr(0) ; Chr(3) ; "dny "
- Lowerline
- Lcd " szyfr! "
- Wait 5
- Stan = 3
- Flaga = 0
- I = 1
- End If
- End Sub
- ' sprawdzanie czy ukryty szyfr jest poprawny
- Sub Zmiana_szyfru
- Tajnyszyfriterator = 8
- Flaga = 0
- For J = 1 To Pom2
- If Tajnyszyfr(j) <> Tajnyszyfruser(j) Then
- Flaga = 0
- Exit For
- Else
- Flaga = 1
- End If
- Next J
- If Flaga = 1 Then
- Cls
- Lcd " wprowadzono "
- Lowerline
- Lcd " tajny szyfr "
- Wait 4
- Flaga = 0
- I = 1
- Stan = 0
- ' reset tablicy tajnyszyfruser, aby przez przypadek nie udało się zmienić
- ' szyfry bez podania prawidłowego szyfru
- Tajnyszyfruser(1) = 0
- Tajnyszyfruser(2) = 0
- Tajnyszyfruser(3) = 0
- Tajnyszyfruser(4) = 0
- Tajnyszyfruser(5) = 0
- Tajnyszyfruser(6) = 0
- Tajnyszyfruser(7) = 0
- Tajnyszyfruser(8) = 0
- Tajnyszyfruser(9) = 0
- Tajnyszyfruser(10) = 0
- Tajnyszyfruser(11) = 0
- Tajnyszyfruser(12) = 0
- Tajnyszyfruser(13) = 0
- Tajnyszyfruser(14) = 0
- Tajnyszyfruser(15) = 0
- Tajnyszyfruser(16) = 0
- Tajnyszyfriterator = 8
- Goto Main
- End If
- End Sub
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement