سلام به دوستان
من یک مدار قفل دجیتال با اسمارت کارت (محمود حسنی پژو) گرفته ام و مدارشو بسته ام اما بازر یه ریز صدا میکند و سون سگمنت های ان که باید روشن شود روشن نمیشود :angry:

لینک مدار و توضیحات: http://ir2up.ir/up17/0457bed4fb1.pdf
من یک مدار قفل دجیتال با اسمارت کارت (محمود حسنی پژو) گرفته ام و مدارشو بسته ام اما بازر یه ریز صدا میکند و سون سگمنت های ان که باید روشن شود روشن نمیشود :angry:

لینک مدار و توضیحات: http://ir2up.ir/up17/0457bed4fb1.pdf
کد:
$regfile = "M16def.dat"
$crystal = 8000000
'--------------------------- ALIAS
'------------------------- THIS PIN CONNECT TO CARD READER SENSOR
'------------------------- PIN = 1 WHEN USER INSERT CARD
Sensor Alias Pind.5
Config Sensor = Input
Portd.5 = 1
'------------------------- THIS PIN CONNECT TO PUSH BOTTON
'------------------------- PIN = 0 WHEN USER PUSH THIS BOTTON
Key Alias Pind.6
Config Key = Input
Portd.6 = 1
'------------------------ THIS PIN CONNECT TO BUZZER
Buzzer Alias Portd.7
Config Buzzer = Output
Portd.7 = 0
'----------------------- THIS PIN CONNECT TO RELAY FOR OPEN THE DOOR
Relay Alias Portc.0
Config Relay = Output
Relay = 0
'-------------------- J1 & J2 PINS CONNECT TO JUMPER
'-------------------- IF J1 CONNECT TO J2 THEN PROGRAM DELETE THE MASTER USER
J1 Alias Portc.1
Config J1 = Output
Portc.1 = 0
J2 Alias Pinc.2
Config J2 = Input
Portc.2 = 1
'------------------- 7-SEG CONNECT TO THIS PORT
7_seg Alias Porta
Config 7_seg = Output
'------------------- THIS PIN CONNECT TO SMART CARD
Io Alias Pinb.0
Rst Alias Portb.1
Clk Alias Portb.2
Config Io = Input
Config Rst = Output
Config Clk = Output
'------------------------- DIM
'----
Dim Card_cod(11) As Byte
Dim Cod_e(30) As Eram Byte
Dim Cod(30) As Byte
'----
Dim Conter0 As Byte
Dim Conter1 As Byte
Dim Conter2 As Byte
Dim Conter3 As Byte
Dim Conter4 As Byte
Dim Time1 As Word
Dim Time2 As Word
Dim Time3 As Word
Dim Select1 As Bit
Dim Select2 As Byte
Dim Error As Byte
Dim Status As Byte
Dim User_num As Byte
'--------------------- LOAD E2PROM DATA
For Conter1 = 1 To 30
Cod(conter1) = Cod_e(conter1)
Waitms 10
Next
'------------------------- PERUSE JUMPER CONNECTION
'------------------------- IF J1 CONNECT TO J2 SO PROGRAM DELETE THEMASTER USER
J1 = 1
Waitms 10
If J2 = 1 Then
J1 = 0
Waitms 10
If J2 = 0 Then
Cod(1) = 0
Buzzer = 1
7_seg = &B01110011
Waitms 800
Buzzer = 0
Waitms 300
End If
End If
J1 = 0
'------------------------ PROGRAM START
Buzzer = 1
7_seg = 255
Waitms 100
7_seg = 0
Buzzer = 0
Waitms 300
7_seg = 255
Buzzer = 1
Waitms 100
'7_seg = 0
Buzzer = 0
Waitms 500
'------------------------ IF COD(1) <> 1 THEN MASTER USER NOT REGISTERED
'------------------------ SO NEW MASTER USER SAVE TO RAM
Start_program:
If Cod(1) <> 1 Then
7_seg = &B00110110
Bitwait Sensor , Set
Waitms 100
If Sensor <> 1 Then Goto Start_program
Gosub Read_data
If Error <> 0 Then
7_seg = &B01001111
Buzzer = 1
Waitms 800
Buzzer = 0
Wait 1
Goto Start_program
End If
Gosub Register_new_card
7_seg = &B01000010
Buzzer = 1
Gosub Save_to_eram
Buzzer = 0
Waitms 100
Buzzer = 1
Waitms 100
Buzzer = 0
Wait 1
End If
'*******************************************************************************
'****************************** ****************
'* iseee.ir ******************* START MAIN PROGRAM LOOP ****************
'****************************** ****************
'*******************************************************************************
Do
'----------------------------------------------- DO
7_seg = 1
For Conter0 = 1 To 11
Waitms 100
Shift 7_seg , Left
If 7_seg > 63 Then 7_seg = 1
If Key = 0 Then
Incr Time1
Else
Time1 = 0
End If
'--------------------- IF USER INSERTED THE CARD SO GOSUB OPEN_DOOR
If Sensor = 1 Then Gosub Open_door
Next
'--------------
Waitms 100
7_seg = 0
Waitms 200
7_seg = &B10000000
Waitms 200
'--------------------- IF USER INSERTED THE CARD SO GOSUB OPEN_DOOR
If Sensor = 1 Then Gosub Open_door
7_seg = 0
Waitms 200
7_seg = &B10000000
Waitms 200
7_seg = 0
'------------------- TIME > 3 WHEN USER PUSHED AND HOLD THE BOTTON
'------------------- SO PROGRAM GO TO MENU
If Time1 > 3 Then Gosub Menu
'----------------------------------------------- LOOP
Loop
'*******************************************************************************
'************************** ****************
'* iseee.ir *************** END OF MAIN PROGRAM AND START SUB ****************
'************************** ****************
'*******************************************************************************
'*******************************************************************************
'****************************** ****************
'* iseee.ir ******************* OPEN DOOR ****************
'****************************** ****************
'*******************************************************************************
Open_door:
Gosub Read_data
Gosub Search
If Error = 0 And Status = 5 Then
Relay = 1
7_seg = &B00110111
Buzzer = 1
Waitms 100
Buzzer = 0
Waitms 200
Buzzer = 1
Waitms 100
Buzzer = 0
Waitms 700
Gosub Diplay_un
Relay = 0
Waitms 1500
7_seg = 0
Waitms 500
Else
7_seg = &B01001111
Buzzer = 1
Waitms 900
Buzzer = 0
Wait 2
End If
Return
'*******************************************************************************
'****************** **********
'* iseee.ir ******* MENU OF PROGRAM FOR REGISTER NEW OR DELETE USER **********
'****************** **********
'*******************************************************************************
Menu:
7_seg = &B00110110
Buzzer = 1
Waitms 300
Buzzer = 0
Time1 = 0
'-------------------------- INCR TIME1 TO EXIT SUB WHEN TIME OUT
While Time1 < 70
Waitms 100
Incr Time1
If Time1 > 50 Then Return
'--------------------- WAIT UNTIL INSERT MASTER CARD
If Sensor = 1 Then
Gosub Read_data
Gosub Search
'----------------------- ONLY MASTER USER ALLOW TO ACCESS
If Error = 0 And Status = 5 And User_num = 1 Then
Exit While
Else
Buzzer = 1
7_seg = &B01001111
Waitms 700
Buzzer = 0
7_seg = 0
Return
End If
'-----------------------
End If
'--------------------
Wend
'------------------------
Buzzer = 1
7_seg = &B01011110
Waitms 100
Buzzer = 0
Waitms 100
Buzzer = 1
Waitms 100
Buzzer = 0
Waitms 500
'-------------------------- SELECT1 = 1 ---> REGISTER NEW
'-------------------------- SELECT1 = 0 ---> DELETE USER
Select1 = 1
7_seg = &B01000010
'--------------------------
Time1 = 0
Time2 = 0
'-------------------------- INCR TIME1 TO EXIT SUB WHEN TIME OUT
While Time1 < 70
Incr Time1
Waitms 100
If Key = 0 Then
Time1 = 0
Incr Time2
End If
'------------------------------ IF KEY=1 AND TIME2 >0 ---> USER PUSHED THE KEY
'------------------------------ SO PROGRAM CHANGE THE SELECTION
If Time2 > 0 And Time2 < 20 And Key = 1 Then
Time2 = 0
Buzzer = 1
Toggle Select1
'---------------------- DISPLAY r OR d FOR REGISTER OR DELETE USER IN 7-SEG
If Select1 = 1 Then 7_seg = &B01000010
If Select1 = 0 Then 7_seg = &B01110011
'---------------------
Waitms 100
Buzzer = 0
End If
'----------------------- IF TIME2>15 THEN USER PUSHED AND HOLD THE KEY
'----------------------- SO PROGRAM START THE SELECTED ACTION
If Time2 > 15 Then
'------------------------------------ SELECT1=1 ---> REGISTER NEW CARD
If Select1 = 1 Then
7_seg = &B00110110
Buzzer = 1
Waitms 200
Buzzer = 0
'----------------------------
Time1 = 0
While Time1 < 70
Waitms 100
Incr Time1
If Sensor = 1 Then Exit While
Wend
If Time1 > 69 Then Return
'----------------------------
Waitms 100
Gosub Read_data
Gosub Search
'------------------------ IF STATUS=5 THEN CARD ALREADY REGISTERED
If Status = 5 Then
Buzzer = 1
'------------- DISPLAY (S) IN 7-SEG
7_seg = &B01101101
'-------------
Waitms 100
Buzzer = 0
Waitms 50
Buzzer = 1
Waitms 100
Buzzer = 0
Waitms 50
Buzzer = 1
Waitms 100
Buzzer = 0
Waitms 50
Buzzer = 1
Waitms 100
Buzzer = 0
'--------------
Waitms 1500
Return
End If
'-----------------------------------------------------------------
If Error = 0 Then
'-------------- IF USER PUSH KEY SO SAVE NEW CARD COD FOR MASTER USER
If Key = 0 Then
Waitms 100
If Key = 0 Then Cod(1) = 0
End If
'--------------------------------------------------------------------
Gosub Register_new_card
'------------------------- IF STATUS=20 SO MEMORY IS FULL
If Status = 20 Then
'------------ DISPLAY (F) IN 7-SEG
7_seg = &B01000010
'-------------------
Buzzer = 1
Waitms 100
Buzzer = 0
Waitms 100
Buzzer = 1
Waitms 100
Buzzer = 0
Waitms 600
Gosub Save_to_eram
Else
'----------- IF STATUS <> 20 SO NEW CARD REGISTERED SUCCESSFULLY
'----------- DISPLAY (r) IN 7-SEG
7_seg = &B01000010
Buzzer = 1
Waitms 600
Buzzer = 0
Waitms 300
End If
'-------------------------
Else
7_seg = &B01001111
Buzzer = 1
Waitms 600
Buzzer = 0
End If
End If
'------------------------------------ SELECT1=0 ---> DELETE USER
If Select1 = 0 Then
7_seg = &B01110011
Buzzer = 1
Waitms 500
Buzzer = 0
User_num = 2
Gosub Diplay_un
Time1 = 0
Time2 = 0
'-------------------------- INCR TIME1 TO EXIT SUB WHEN TIME OUT
While Time1 < 70
Waitms 100
Incr Time1
If Key = 0 Then
Time1 = 0
Incr Time2
End If
'-------------------------- IF KEY=1 AND TIME2 >0 ---> USER PUSHED THE KEY
'-------------------------- SO PROGRAM INCR USER NUMBER
If Time2 > 0 And Key = 1 Then
Time2 = 0
Buzzer = 1
Incr User_num
Waitms 100
Buzzer = 0
If User_num > 5 Then User_num = 2
Gosub Diplay_un
End If
'----------------------- IF TIME2>15 THEN USER PUSHED AND HOLD THE KEY
'----------------------- SO PROGRAM DELET THE SELECTED USER
If Time2 > 15 Then
Gosub Delete_user
Return
End If
Wend
'-------------------------- TIME OUT WHILE END
End If
'-------------------------------------
Wait 1
Return
End If
'------------------------
Wend
Return
'*******************************************************************************
'****************************** ****************
'* iseee.ir ******************* DISPLAY NUMBER IN 7-SEG ****************
'****************************** ****************
'*******************************************************************************
Diplay_un:
Select Case User_num
Case 1:
7_seg = &B00110000
Case 2:
7_seg = &B01011011
Case 3:
7_seg = &B01111001
Case 4:
7_seg = &B01110100
Case 5:
7_seg = &B01101101
End Select
Return
'*******************************************************************************
'****************************** ****************
'* iseee.ir ******************* DELETE SELECTED USER ****************
'****************************** ****************
'*******************************************************************************
Delete_user:
Buzzer = 1
7_seg = &B01110011
Wait 1
7_seg = 0
Buzzer = 0
Decr User_num
User_num = User_num * 6
Incr User_num
Conter2 = User_num + 5
For Conter1 = User_num To Conter2
Cod(conter1) = 0
Next
Gosub Save_to_eram
Return
'*******************************************************************************
'****************************** ****************
'* iseee.ir ******************* REGISTER NEW USER ****************
'****************************** ****************
'*******************************************************************************
Register_new_card:
'----------------- STATUS = 30 WHEN MEMORY IS FULL
Status = 30
'-----------------
For Conter0 = 1 To 30 Step 6
If Cod(conter0) <> 1 Then
Cod(conter0) = 1
Incr Conter0
Conter3 = Conter0 + 4
Conter4 = 4
For Conter2 = Conter0 To Conter3
Cod(conter2) = Card_cod(conter4)
Incr Conter4
Next
'-------------------- STATUS =20 WHEN CARD REGISTER SUCCESSFULLY
Status = 20
'--------------------
Exit For
End If
Next
Return
'*******************************************************************************
'****************************** ****************
'* iseee.ir ******************* SEARCH THE CARD ID IN MEMORY ****************
'****************************** ****************
'*******************************************************************************
Search:
User_num = 0
For Conter0 = 1 To 25 Step 6
Incr User_num
Status = 0
If Cod(conter0) = 1 Then
Conter3 = Conter0 + 5
Conter4 = 4
Conter1 = Conter0 + 1
For Conter2 = Conter1 To Conter3
If Card_cod(conter4) = Cod(conter2) Then Incr Status
Incr Conter4
Next
End If
If Status = 5 Then Exit For
Next
Return
'*******************************************************************************
'****************************** ****************
'* iseee.ir ******************* READ CARD ID ****************
'****************************** ****************
'*******************************************************************************
Read_data:
Error = 0
'---------------- RESET THE CARD
' _______
'RST ___| |___
' ___
'CLK _____| |_____
Set Rst
Set Clk
Waitus 50
Reset Clk
Reset Rst
Waitms 5
'-------------- READ CARD DATA
'
' __ __ __
'CLK __| |__| |__| |__ .....
' __ __ __ __
'I/O / \/ \/ \/ .....
' __/\__/\__/\__/\__
'
'
Conter0 = 1
For Conter1 = 1 To 10
For Conter2 = 0 To 7
Set Clk
Waitus 10
Card_cod(conter0).conter2 = Io
Waitus 20
Reset Clk
Waitus 30
Next
Incr Conter0
Next
'----------------------- IF ALL DATA IS 0 OR 255 THEN OCCUR ERROR
If Card_cod(4) = 0 And Card_cod(5) = 0 And Card_cod(6) = 0 And Card_cod(7) = 0 And Card_cod(8) = 0 Then Error = 1
If Card_cod(4) = 255 And Card_cod(5) = 255 And Card_cod(6) = 255 And Card_cod(7) = 255 And Card_cod(8) = 255 Then Error = 1
'------------------------
Return
'*******************************************************************************
'****************************** ****************
'* iseee.ir ******************* SAVE RAM DATA TO E2PROM ****************
'****************************** ****************
'*******************************************************************************
Save_to_eram:
For Conter4 = 1 To 30
Cod_e(conter4) = Cod(conter4)
Waitms 10
Next
Return
'*******************************************************************************
'****************************** ****************
'****************************** END OF PROGRAM IN ****************
'* iseee.ir ******************* THIS LINE = 800 ****************
'****************************** ****************
'*******************************************************************************
End
'WWW.ISEEE.IR
'YEAR 2011


دیدگاه