سلام دوستان . من تخصصم زبان C هست .بسکام هم تا حدودی بلدم ولی نمیدونم چطوری باید فایل eeprom ازش گرفت . یکی از دوستان یه پروژه ی دزدگیر با سنسور PIR ( که زنگ میزنه به خط موبایل ) سفارش داده ، منم چون برنامشو آماده داشتم براش درستش کردم . فقط نمیدونم فایل eeprom چطوری از این برنامه بگیرم .
لطفا کمکم کنید . برنامش هم اینه :
لطفا کمکم کنید . برنامش هم اینه :
کد:
$regfile = "m16def.dat"
$crystal = 8000000 'Internal RC
$hwstack = 64
$swstack = 64
$framesize = 64
'LCD
Config Lcdpin = Pin , Db4 = Pinb.4 , Db5 = Pinb.5 , Db6 = Pinb.6 , Db7 = _
Pinb.7 , E = Pinb.2 , Rs = Pinb.0
Config Lcd = 16 * 2
Config Portb.1 = Output
Portb.1 = 0
Cls : Home : Cursor Off
'Back Space Symbol
Deflcdchar 0 , 32 , 4 , 12 , 31 , 12 , 4 , 32 , 32
'Keypad
Config Kbd = Porta
'I/O
Config Portd.5 = Output 'Active
Config Pind.6 = Output 'Relay
Config Pind.0 = Output 'Default
Config Pind.7 = Output 'Speaker
Config Portd.6 = Output
Config Pind.2 = Input
Ddrc.7 = 1
Portc.7 = 0
Ddrd.2 = 0
Portd.2 = 1
Ddrc.0 = 0
Portc.0 = 1
Ddrc.1 = 0
Portc.1 = 1
Ddrc.2 = 0
Portc.2 = 1
Ddrc.3 = 0
Portc.3 = 1
Ddrc.4 = 0
Portc.4 = 1
Ddrc.5 = 0
Portc.5 = 1
Enable Interrupts
Disable Int0
'Aliases
Relay Alias Portd.0 'we Can Get From D1 Or Porta.0 D2 And
Speaker Alias Pind.7
Speaker1 Alias Pind.5
Default Alias Pind.2
'Var
Dim Digits As Byte , Key As Byte , Result As Byte , Num As String * 4
Dim Pass(8) As String * 1 , Pass1(8) As String * 1 , Pass2(8) As String * 1
Dim Pass_eeprom(8) As Eram String * 1 , Rcv(8) As String * 1
Dim Temp As Byte , Sel As Byte
Dim Mobile(11) As Eram String * 1
Dim Mobile1(11) As String * 1
'Subroutines
Declare Sub Main
Declare Sub Pre
Declare Sub Default_pass
Declare Sub Load2ram
Declare Sub Getpass
Declare Sub Check
Declare Sub Change
Declare Sub Menu
Declare Sub Change_pass
Declare Sub Confirm
Declare Sub Check1
Declare Sub Dozdgir
'Declare Sub Cleardisp(byval Sel As Byte)
'Function
Declare Function Is_num(byval Num As String) As Byte
'Main Prog Start Here:
Call Main
End
'_______________________________________________________________________________
'Main Sub, Check Default Key Status & Call Other Sub's
Sub Main
Sound Speaker , 120 , 20 'Startup Sound
Call Pre
If Default = 0 Then Call Default_pass
Call Load2ram
Call Getpass
End Sub
'_______________________________________________________________________________
'Set Default Password (11111111)
Sub Default_pass
Sound Speaker , 120 , 30
'Clear Pass
For Temp = 1 To 8
Pass_eeprom(temp) = "1"
Waitms 20
Next Temp
Sound Speaker , 120 , 30
'Clear tel
Mobile(1) = "0"
Waitms 20
Mobile(2) = "9"
Waitms 20
Mobile(3) = "3"
Waitms 20
Mobile(4) = "5"
Waitms 20
Mobile(5) = "4"
Waitms 20
Mobile(6) = "1"
Waitms 20
Mobile(7) = "9"
Waitms 20
Mobile(8) = "9"
Waitms 20
Mobile(9) = "9"
Waitms 20
Mobile(10) = "2"
Waitms 20
Mobile(11) = "1"
Waitms 20
Cursor Off
Cls : Home : Lcd "tel=091494400**"
Lowerline : Lcd "Pass=11111111"
Sound Speaker , 120 , 60
Waitms 1500
End Sub
'_______________________________________________________________________________
'Load Pass to SRAM
Sub Load2ram
For Temp = 1 To 8
Pass(temp) = Pass_eeprom(temp)
Waitms 20
Next Temp
For Temp = 1 To 11
Mobile1(temp) = Mobile(temp)
Waitms 20
Next Temp
End Sub
'_______________________________________________________________________________
'Get Password
Sub Getpass
Inja:
Cls : Home : Lcd "Password? Cls=*" ; Chr(0)
Home L : Cursor Blink
Sound Speaker , 120 , 60
Digits = 0
Waitms 500
Do
If Pinc.0 = 0 Or Pinc.1 = 0 Or Pinc.2 = 0 Or Pinc.3 = 0 Or Pinc.4 = 0 Or Pinc.5 = 0 Then Call Dozdgir
Key = Getkbd()
Num = Lookupstr(key , Decode)
If Num = "Cls" Then Call Getpass
If Is_num(num) = 1 Then
Sound Speaker , 120 , 50
Sound Speaker , 120 , 40
Incr Digits
Locate 2 , Digits : Lcd Num
Rcv(digits) = Num
If Digits = 8 Then 'Pass Entered
Call Check
If Result <> 8 Then
'Error Pass
Sound Speaker , 120 , 80
Cls : Home : Lcd "Error!"
Cursor Noblink
Waitms 500
Call Getpass
Else
'Successful Pass
Call Menu
End If
End If
Waitms 300
End If
Loop
End Sub
'_______________________________________________________________________________
'Check Pressed Key Is A Number(0-9)? If Yes Is-num = 1 In No Is_num=0
Function Is_num(byval Num As String) As Byte
If Num = "0" Or Num = "1" Or Num = "2" Or Num = "3" Or Num = "4" _
Or Num = "5" Or Num = "6" Or Num = "7" Or Num = "8" Or Num = "9" then
Is_num = 1
Else
Is_num = 0
End If
End Function
'_______________________________________________________________________________
'Password Checker
Sub Check
Result = 0
For Temp = 1 To 8
If Rcv(temp) = Pass(temp) Then Incr Result
Next Temp
End Sub
'_______________________________________________________________________________
'Sub Menu (Open Door Or Cahnge pass)
Sub Menu
Cls : Home : Cursor Noblink : Lcd " Exit=#"
Lowerline : Lcd "2=Change tel and pas"
Sound Speaker , 120 , 100
Sound Speaker , 120 , 80
Sound Speaker , 120 , 60
Waitms 500
Do
Key = Getkbd()
Num = Lookupstr(key , Decode)
If Num = "1" Then
Toggle Relay
If Relay = 0 Then
Sound Speaker , 120 , 20
Else
Sound Speaker , 120 , 40
End If
Waitms 500
End If
If Num = "Exit" Then Call Getpass
If Num = "2" Then Call Change_pass
Loop
End Sub
'_______________________________________________________________________________
'Change Password
Sub Change_pass
Cls : Home : Lcd "Cls=* Exit=# " ; Chr(0)
Lowerline : Lcd "tel=F1 pas=F2"
Sound Speaker , 120 , 60
Digits = 0
Waitms 500
Do
Key = Getkbd()
Num = Lookupstr(key , Decode)
If Num = "Cls" Then Call Change_pass
If Num = "Exit" Then Call Getpass
If Num = "b" Then
Cls : Home : Lcd "CHANGE PASWORD"
Do
Key = Getkbd()
Num = Lookupstr(key , Decode)
If Is_num(num) = 1 Then
Sound Speaker , 120 , 50
Sound Speaker , 120 , 40
Incr Digits
Pass1(digits) = Num
Locate 2 , Digits : Lcd "*"
Waitms 300
If Digits = 8 Then Call Confirm
End If
Loop
End If
'chang tel number
If Num = "a"then
Waitms 200
Cls : Home : Lcd "CHANGE TELNUM"
Do
Key = Getkbd()
Num = Lookupstr(key , Decode)
If Is_num(num) = 1 Then
Sound Speaker , 120 , 50
Sound Speaker , 120 , 40
Incr Digits
Mobile1(digits) = Num
Mobile(digits) = Num
Locate 2 , Digits : Lcd Num
Waitms 300
If Digits = 11 Then Call Change_pass
End If
Loop
End If
Loop
End Sub
'_______________________________________________________________________________
'Confirm Password
Sub Confirm
Digits = 0
Cls : Home : Lcd "Confirm: Cls=" ; Chr(0)
Sound Speaker , 120 , 60
Home L
Waitms 500
Do
Key = Getkbd()
Num = Lookupstr(key , Decode)
If Num = "Cls" Then Call Confirm
If Is_num(num) = 1 Then
Sound Speaker , 120 , 50
Sound Speaker , 120 , 40
Incr Digits
Pass2(digits) = Num
Locate 2 , Digits : Lcd "*"
Waitms 300
If Digits = 8 Then
Call Check1
Cursor Noblink
If Result = 8 Then
Cls : Home : Lcd "Pass Changed!"
Sound Speaker , 120 , 100
Sound Speaker , 120 , 80
Sound Speaker , 120 , 60
For Temp = 1 To 8
Pass_eeprom(temp) = Pass1(temp)
Waitms 20
Next Temp
Call Load2ram
Call Getpass
Else
Sound Speaker , 120 , 80
Cls : Home : Lcd "Error!"
Waitms 500
Call Change_pass
End If
End If
End If
Loop
End Sub
'_______________________________________________________________________________
'Confirm Pass Checker
Sub Check1
Result = 0
For Temp = 1 To 8
If Pass1(temp) = Pass2(temp) Then Incr Result
Next Temp
End Sub
'_______________________________________________________________________________
'Pre Load
Sub Pre
Cls
Cursor Off
Home : Lcd " hello"
Lowerline
Lcd " Security Lock"
Wait 1
Cls : Home : Lcd "Ahmad Mohamadi"
Waitms 500
Lowerline
Lcd "Software Ver:1.0"
Waitms 500
End Sub
'_______________________________________________________________________________
'Keypad Decode Data Table
Decode:
Data "1" , "4" , "7" , "Exit"
Data "2" , "5" , "8" , "0"
Data "3" , "6" , "9" , "cls"
Data "a" , "b" , "c" , "d"
'______________________________________________________________________________
Dozdgir:
Cls : Home : Lcd "Calling..."
For Temp = 1 To 11
Locate 2 , Temp : Lcd Mobile1(temp)
Next Temp
Set Portd.6
Waitms 1000
For Temp = 1 To 11
Digits = Val(mobile1(temp))
If Digits = 0 Then Digits = 10
For Sel = 1 To Digits
Reset Portd.6
Waitms 65
Set Portd.6
Waitms 40
Next Sel
Waitms 1000
Next Temp
Set Portd.6
Portc.7 = 1
Sound Speaker1 , 131 , 637 'C3(1/16)
Sound Speaker1 , 65 , 1274 'C2(1/16)
Sound Speaker1 , 92 , 901 'Fis2(1/16)
Sound Speaker1 , 65 , 1274 'C2(1/16)
Sound Speaker1 , 131 , 637 'C3(1/16)
Sound Speaker1 , 65 , 1274 'C2(1/16)
Sound Speaker1 , 92 , 901 'Fis2(1/16)
Sound Speaker1 , 65 , 1274 'C2(1/16)
Sound Speaker1 , 117 , 715 'Ais2(1/16)
Sound Speaker1 , 65 , 1274 'C2(1/16)
Sound Speaker1 , 92 , 901 'Fis2(1/16)
Sound Speaker1 , 65 , 1274 'C2(1/16)
Sound Speaker1 , 104 , 803 'Gis2(1/16)
Sound Speaker1 , 65 , 1274 'C2(1/16)
Sound Speaker1 , 92 , 901 'Fis2(1/16)
Sound Speaker1 , 65 , 1274 'C2(1/16)
Sound Speaker1 , 98 , 850 'G2(1/16)
Sound Speaker1 , 65 , 1274 'C2(1/16)
Sound Speaker1 , 92 , 901 'Fis2(1/16)
Sound Speaker1 , 65 , 1274 'C2(1/16)
Sound Speaker1 , 98 , 850 'G2(1/16)
Sound Speaker1 , 65 , 1274 'C2(1/16)
Sound Speaker1 , 92 , 901 'Fis2(1/16)
Sound Speaker1 , 65 , 1274 'C2(1/16)
Sound Speaker1 , 98 , 850 'G2(1/16)
Sound Speaker1 , 65 , 1274 'C2(1/16)
Sound Speaker1 , 92 , 901 'Fis2(1/16)
Sound Speaker1 , 65 , 1274 'C2(1/16)
Sound Speaker1 , 98 , 850 'G2(1/16)
Sound Speaker1 , 65 , 1274 'C2(1/16)
Sound Speaker1 , 92 , 901 'Fis2(1/16)
Sound Speaker1 , 65 , 1274
For Temp = 1 To 10
Cls : Home : Lcd " " ; Temp ; ":sec "
Lowerline
Lcd "danger danger"
Wait 1
Cls : Home : Lcd " " ; Temp ; ":sec "
Lowerline
Lcd " danger "
Wait 1
Next Temp
Reset Portd.6
Portc.7 = 0
Wait 1
Goto Inja
'______________________________________________________________________________









دیدگاه