سلام دوستان
من برنامه یه قفل رمز دیجیتال رو نوشتم که به یک مشکل برخوردم.
از این قفل برای درب بازکن استفاده کردم
وقتی پسورد اشتباه باشه مشکلی پیش نمیاد و روی ال سی دی erorr نشون میده اما مشکل من وقتی هست که پسورد درسته و درب باز میشه.بعد یکی دو بار زدن پسورد درست, روی ال سی دی نوشته های عجق وجق میاد.البته توی این حالت مدار کار میکنه و اگه پسورد درست باشه درب رو باز میکنه اما روی ال سی دی همون نوشته های عجق وجقه.
گفتم شاید وقتی رله فعال میشه جریان میکشه که اینجوری ال سی دی بهم میریزه.تایم فعال بودن رله رو 10 میلی ثانیه گذاشتم اما بازم وقتی رله فعال میشه همون مشکل پیش میاد.
چی کار باید بکنم ؟
اینم برنامم
من برنامه یه قفل رمز دیجیتال رو نوشتم که به یک مشکل برخوردم.
از این قفل برای درب بازکن استفاده کردم
وقتی پسورد اشتباه باشه مشکلی پیش نمیاد و روی ال سی دی erorr نشون میده اما مشکل من وقتی هست که پسورد درسته و درب باز میشه.بعد یکی دو بار زدن پسورد درست, روی ال سی دی نوشته های عجق وجق میاد.البته توی این حالت مدار کار میکنه و اگه پسورد درست باشه درب رو باز میکنه اما روی ال سی دی همون نوشته های عجق وجقه.
گفتم شاید وقتی رله فعال میشه جریان میکشه که اینجوری ال سی دی بهم میریزه.تایم فعال بودن رله رو 10 میلی ثانیه گذاشتم اما بازم وقتی رله فعال میشه همون مشکل پیش میاد.
چی کار باید بکنم ؟
اینم برنامم
کد:
'*************************** "Author: Hossein Saberi" ***************************'
$regfile = "m8def.dat"
$crystal = 1000000
'************************* Config *************************'
Config Lcdpin = Pin , Db4 = Portc.0 , Db5 = Portc.1 , Db6 = Portc.2 , Db7 = Portc.3 , E = Portc.4 , Rs = Portc.5
Config Lcd = 16 * 2
Config Portb = Output
Config Portc = Output
Config Portd = Input
Config Kbd = Portd , Debounce = 100
'************************ Dim **********************************
Dim A As Word
Dim B As Word
Dim C As Byte
Dim D As Byte
Dim K As Word
Dim L As Word
Dim Q As Byte
Dim U As Byte
Dim Y As Byte
Dim Z As Byte
Dim H As Word
Dim L2 As Word
Dim L3 As Word
Dim W As Byte
'********************
Readeeprom L3 , 0
'********************* Main ***********************
Main:
'***** Wait 30 Minute *****
Cls
If Q = 3 And Y = 1 Then
Cls
Lcd "--==( Lock )==--"
Wait 1
Cls
Lcd " Wait 30 Minute "
Wait 2
Display Off
Wait 1800
Q = 0
U = 0
Y = 0
Display On
Cls
Lcd "Insert Password "
Wait 1
Goto Main
End If
'***** Wait 15 Minute *****
Cls
If Q = 3 And U = 1 Then
Cls
Lcd "--==( Lock )==--"
Wait 1
Cls
Lcd " Wait 15 Minute "
Wait 2
Display Off
Wait 900
Q = 0
U = 0
Y = Y + 1
Display On
Cls
Lcd "Insert Password "
Wait 1
Goto Main
End If
'***** Wait 5 Minute *****
Cls
If Q = 3 Then
U = U + 1
Cls
Lcd "--==( Lock )==--"
Wait 1
Cls
Lcd " Wait 5 Minute "
Wait 2
Display Off
Wait 300
Q = 0
Display On
Cls
Lcd "Insert Password "
Wait 1
Goto Main
End If
'********************
Main1:
Cls
Locate 1 , 1
Lcd "*=CP"
Locate 1 , 10
Lcd "#=Clr"
Locate 2 , 1
Lcd "Password="
Locate 2 , 11
'********************
For Z = 0 To 2
Cursor Blink
Do
Do
A = Getkbd()
'***** Display OFF *****
If W = 0 Then
Display Off
End If
'***********************
Loop Until A < 16
Select Case A
Case 0 : A = 1
Case 1 : A = 2
Case 2 : A = 3
Case 4 : A = 4
Case 5 : A = 5
Case 6 : A = 6
Case 13 : A = 0
Case 8 : A = 7
Case 9 : A = 8
Case 10 : A = 9
Case 12 : A = 10
Case 14 : A = 11
Case Else A = 100
End Select
Loop Until A < 100
'***** On Display *****
If A <> 100 Then
Display On
End If
'***** Change Password *****
If A = 10 Then
A = 100
Cls
Lcd "Change Password"
Wait 1
Goto Change
End If
'***** CLR *****
If A = 11 Then
A = 100
Goto Main
End If
'***** 1number *****
If Z = 0 Then
A = A * 100
B = A
W = W + 1
Locate 2 , 11
Lcd "*"
Waitms 200
End If
'***** 2number *****
If Z = 1 Then
A = A * 10
C = A
W = W + 1
Locate 2 , 12
Lcd "*"
Waitms 200
End If
'***** 3number *****
If Z = 2 Then
D = A
W = W + 1
Locate 2 , 13
Lcd "*"
Waitms 200
End If
Next Z
'***** Sum Number *****
K = B + C
L = K + D
'***** Check Pass *****
If L3 = 65535 Then
H = 123
Elseif L3 <> 0 Then
H = L3
End If
'******************** Open/Erorr ***********************
If L = H Then
U = 0
Y = 0
Q = 0
W = 0
Cls
Set Portb.0
Waitms 10
Reset Portb.0
Cls
Goto Main1
Else
Q = Q + 1
W = 0
Cls
Lcd "Erorr"
Wait 1
Goto Main
End If
End
'******************************* Change ************************
Change:
B = 0
C = 0
D = 0
K = 0
L = 0
Cls
Locate 1 , 1
Lcd "*=Exit"
Locate 1 , 10
Lcd "#=Clr"
Locate 2 , 1
Lcd "Old Pass="
Locate 2 , 11
Cursor Blink
'********************
For Z = 0 To 2
Cursor Blink
Do
Do
A = Getkbd()
Loop Until A < 16
Select Case A
Case 0 : A = 1
Case 1 : A = 2
Case 2 : A = 3
Case 4 : A = 4
Case 5 : A = 5
Case 6 : A = 6
Case 13 : A = 0
Case 8 : A = 7
Case 9 : A = 8
Case 10 : A = 9
Case 12 : A = 10
Case 14 : A = 11
Case Else A = 100
End Select
Loop Until A < 100
'***** Exit Change Pass *****
If A = 10 Then
A = 100
W = 0
Cls
Lcd "Exit Change Pass"
Wait 1
Goto Main
End If
'***** CLs *****
If A = 11 Then
A = 100
Goto Change
End If
'***** 1number *****
If Z = 0 Then
A = A * 100
B = A
Locate 2 , 11
Lcd "*"
Waitms 200
End If
'***** 2number *****
If Z = 1 Then
A = A * 10
C = A
Locate 2 , 12
Lcd "*"
Waitms 200
End If
'***** 3number *****
If Z = 2 Then
D = A
Locate 2 , 13
Lcd "*"
Waitms 200
End If
Next Z
'***** Sum Number *****
K = B + C
L = K + D
'***** Check Pass *****
If L3 = 65535 Then
H = 123
Elseif L3 <> 0 Then
H = L3
End If
'********** Check Mach Pass **********
If L = H Then
Cls
Lcd "Mach Pass"
Waitms 500
Goto New
Else
Cls
Lcd "Erorr"
Waitms 500
Cls
Lcd "Agin"
Waitms 500
Goto Change
End If
'****************************** new ***********************
New:
B = 0
C = 0
D = 0
K = 0
L = 0
Cls
Locate 1 , 1
Lcd "*=Exit"
Locate 1 , 10
Lcd "#=Clr"
Locate 2 , 1
Lcd "New Pass="
Locate 2 , 11
Cursor Blink
'********************
For Z = 0 To 2
Cursor Blink
Do
Do
A = Getkbd()
Loop Until A < 16
Select Case A
Case 0 : A = 1
Case 1 : A = 2
Case 2 : A = 3
Case 4 : A = 4
Case 5 : A = 5
Case 6 : A = 6
Case 13 : A = 0
Case 8 : A = 7
Case 9 : A = 8
Case 10 : A = 9
Case 12 : A = 10
Case 14 : A = 11
Case Else A = 100
End Select
Loop Until A < 100
'***** Exit Change Pass *****
If A = 10 Then
A = 100
W = 0
Cls
Lcd "Exit Change Pass"
Wait 1
Goto Main
End If
'***** CLs *****
If A = 11 Then
A = 100
Goto New
End If
'***** 1number *****
If Z = 0 Then
A = A * 100
B = A
Locate 2 , 11
Lcd "*"
Waitms 200
End If
'***** 2number *****
If Z = 1 Then
A = A * 10
C = A
Locate 2 , 12
Lcd "*"
Waitms 200
End If
'***** 3number *****
If Z = 2 Then
D = A
Locate 2 , 13
Lcd "*"
Waitms 200
End If
Next Z
'***** Sum Number *****
K = B + C
L2 = K + D
'***** Check Pass *****
If L3 = 65535 Then
H = 123
Elseif L3 <> 0 Then
H = L3
End If
'********************************* New2 **********************
New2:
B = 0
C = 0
D = 0
K = 0
L = 0
Cls
Locate 1 , 1
Lcd "*=Exit"
Locate 1 , 10
Lcd "#=Clr"
Locate 2 , 1
Lcd "Repet Pass="
Locate 2 , 13
Cursor Blink
'********************
For Z = 0 To 2
Cursor Blink
Do
Do
A = Getkbd()
Loop Until A < 16
Select Case A
Case 0 : A = 1
Case 1 : A = 2
Case 2 : A = 3
Case 4 : A = 4
Case 5 : A = 5
Case 6 : A = 6
Case 13 : A = 0
Case 8 : A = 7
Case 9 : A = 8
Case 10 : A = 9
Case 12 : A = 10
Case 14 : A = 11
Case Else A = 100
End Select
Loop Until A < 100
'***** Exit Change Pass *****
If A = 10 Then
A = 100
W = 0
Cls
Lcd "Exit Change Pass"
Wait 1
Goto Main
End If
'***** CLs *****
If A = 11 Then
A = 100
Goto New2
End If
'***** 1Number *****
If Z = 0 Then
A = A * 100
B = A
Locate 2 , 13
Lcd "*"
Waitms 200
End If
'***** 2Number *****
If Z = 1 Then
A = A * 10
C = A
Locate 2 , 14
Lcd "*"
Waitms 200
End If
'***** 3Number *****
If Z = 2 Then
D = A
Locate 2 , 15
Lcd "*"
Waitms 200
End If
Next Z
'***** Sum Number *****
K = B + C
L3 = K + D
'***** Check Pass *****
If L3 = 65535 Then
H = 123
Elseif L3 <> 0 Then
H = L3
End If
'********** Check Mach New Pass **********
If L2 = L3 Then
Writeeeprom L3 , 0
Cls
Lcd "Mach Pass"
Waitms 500
Cls
Lcd "CHNAGE PASSWORD"
Wait 2
Goto Main
Else
Cls
Lcd "Erorr"
Waitms 500
Cls
Lcd "Donot Mach Pass"
Waitms 500
Cls
Lcd "Agin"
Waitms 500
Goto New
End If
'************************************** END PROGRAM **********************************




دیدگاه