Advertisement
Guest User

Untitled

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