من يک برنامه نوشتم مال در بازکن تلفني ميخواستم ببينم درست نوشتمش اينم برنامه
کد php:
$regfile = "m8def.dat"
$crystal = 8000000
'$baud = 9600
Config Portd = Input
Config Portb.7 = Input
Config Portb.6 = Output
Config Portc.5 = Output
Config Portc.4 = Output
Config Portc.3 = Output
Config Debounce = 50
Config Lcdpin = Pin , Db4 = Portb.3 , Db5 = Portb.4 , Db6 = Portb.5 , Db7 = _
Portc.0 , E = Portb.2 , Rs = Portb.1
Config Lcd = 16 * 2
Cursor Off
Cls
Declare Sub Main
Dim D As Long , Seco As Byte , A As Byte , B As Byte , C As String * 8 , F As Long
Dim E As Eram Long
Sina:
Delay
Home
Lcd " Waiting"
Wait 1
Do
If Pinb.7 = 1 Then Jmp Q
Loop
Q:
Cls
Home L
Lcd " javab"
Waitms 50
Set Portb.6
Cls
If E = &HFFFFFFFF Then
jmp Here
Else
jmp Sh
End If
Here:
E = 123456
Sh:
Cls : Home : Lcd "PASSWORD ENTER=#"
B = 0 : C = "" :
Locate 2 , 1
Call Main
If E = D Then
If Pind = &B00001010 Then
Goto Bb
Else
Jmp Control
End If
Else
Cls : Home
Lcd "Wrong Password"
Reset Portb.6
Wait 2 : Cls : Home : Jmp Sina
End If
Bb:
Cls : Cursor Off : Home
Lcd "1:Change Pass"
Locate 2 , 1 : Lcd "2:Back"
Bc:
A = Pind
If Seco <= 60 And A > &B00001100 Then
Reset Portb.6
Goto Sina
'--------------------------
A = Lookup(a , Jadval)
If A = 49 Then Jmp Change
If A = 50 Then Jmp Sh
jmp Bc
Change:
Cls : Cursor Off : Home
Lcd "Type Old Pass"
Locate 2 , 1
Call Main
If E = D Then
jmp Gh
Else
Cls : Home : Lcd "Wrong Pass" : Wait 2
Reset Portb.6
jmp sina
End If
Gh:
Cls : Cursor Off : Home
Lcd "Type New Pass"
Locate 2 , 1
Call Main
E = D
jmp Bb
End
Control:
Cls
Home
Lcd " wellcome"
Wait 3
Cls
000:
Do
If Seco <= 60 And Pind < &B00001100 Then
jmp klid
Else
Reset Portb.6
jmp sina
End If
Klid:
If Pind = &B00000001 Then Goto Relay1
If Pind = &B00000010 Then Goto Relay2
If Pind = &B00000011 Then Goto Relay3
If Pind = &B00000100 Then Goto Relay1_off
If Pind = &B00000101 Then Goto Relay2_off
If Pind = &B00000110 Then Goto Relay3_off
If Pind = &B00001001 Then Goto Int_off
Loop
' LABEL LABEL LABEL LABEL LABEL LABEL LABEL LABEL LABEL LABEL LABEL LABELLABEL
'**************************************TV***************************************
Int_off:
Waitms 10
Reset Portb.6
Waitms 10
jmp sina
Relay1:
Cls
Set Portc.5
If Portc.5 = 1 Then
Locate 1 , 4
Lcd "Relay1 on"
End If
Waitms 100
jmp 0000
Relay1_off:
Cls
Reset Portc.5
If Portc.5 = 1 Then
Locate 1 , 4
Lcd "Relay1 off"
End If
Waitms 100
jmp 0000
'***************************************WASHER**********************************
Relay2:
Cls
Set Portc.4
If Portc.4 = 1 Then
Locate 1 , 3
Lcd "Relay2"
End If
Waitms 100
jmp 0000
Relay2_off:
Cls
Reset Portc.4
If Portc.4 = 1 Then
Locate 1 , 3
Lcd "Relay2 Off"
End If
Waitms 100
jmp 0000
'**************************************FAN**************************************
Relay3:
Cls
Set Portc.3
If Portc.3 = 1 Then
Locate 1 , 3
Lcd "Relay3 ON"
End If
Waitms 100
jmp 0000
Relay3_off:
Cls
Reset Portc.3
If Portc.3 = 1 Then
Locate 1 , 3
Lcd "Relay3 Off"
End If
Waitms 100
jmp 0000
End 'end program
'-----------------------------------------------------------
Main:
B = 0 : C = ""
Aa:
A = Pind
If Seco <= 60 And A > &B00001100 Then
Reset Portb.6
Goto Sina
A = Lookup(a , Jadval)
Select Case A
'----------------------
Case 48 To 57:
If B < &B00001000 Then
Incr B
Lcd String(1 , A)
C = C + String(1 , A)
End If
jmp Aa
'----------------------
Case 35:
D = Val(c)
End Select
Return
'--------------------------------------------------
Jadval:
Data 48 , 49 , 50 , 51 , 52 , 53 , 54 , 55 , 56 , 57 , 42 , 35
توضیحات برنامه
این در بازکن تلفنی طوریه که شما اول بعد جواب دادن گوشی توسط دستگاه از شما رمز پیش فرض 123456 رو میخواد با زدن کلید مربع وارد میشوید و رمز نیز قابل تغییر میباشه و چند تا رله هم داره که بعد از وارد شدن قابلیت قطع و وصل داره
توضیحات برنامه
اولش که همه پیکر بندی
اگر پین b.7 یک شد یعنی تلفن در حال زنگ زدنه و گوشی رو جواب بده
و پین b.6 یک کن تا رله وصل بشه و گوشی جواب داده بشه
در خط بعدی میگه اگر متغیر E مساوی با یک شد چون در eeprom مقدار اولیش 1 است
پرش میکنه به لیبل here و متغیر e=123456 می کنه
(اما وقتی کاربر رمز رو عوض کنه و برق مدار رو قطع کنه شرط here برقرار نمیشه و به لیبل sh پرش میکنه
و دیگه کاری به داخل e نداره
خط بعدی متغیر ها رو مقدار دهی می کنیم
و سابروتین main رو فراخونی میکنه که توضیحاتش رو در آخر میدم
اگر متغیر e=d شد
برو خط بعدی پین d هم به آی سی mt8870 وصله
اگر pind=10 شد برو به لیبل bb
ذر غیر اینصورت
برو به لیبل کنترل
در غیر اینصورت پسورد اشتباه است گوشی رو قطع کن
حالا بقیه توضیحات برنامه
وبرو به لیبل اولیه سینا
در این شرط اگر شما کلید ستاره رو بزنید به قسمت تغییر رمز میروید که شماره کلید ستاره 1010 است و به لیبل bb
مراجعه می کند و روی LCD تایپ میکنه 1 -change pass در خط بعدی 2-back و بعد میره به لیبل Bc و PINd=A میکنه
و اگر در مدت 60 ثانیه و عدد وارد شده بزرگتر از 1100 بود گوشی رو قطع میکنه و میره به لیبل sina
در غیر اینصورت میره خط بعدی متغیر A را با اعداد داخل لیبل jadval مقایسه میکند و در صورت برابر بودن با هر کدام عدد رو داخل متغیر A میریزه
اگر a=49 شد که همون 1 است برو لیبل Change
اگر a=50 شد که همون 2 است برو به لیبل sh
در غیر اینصورت اگر هر کدام از شرطها برقرار نبود به لیبل Bc برو
لیبل Change
روی LCD تایپ میشه Pass قدیمی رو از شما میخواد
فراخوانی لیبل Main
اگر E=d شد یعنی پسورد صحیح است و به لیبل GH میره
در غیر اینصورت پسورد اشتابه است گوشی تلفن قطع میشه و میره به لیبل sina
لیبل GH
از شما میخواد رمز جدید خود را وارد کنید و E=D قرار میده و میره به لیبل Bb
لیبل Control
داخل حلقه اگر در مدت 60 ثانیه و عددی کوچکتر از 1100 وارد شد برو به لیبل klid
در غیر اینصورت تلفن رو قطع کن و برو به لیبل sina
لیبل klid
در لیبل کلید هم براساس عدد وارد شده به رله مربوطه میره
سابروتین Main
متغیر های B, C رو مقدار دهی میکنه
PIND = A
اگر در مدت 60 ثانیه و مقدار A بزرگتر از 1100 شد شرط برقرار و گوشی تلفن قطع و به لیبل sina میره
در غیر اینصورت خط بعدی متغیر A رو با مقادیر داخل لیبل jadval مقایسه میکنه و در صورت برابر بودن عدد مورد نظر رو میریز داخل متغیر A
اینم PCB که خودم درست کردم و در اصل طرح کلی رو از روی این پروژه برداشتمش فقط تغییراتی کلی دادم مثلا مگا 16 رو کردم مگا 8 و جای پایه اشم کمی تغییر کرده
http://uplod.ir/sytc4oarlzvr/proje_asli.zip.htm
اینم PCB
http://uplod.ir/i8q7z00feijc/d.rar.htm
برنامه رو هم که تغییر دادم تا بشه که با رمز وارد شد و رمز رو هم تغییر داد که از روی پروژه قفل رمزدار زیر نوشتمش برای همین میگم ببینم درست نوشتمش چون مجبور بودم تغییراتی توش انجام بدم چون ماکه صفحه کلید نداریم مثل قفل رمزدار برای همین خروجی mt8870 که به Pind وصله اعداد رو به ما میده
اینم لینک در ست پروژه قفل رمز دار
http://uplod.ir/jx3sz5590fgc/1.zip.htm