Advertisement
Guest User

Untitled

a guest
Jun 6th, 2017
180
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. '########################################
  2. '###         ZAMEK Z SZYFREM          ###
  3. '###   Autorzy: Sebastian Smoroński   ###
  4. '###            Stanisław Szwagrzyk   ###
  5. '###          II/UP/KRAKOW            ###
  6. '###              2017                ###
  7. '########################################
  8.  
  9. 'INSTRUKACJA:
  10. 'Na początku program sprawdza czy w pamięci eeprom zapisany jest szyfr
  11. 'Jeśli jest zapisany to prosi użytkownika o wprowadzenie szyfru
  12. 'Jesli szyfr nie został wcześniej ustawione program prosi o podanei długości
  13. '   szyfru, wprowadzenie szyfru i jego potwierdzenie
  14. 'Aby ustawić nowy szyfr należy wprowadzić poprawne hasło, odczekać aż zamek się
  15. '   zamknie a następnie wprowadzić tajny szyfr "1111111111111111" (16x1) i ustawić nowy szyfr
  16.  
  17. $sim
  18. $regfile = "m32def.dat"
  19. $crystal = 4000000
  20. $hwstack = 40
  21. $swstack = 16
  22. $framesize = 32
  23.  
  24.  
  25. Deflcdchar 0 , 12 , 4 , 6 , 12 , 4 , 4 , 14 , 32            
  26. Deflcdchar 1 , 2 , 4 , 14 , 16 , 14 , 1 , 30 , 32          
  27. Deflcdchar 2 , 2 , 4 , 14 , 16 , 16 , 17 , 14 , 32          
  28. Deflcdchar 3 , 32 , 32 , 14 , 17 , 31 , 16 , 14 , 4        
  29. Deflcdchar 4 , 32 , 32 , 15 , 17 , 17 , 15 , 1 , 14         'g
  30. Deflcdchar 5 , 2 , 4 , 31 , 2 , 4 , 8 , 31 , 32            
  31. Deflcdchar 6 , 2 , 4 , 14 , 17 , 17 , 17 , 14 , 32          
  32. Deflcdchar 7 , 4 , 32 , 31 , 2 , 4 , 8 , 31 , 32            
  33.  
  34. Config Porta = Input
  35. Porta = &B00000101
  36. Pina.0 = 1
  37. Pina.1 = 1
  38. Pina.2 = 1
  39. Pina.3 = 1
  40. Config Portb = Output
  41.  
  42. Config Lcd = 16 * 2
  43. Config Lcdpin = Pin , Db4 = Portb.4 , Db5 = Portb.5 , Db6 = Portb.6 , Db7 = Portb.7 , E = Portb.3 , Rs = Portb.2
  44.  
  45. Dim Dlugosc As Byte
  46. Dim Stan As Byte
  47. Dim Flaga As Bit
  48. Dim I As Byte
  49. Dim J As Byte
  50. Dim Tajnyszyfriterator As Byte
  51.  
  52. Dim Szyfr(9) As Byte
  53. Dim Szyfruser(9) As Byte
  54. Dim Tajnyszyfr(16) As Byte
  55. Dim Tajnyszyfruser(16) As Byte
  56. '-------------------------------------------
  57. Const Wsk_flaga = &H00
  58. Const Wsk_1 = &H01
  59. Const Wsk_2 = &H02
  60. Const Wsk_3 = &H03
  61. Const Wsk_4 = &H04
  62. Const Wsk_5 = &H05
  63. Const Wsk_6 = &H06
  64. Const Wsk_7 = &H07
  65. Const Wsk_8 = &H08
  66. Const Wsk_9 = &H09
  67. Const Wsk_dlugosc = &H0A
  68.  
  69. Dim Szyfr_pamiec(9) As Byte
  70. Szyfr_pamiec(1) = Wsk_1
  71. Szyfr_pamiec(2) = Wsk_2
  72. Szyfr_pamiec(3) = Wsk_3
  73. Szyfr_pamiec(4) = Wsk_4
  74. Szyfr_pamiec(5) = Wsk_5
  75. Szyfr_pamiec(6) = Wsk_6
  76. Szyfr_pamiec(7) = Wsk_7
  77. Szyfr_pamiec(8) = Wsk_8
  78. Szyfr_pamiec(9) = Wsk_9
  79.  
  80. Dim Flaga_eprom As Byte
  81. Flaga_eprom = 1
  82.  
  83. '--------------------------------------------
  84.  
  85. Tajnyszyfr(1) = 1
  86. Tajnyszyfr(2) = 1
  87. Tajnyszyfr(3) = 1
  88. Tajnyszyfr(4) = 1
  89. Tajnyszyfr(5) = 1
  90. Tajnyszyfr(6) = 1
  91. Tajnyszyfr(7) = 1
  92. Tajnyszyfr(8) = 1
  93. Tajnyszyfr(9) = 1
  94. Tajnyszyfr(10) = 1
  95. Tajnyszyfr(11) = 1
  96. Tajnyszyfr(12) = 1
  97. Tajnyszyfr(13) = 1
  98. Tajnyszyfr(14) = 1
  99. Tajnyszyfr(15) = 1
  100. Tajnyszyfr(16) = 1
  101.  
  102. Stan = 0
  103. Dlugosc = 0
  104. Flaga = 0
  105. ' tablice w bascomie zaczynają się od 1
  106. I = 1
  107. Tajnyszyfriterator = 8
  108.  
  109. Declare Sub Wprowadz_dlugosc
  110. Declare Sub Wprowadz_szyfr1
  111. Declare Sub Wprowadz_szyfr2
  112. Declare Sub Sprawdz_szyfr
  113. Declare Sub Wprowadz_szyfr_otwieranie
  114. Declare Sub Sprawdz_szyfr_otwieranie
  115. Declare Sub Zmiana_szyfru
  116.  
  117. Dim Pom As Byte
  118. Dim Pom2 As Byte
  119. Pom2 = 16
  120. '-----------------------------------------------------
  121. ' if eprom == 0 to stan = 0
  122. ' jezeli w epromie cos jest to stan = 3 i uzupelniamy tablice "szyfr" zawartoscia epromu
  123.  
  124.  
  125. 'zapisane_halo to flaga z adresu pamieci w ktorym trzymam info o tym czy haslojest zapisane w pamieci,
  126. ' jesli 1 to zapisane
  127.  
  128. Dim Zapisane_haslo As Byte
  129. Readeeprom Zapisane_haslo , Wsk_flaga
  130.  
  131. If Zapisane_haslo = 1 Then
  132.    Stan = 3
  133.    Tajnyszyfriterator = 8
  134.    Readeeprom Dlugosc , Wsk_dlugosc
  135.    Print Dlugosc
  136.    I = 1
  137.  
  138.    For J = 1 To 9
  139.       Readeeprom Szyfr(j) , Szyfr_pamiec(j)
  140.       Print Szyfr(j)
  141.    Next
  142. Else
  143.    Stan = 0
  144. End If
  145. '-------------------------------------------------------
  146.  
  147. ' aby zmienic haslo nalezy najpierw podac poprawny szyfr, a nastepnie podac tajny szyfr
  148.  
  149. ' main
  150. Do
  151.    Main:
  152.    Pom = Dlugosc + 1
  153.  
  154.    If Tajnyszyfriterator = 17 Then Call Zmiana_szyfru
  155.  
  156.    If Stan = 0 Then Call Wprowadz_dlugosc
  157.    If Stan = 1 Then Call Wprowadz_szyfr1
  158.    If Stan = 2 Then Call Wprowadz_szyfr2
  159.    If Stan = 3 Then Call Wprowadz_szyfr_otwieranie
  160.  
  161.    Print "dlugosc=" ; Dlugosc ; " i=" ; I ; " TajnySzyfrIterator=" ; Tajnyszyfriterator
  162.  
  163. Loop
  164. End
  165.  
  166. ' wprowadzanie dlugosci
  167. Sub Wprowadz_dlugosc
  168.  
  169.    If Flaga = 0 Then
  170.       Cls
  171.       Lcd " Jak d" ; Chr(0) ; "u" ; Chr(4) ; "i szyfr?"
  172.       Lowerline
  173.       Lcd "  D" ; Chr(0) ; "u" ; Chr(4) ; "o" ; Chr(1) ; Chr(2) ; ": "
  174.       Flaga = 1
  175.    End If
  176.  
  177.    If Pina.0 = 0 Then
  178.       bitwait pina.0, set
  179.       Cls
  180.       Lcd " D" ; Chr(0) ; "u" ; Chr(4) ; "o" ; Chr(1) ; Chr(2) ; " szyfru "
  181.       Lowerline
  182.       Lcd " Pomi" ; Chr(3) ; "dzy 4 a 8 "
  183.       Wait 5
  184.       Flaga = 0
  185.       Goto Main
  186.    End If
  187.  
  188.    If Pina.1 = 0 Then
  189.       Bitwait Pina.1 , Set
  190.       Cls
  191.       Lcd " D" ; Chr(0) ; "u" ; Chr(4) ; "o" ; Chr(1) ; Chr(2) ; " szyfru "
  192.       Lowerline
  193.       Lcd " Pomi" ; Chr(3) ; "dzy 4 a 8 "
  194.       Wait 5
  195.       Flaga = 0
  196.       Goto Main
  197.    End If
  198.  
  199.    If Pina.2 = 0 Then
  200.       Bitwait Pina.2 , Set
  201.       Cls
  202.       Lcd " D" ; Chr(0) ; "u" ; Chr(4) ; "o" ; Chr(1) ; Chr(2) ; " szyfru "
  203.       Lowerline
  204.       Lcd " Pomi" ; Chr(3) ; "dzy 4 a 8 "
  205.       Wait 5
  206.       Flaga = 0
  207.       Goto Main
  208.    End If
  209.  
  210.    If Pina.3 = 0 Then
  211.       Bitwait Pina.3 , Set
  212.       Lcd "4"
  213.       Dlugosc = 5
  214.       Stan = 1
  215.       Flaga = 0
  216.    End If
  217.  
  218.  
  219.  
  220.  
  221. End Sub
  222.  
  223. ' wprowadzanie szyfru
  224. Sub Wprowadz_szyfr1
  225.  
  226.    If Flaga = 0 Then
  227.       Cls
  228.       Lcd "  Podaj szyfr"
  229.       Lowerline
  230.       Lcd "Szyfr: "
  231.       Flaga = 1
  232.    End If
  233.  
  234.    If I = Dlugosc Then
  235.  
  236.       ' sprawdzanie czy podany przez uzytkownika szyfr przypadkiem
  237.       ' nie pokrywa się z tajnymszyfrem
  238.       ' jakby się pokrywał to zmiana hasła byłaby niemożliwa
  239.  
  240.       ' jeden
  241.  
  242.       Dim Spr2 As Bit
  243.       Dim Jedenkrotszyoddlugosc As Byte
  244.       Jedenkrotszyoddlugosc = Dlugosc - 1
  245.  
  246.       Spr2 = 0
  247.  
  248.       For J = 1 To Jedenkrotszyoddlugosc
  249.          If Tajnyszyfr(j) <> Szyfr(j) Then
  250.             Spr2 = 1
  251.             Exit For
  252.          Else
  253.             Spr2 = 0
  254.          End If
  255.       Next J
  256.  
  257.       Dim Dlugosc2 As Byte
  258.       Dlugosc2 = Jedenkrotszyoddlugosc * 2
  259.  
  260.       Dim J2 As Byte
  261.       J2 = Dlugosc
  262.  
  263.       If Dlugosc2 <= 16 And Spr2 <> 0 Then
  264.          Spr2 = 0
  265.          For J = 1 To Jedenkrotszyoddlugosc
  266.             If Tajnyszyfr(j2) <> Szyfr(j) Then
  267.                Spr2 = 1
  268.             Else
  269.                Spr2 = 0
  270.             End If
  271.             Incr J2
  272.          Next J
  273.       End If
  274.  
  275.  
  276.       Dlugosc2 = Jedenkrotszyoddlugosc * 3
  277.       J2 = Dlugosc * 2
  278.       J2 = J2 - 1
  279.  
  280.       If Dlugosc2 <= 16 And Spr2 <> 0 Then
  281.          Spr2 = 0
  282.          For J = 1 To Jedenkrotszyoddlugosc
  283.             If Tajnyszyfr(j2) <> Szyfr(j) Then
  284.                Spr2 = 1
  285.                Exit For
  286.             Else
  287.                Spr2 = 0
  288.             End If
  289.             Incr J2
  290.          Next J
  291.       End If
  292.  
  293.  
  294.       Dlugosc2 = Jedenkrotszyoddlugosc * 4
  295.       J2 = Dlugosc * 3
  296.       J2 = J2 - 2
  297.  
  298.       If Dlugosc2 <= 16 And Spr2 <> 0 Then
  299.          Spr2 = 0
  300.          For J = 1 To Jedenkrotszyoddlugosc
  301.             If Tajnyszyfr(j2) <> Szyfr(j) Then
  302.                Spr2 = 1
  303.                Exit For
  304.             Else
  305.                Spr2 = 0
  306.             End If
  307.             Incr J2
  308.          Next J
  309.       End If
  310.  
  311.       ' jezeli nie pokrywają się to idz do potwierdzenia
  312.       If Spr2 = 1 Then
  313.          Stan = 2
  314.          Flaga = 0
  315.          I = 1
  316.          Goto Main
  317.       ' jezeli pokrywają się to wróć to ustawiania długosci
  318.       Else
  319.          Stan = 0
  320.          Flaga = 0
  321.          I = 1
  322.          Lcd "  wprowadzono   "
  323.          Lowerline
  324.          Lcd "  zaj" ; Chr(3) ; "ty szyfr  "
  325.          Wait 5
  326.          Goto Main
  327.       End If
  328.  
  329.    End If
  330.  
  331.    If Pina.0 = 0 Then
  332.       Bitwait Pina.0 , Set
  333.       Lcd "#"
  334.       Szyfr(i) = 1
  335.       Incr I
  336.    End If
  337.  
  338.    If Pina.1 = 0 Then
  339.       Bitwait Pina.1 , Set
  340.       Lcd "#"
  341.       Szyfr(i) = 2
  342.       Incr I
  343.    End If
  344.  
  345.    If Pina.2 = 0 Then
  346.       Bitwait Pina.2 , Set
  347.       Lcd "#"
  348.       Szyfr(i) = 3
  349.       Incr I
  350.    End If
  351.  
  352.    If Pina.3 = 0 Then
  353.       Bitwait Pina.3 , Set
  354.       Lcd "#"
  355.       Szyfr(i) = 4
  356.       Incr I
  357.    End If
  358.  
  359.  
  360.  
  361.  
  362. End Sub
  363.  
  364. ' potwierdzanie szyfru
  365. Sub Wprowadz_szyfr2
  366.  
  367.    If Flaga = 0 Then
  368.       Flaga = 1
  369.       Cls
  370.       Lcd " Potwierd" ; Chr(5) ; " szyfr"
  371.       Lowerline
  372.       Lcd "Szyfr: "
  373.       Flaga = 1
  374.    End If
  375.  
  376.    If I = Dlugosc Then
  377.       Stan = 2
  378.       Flaga = 0
  379.       I = 1
  380.       Call Sprawdz_szyfr
  381.    End If
  382.  
  383.    If Pina.0 = 0 Then
  384.       Bitwait Pina.0 , Set
  385.       Lcd "#"
  386.       Szyfruser(i) = 1
  387.       Incr I
  388.    End If
  389.  
  390.    If Pina.1 = 0 Then
  391.       Bitwait Pina.1 , Set
  392.       Lcd "#"
  393.       Szyfruser(i) = 2
  394.       Incr I
  395.    End If
  396.  
  397.    If Pina.2 = 0 Then
  398.       Bitwait Pina.2 , Set
  399.       Lcd "#"
  400.       Szyfruser(i) = 3
  401.       Incr I
  402.    End If
  403.  
  404.    If Pina.3 = 0 Then
  405.       Bitwait Pina.3 , Set
  406.       Lcd "#"
  407.       Szyfruser(i) = 4
  408.       Incr I
  409.    End If
  410.  
  411.  
  412.  
  413. End Sub
  414.  
  415. ' sprawdzanie czy podany szyfr zgadza sie z jego potwierdzeniem
  416. Sub Sprawdz_szyfr
  417.  
  418.    Flaga = 0
  419.    Jedenkrotszyoddlugosc = Dlugosc - 1
  420.  
  421.    For J = 1 To Jedenkrotszyoddlugosc
  422.       If Szyfr(j) <> Szyfruser(j) Then
  423.          Flaga = 0
  424.          Exit For
  425.       Else
  426.          Flaga = 1
  427.       End If
  428.    Next J
  429.  
  430.  
  431.    If Flaga = 0 Then
  432.       Cls
  433.       Lcd " Podano r" ; Chr(6) ; Chr(7) ; "ne "
  434.       Lowerline
  435.       Lcd "     szyfry!    "
  436.       Wait 5
  437.       Stan = 0
  438.       Flaga = 0
  439.       I = 1
  440.    Else
  441.       Cls
  442.       Lcd "  Szyfr zosta" ; Chr(0) ; "  "
  443.       Lowerline
  444.       Lcd "   ustawiony!   "
  445.       '------------------------------------------------------------------
  446.       ' Tutaj zrobić zapis tablicy "Szyfr" do EPROM!!!'
  447.  
  448.       Tajnyszyfriterator = 8
  449.  
  450.       For I = 1 To 9
  451.          Writeeeprom Szyfr(i) , Szyfr_pamiec(i)
  452.       Next
  453.  
  454.       Writeeeprom Flaga_eprom , Wsk_flaga
  455.       Writeeeprom Dlugosc , Wsk_dlugosc
  456.       '-----------------------------------------------------------------
  457.       Wait 5
  458.       Stan = 3
  459.       Flaga = 0
  460.       I = 1
  461.    End If
  462.  
  463. End Sub
  464.  
  465. ' domyslny tryb pracy (otwieranie sejfu jezeli szyfr jest poprawny)
  466. Sub Wprowadz_szyfr_otwieranie
  467.  
  468.    If Flaga = 0 Then
  469.       Cls
  470.       Lcd "  Podaj szyfr"
  471.       Lowerline
  472.       Lcd "Szyfr: "
  473.       Flaga = 1
  474.    End If
  475.  
  476.    If I = Dlugosc Then
  477.       Stan = 2
  478.       Flaga = 0
  479.       I = 1
  480.       Call Sprawdz_szyfr_otwieranie
  481.    End If
  482.  
  483.    If Pina.0 = 0 Then
  484.       Bitwait Pina.0 , Set
  485.       Lcd "#"
  486.       Szyfruser(i) = 1
  487.       Incr I
  488.       Tajnyszyfruser(tajnyszyfriterator) = 1
  489.       Incr Tajnyszyfriterator
  490.    End If
  491.  
  492.    If Pina.1 = 0 Then
  493.       Bitwait Pina.1 , Set
  494.       Lcd "#"
  495.       Szyfruser(i) = 2
  496.       Incr I
  497.       Tajnyszyfruser(tajnyszyfriterator) = 2
  498.       Incr Tajnyszyfriterator
  499.    End If
  500.  
  501.    If Pina.2 = 0 Then
  502.       Bitwait Pina.2 , Set
  503.       Lcd "#"
  504.       Szyfruser(i) = 3
  505.       Incr I
  506.       Tajnyszyfruser(tajnyszyfriterator) = 3
  507.       Incr Tajnyszyfriterator
  508.    End If
  509.  
  510.    If Pina.3 = 0 Then
  511.       Bitwait Pina.3 , Set
  512.       Lcd "#"
  513.       Szyfruser(i) = 4
  514.       Incr I
  515.       Tajnyszyfruser(tajnyszyfriterator) = 4
  516.       Incr Tajnyszyfriterator
  517.    End If
  518.  
  519.  
  520.  
  521. End Sub
  522.  
  523. ' sprawdzanie czy podany przez uzytkownika szyfr jest poprawny
  524. Sub Sprawdz_szyfr_otwieranie
  525.  
  526.    Flaga = 0
  527.    Jedenkrotszyoddlugosc = Dlugosc - 1
  528.  
  529.    For J = 1 To Jedenkrotszyoddlugosc
  530.       If Szyfr(j) <> Szyfruser(j) Then
  531.          Flaga = 0
  532.          Exit For
  533.       Else
  534.          Flaga = 1
  535.       End If
  536.    Next J
  537.  
  538.    If Flaga = 1 Then
  539.       Cls
  540.       Lcd "   Otwarte :)   "
  541.       Wait 60
  542.       Stan = 3
  543.       Flaga = 0
  544.       I = 1
  545.       Tajnyszyfriterator = 1
  546.    Else
  547.  
  548.  
  549.       Dim Spr As Bit
  550.       Dim Jedenmniej As Byte
  551.       Jedenmniej = Tajnyszyfriterator - 1
  552.  
  553.       For J = 1 To Jedenmniej
  554.          If Tajnyszyfruser(j) <> Tajnyszyfr(j) Then
  555.             Spr = 0
  556.             Exit For
  557.          Else
  558.             Spr = 1
  559.          End If
  560.       Next J
  561.  
  562.       If Spr = 0 Then
  563.          ' reset zawartosci tablicy tajnyszyfruser coby przez przypadek nie udało się zmienić szyfru
  564.          Tajnyszyfruser(1) = 0
  565.          Tajnyszyfruser(2) = 0
  566.          Tajnyszyfruser(3) = 0
  567.          Tajnyszyfruser(4) = 0
  568.          Tajnyszyfruser(5) = 0
  569.          Tajnyszyfruser(6) = 0
  570.          Tajnyszyfruser(7) = 0
  571.          Tajnyszyfruser(8) = 0
  572.          Tajnyszyfruser(9) = 0
  573.          Tajnyszyfruser(10) = 0
  574.          Tajnyszyfruser(11) = 0
  575.          Tajnyszyfruser(12) = 0
  576.          Tajnyszyfruser(13) = 0
  577.          Tajnyszyfruser(14) = 0
  578.          Tajnyszyfruser(15) = 0
  579.          Tajnyszyfruser(16) = 0
  580.  
  581.          Tajnyszyfriterator = 8
  582.       End If
  583.  
  584.       Cls
  585.       Lcd "  Podano b" ; Chr(0) ; Chr(3) ; "dny  "
  586.       Lowerline
  587.       Lcd "     szyfr!   "
  588.       Wait 5
  589.       Stan = 3
  590.       Flaga = 0
  591.       I = 1
  592.    End If
  593.  
  594. End Sub
  595.  
  596. ' sprawdzanie czy ukryty szyfr jest poprawny
  597. Sub Zmiana_szyfru
  598.  
  599.    Tajnyszyfriterator = 8
  600.    Flaga = 0
  601.  
  602.    For J = 1 To Pom2
  603.       If Tajnyszyfr(j) <> Tajnyszyfruser(j) Then
  604.          Flaga = 0
  605.          Exit For
  606.       Else
  607.          Flaga = 1
  608.       End If
  609.    Next J
  610.  
  611.  
  612.    If Flaga = 1 Then
  613.       Cls
  614.       Lcd "  wprowadzono   "
  615.       Lowerline
  616.       Lcd "  tajny szyfr   "
  617.       Wait 4
  618.       Flaga = 0
  619.       I = 1
  620.       Stan = 0
  621.  
  622.       ' reset tablicy tajnyszyfruser, aby przez przypadek nie udało się zmienić
  623.       ' szyfry bez podania prawidłowego szyfru
  624.       Tajnyszyfruser(1) = 0
  625.       Tajnyszyfruser(2) = 0
  626.       Tajnyszyfruser(3) = 0
  627.       Tajnyszyfruser(4) = 0
  628.       Tajnyszyfruser(5) = 0
  629.       Tajnyszyfruser(6) = 0
  630.       Tajnyszyfruser(7) = 0
  631.       Tajnyszyfruser(8) = 0
  632.       Tajnyszyfruser(9) = 0
  633.       Tajnyszyfruser(10) = 0
  634.       Tajnyszyfruser(11) = 0
  635.       Tajnyszyfruser(12) = 0
  636.       Tajnyszyfruser(13) = 0
  637.       Tajnyszyfruser(14) = 0
  638.       Tajnyszyfruser(15) = 0
  639.       Tajnyszyfruser(16) = 0
  640.  
  641.       Tajnyszyfriterator = 8
  642.  
  643.       Goto Main
  644.    End If
  645.  
  646. End Sub
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement