پاسخ : سوالات مربوط به LCD های کاراکتری و گرافیکی
سلام دوستان
من برنامه یه قفل رمز دیجیتال رو نوشتم که به یک مشکل برخوردم.
از این قفل برای درب بازکن استفاده کردم
وقتی پسورد اشتباه باشه مشکلی پیش نمیاد و روی ال سی دی (کارکتری) 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 **********************************
دیدگاه