Ⅰ 電子密碼鎖電路圖
見:
程序
//晶振11.0592MHz,T1每250微秒中斷,按鍵P1.0-P1.7,發光二極體接P3.0-P3.3,p3.4
/*變數的定義:
show_val[6]: 顯示的值
init_val[6]: 密碼初始值
key_val: 返回按鍵的值 255-表示無按鍵按下
key_index: 當前按鍵是哪一位密碼
T1_cnt: 定時器計數溢出數
cnt_val_15s: 報警計時的數值
cnt_val_5s: 待機時間計時
cnt_val_4s: 輸入正確,等待4秒清除開鎖信號
cnt_state: 計時狀態
error_num: 錯誤次數
led_seg_code:數碼管7段碼
*/
#include "reg51.h"
/*說明key0=P1^0; key1=P1^1;key2=P1^2; key3=P1^3;key4=P1^4;key5=P1^5;enter=P1^6;esc=P1^7;*/
sbit relay_open=P3^0; //電磁鎖開鎖驅動
sbit pw_error=P3^1; //密碼錯誤信號
sbit alarm_out=P3^2; //報警輸出
sbit open_lock=P3^3; //已開鎖指示信號
sbit audio_out=P3^4; //有源蜂鳴器
unsigned char data cnt_val_15s,cnt_val_5s,cnt_val_4s,cnt_state;
unsigned int data T1_cnt;
unsigned char data key_val,key_index,key_val_old;
unsigned char data state_val,error_num;
unsigned char data show_val[6];
char code init_val[6]=;
char code led_seg_code[11]=;
//led_seg_code[0-9]代表0-9 led_seg_code[10]=0x00數碼管不顯示任何內容
//--------延時程序----------------
void delay(unsigned int i)//延時
//--------清除輸入內容----------
void init_variant()
{unsigned char i;
for(i=0;i<6;i++)
show_val[i]=10; //led_seg_code[10]=0x00表示數碼管不顯示任何內容
key_index=0; //沒有任何輸入或清除所有輸入時,保存當前鍵的位置
}
//---------按鍵掃描---------------
unsigned char scan_key()
{ unsigned char i,k;
i=P1;
if (i==0xff && cnt_state!=2)
//無鍵按下
else //有鍵按下
{ delay(500); //延時去抖動
if(i!=P1)
else
{ TR1=1; //有鍵按下則開定時器,啟動待機計時
cnt_val_5s=0;
switch (i)
{ case 0xfe: k=0; break;
case 0xfd: k=1; break;
case 0xfb: k=2; break;
case 0xf7: k=3; break;
case 0xef: k=4; break;
case 0xdf: k=5; break;
case 0xbf: k=6; break;
case 0x7f: k=7; break;
}
}
}
return k;
}
//---------數碼管顯示---------------
void led_show()
{P0=led_seg_code[show_val[0]];
P2=0xdf;
delay(500);
P0=led_seg_code[show_val[1]];
P2=0xef;
delay(500);
P0=led_seg_code[show_val[2]];
P2=0xf7;
delay(500);
P0=led_seg_code[show_val[3]];
P2=0xfb;
delay(500);
P0=led_seg_code[show_val[4]];
P2=0xfd;
delay(500);
P0=led_seg_code[show_val[5]];
P2=0xfe;
delay(500);
}
//--------定時器T1中斷服務程序-----------------
void timer1() interrupt 3 //T1中斷
{ T1_cnt++;
if(T1_cnt>3999) //如果計數>3999, 計時1s
{ T1_cnt=0;
switch (cnt_state)
{ case 0: //待機,需要計時5s
if(cnt_val_5s<5)
else
{ cnt_val_5s=0;
init_variant();//待機計時到5秒時,清除輸入的內容
TR1=0; //停止計時
}
break;
case 1://密碼輸入正確,需要計時4s
if(cnt_val_4s<4)
else
{ cnt_val_4s=0;
init_variant();//密碼輸入正確,計時到4秒時,清除輸入的內容
open_lock=1; //已開鎖信號清零
relay_open=1; //開鎖信號清零
cnt_state=0;
TR1=0; //停止計時
}
break;
case 2: //密碼輸入錯誤3次,計時15s
if(cnt_val_15s<15)
else
{ cnt_val_15s=0;
init_variant();//三次密碼錯誤時,計時15秒,清除輸入的內容
open_lock=1; // 清除所有指示和報警
relay_open=1;
alarm_out=1;
pw_error=1;
cnt_state=0;
TR1=0; //停止計時
}
break;
}
}
}
//--------判斷鍵盤輸入內容與密碼是否一致------
unsigned char check_input_pw()
{ unsigned char i,k;
k=1;
for(i=0;i<6;i++)
return k;
}
//---------主程序----------------
main()
{ //初始化各變數
audio_out=1;
P3=0xff;
cnt_val_15s=0;
cnt_val_5s=0;
cnt_val_4s=0;
cnt_state=0;
//0-待機計時5s狀態;1-密碼正確,計時4s狀態 ;2-三次密碼錯誤,處於計時15秒狀態。
T1_cnt=0;
error_num=0;
key_val_old=255;
init_variant();
//初始化51的寄存器
TMOD=0x20; //用T1計時 8位自動裝載定時模式
TH1=0x19; //500微秒溢出一次; 250=(256-x)*12/11.0592 -> x=19
TL1=0x19;
EA=1; //開中斷
ET1=1;
TR1=0; //開定時器T1
while(1)
{ key_val=scan_key(); //按鍵輸入,有鍵按下key_val為0-7,無鍵按下key_val為255。
if (key_val!=key_val_old)
{ key_val_old=key_val;
if (key_val!=255&& cnt_state!=2)
{ audio_out=0;
delay(100); //延時去抖動
audio_out=1;
switch (key_val)
{ case 0:
case 1:
case 2:
case 3:
case 4:
case 5:
if(key_index<6) //密碼為6位,超過6位視為輸入無效
{ show_val[key_index]=key_val;
key_index++; }
break;
case 6: //確認鍵
if(check_input_pw())
{//密碼正確
error_num=0; //密碼輸入錯誤次數清零
//---------
pw_error=1; //密碼錯誤指示燈滅
relay_open=0; //開鎖驅動信號燈亮
open_lock=0; //已開鎖信號燈亮
//---------
delay(50000); //兩聲短「滴」聲
audio_out=0;
delay(50000);
audio_out=1;
delay(50000);
audio_out=0;
delay(50000);
audio_out=1;
//---------
cnt_state=1; //下一狀態處於4秒計時的狀態
TR0=1; //啟動定時
}
else
{ if (error_num<2)
{error_num++; //輸入錯誤次數小於3次時,沒錯一次error_num增一
pw_error=0; //密碼錯誤指示燈亮
//-----------
delay(20000);//一聲長「滴」聲,提示錯誤
audio_out=0;
delay(60000);
audio_out=1;
//-----------
init_variant();//清除所有輸入,等待下一次輸入
}
else //輸入錯誤次數超過3次
{ alarm_out=0; //報警燈亮
pw_error=0; //密碼錯誤指示燈亮
error_num=0; //密碼輸入錯誤次數清零
//----------
audio_out=0; //長鳴聲報警
delay(60000);
delay(60000);
delay(60000);
delay(60000);
delay(60000);
delay(60000);
delay(60000);
delay(60000);
delay(60000);
audio_out=1;
//-------------
TR1=1; //打開定時器計時
cnt_state=2; //下一狀態處於15秒計時的狀態
}
}
break;
case 7://取消鍵
init_variant();
break;
}
}
}
led_show();
}
}
//-----程序結束-----------------
Ⅱ 密碼鎖的設計圖(電路圖)
100分以下沒人費這勁,自個想吧。
Ⅲ 密碼鎖的基本原理
以撥碼盤式為例,基本原理如下
是一種沒有電子器件的大密鑰量高可靠的全機械密碼鎖。它的操作方式獨特,類似老電話機的撥號――從撥盤的起點開始,順時針轉動撥盤到某一位數碼,然後退回到起點,就輸入了一位密碼。
如此重復直到輸入了最後一位密碼,再從起點逆時針轉動撥盤就可以開鎖。在開鎖的同時,內部已經復位,所以撥盤退回到起點關鎖後,必須重新輸入密碼才能開鎖,不需要考慮內部復位問題。
這種密碼鎖中,六位密碼的可以有298萬多組密碼供主人隨意變換,保密性極高,可選密碼組是連續排列的,為選擇容易記憶的密碼提供了方便。
已開發的基本型產品,密碼位數及密碼量還可以根據用戶的需求來重新設計,也可以為用戶增加報警器介面。
(3)密碼盤電路擴展閱讀:
這種密碼鎖的優點:
1、不用鑰匙,不用電源,不用電池,沒有廢棄污染物。
2、全機械結構,能承受相當惡劣的外部環境,使用范圍廣。
3、操作簡單,開鎖時間比較短,平均開鎖時間約15秒。
4、實際密碼量大保密性能高,試探開鎖的概率幾乎為零。
5、結構簡單,結實可靠。
Ⅳ 單片機密碼鎖電路一位,原理圖和程序,最好能放在一個文件夾里
Ⅳ 在網上看到各種CD4017製作的密碼鎖電路,比較復雜,安全性也高,不容易破解,可是覺得自己作為入門
VT2應該加上一個上拉電阻,VT1一個下拉電阻,各再經二極體連接到到這個共用的按鍵信號。
電路構思是可以,但時序方面還需要在實體電路上測試。
Ⅵ 求電子密碼鎖的實驗電路圖
電子密碼鎖的實驗電路圖:
Ⅶ 9位數字密碼鎖電路圖如下:密碼為302706249 請問詳細原理是什麼
你的圖看著不是很清楚,可能還有錯。
4017本來工作時就是在脈沖輸入端加入脈沖信號回,每個周期輸答出的10個腳依次發生電平變化。達到計數或流水燈的效果。
這種密碼鎖工作原理應該是:通過連線,在按對正對按鍵時,通過該引腳的電平驅動了脈沖輸入端產生單次脈沖,再按對下一次按鍵再產生下一個脈沖,依次往下,直至最後一個脈沖也產生後給出開鎖信號。
Ⅷ 電子密碼鎖電路原理圖,求解答
這不是密碼鎖電路。不過,作為密碼鎖電路的電源電路是可以的。
工作原理是:
T1,降壓,把220V高壓隔離並降到約10V的低壓。
D1,整流,把約10V的交流變成脈動直流。
C5、C6、濾波。把脈動直流變成平滑直流。此時的直流電壓略高於10V。
7805, 把上述的直流降為穩定的5V。
C7、C8,對5V直流濾波
R3,給D2限流供電。
D2、5V電壓的有電指示
Ⅸ 求用proteus模擬的密碼鎖電路,最好不要用單片機,用數字電路。大家幫幫忙啊,謝啦^_^
數字電路無非就是與非門,這個可以用布爾代數化解
Ⅹ 設計一個密碼鎖電路,要求有三個按鍵A,B,C,密碼為100,密碼對,則鎖開,否則接通報警,用與門,
Y=A B' C' 。這樣 A=1,B=0,C=0,Y就=1,表示密碼正確,去開鎖。
Y=0,就表示密碼錯誤,去報警。
這里還要加上個變數 D,因為電路無法知道密碼輸入完成,得通過D變數來確認。