0.png (53.64 KB, 下載次數(shù): 46)
下載附件
2018-9-18 02:39 上傳
0.png (60.56 KB, 下載次數(shù): 48)
下載附件
2018-9-18 02:43 上傳
0.png (16.17 KB, 下載次數(shù): 45)
下載附件
2018-9-18 02:43 上傳
電子密碼鎖 【摘要】本文的電子密碼鎖利用數(shù)字邏輯電路,實現(xiàn)對門的電子控制,并且有各種附加電路保證電路能夠安全工作,具有極高的安全系數(shù)。 【關(guān)鍵詞】電子密碼鎖、電壓比較器、555單穩(wěn)態(tài)電路、計數(shù)器、JK觸發(fā)器、UPS電源。 一、引言 隨著人們生活水平的提高,如何實現(xiàn)家庭防盜這一問題也變的尤其的突出,傳統(tǒng)的機(jī)械鎖由于其構(gòu)造的簡單,被撬的事件屢見不鮮,電子鎖由于其保密性高,使用靈活性好,安全系數(shù)高,受到了廣大用戶的親呢。 設(shè)計本課題時構(gòu)思了兩種方案:一種是用以AT89C2051為核心的單片機(jī)控制方案;另一種是用以74LS112雙JK觸發(fā)器構(gòu)成的數(shù)字邏輯電路控制方案?紤]到單片機(jī)方案原理復(fù)雜,而且調(diào)試較為繁瑣,所以本文采用后一種方案。 二、總體方案設(shè)計 1、設(shè)計思路 共設(shè)了9個用戶輸入鍵,其中只有4個是有效的密碼按鍵,其它的都是干擾按鍵,若按下干擾鍵,鍵盤輸入電路自動清零,原先輸入的密碼無效,需要重新輸入;如果用戶輸入密碼的時間超過40秒(一般情況下,用戶不會超過40秒,若用戶覺得不便,還可以修改)電路將報警80秒,若電路連續(xù)報警三次,電路將鎖定鍵盤5分鐘,防止他人的非法操作。 2、總體方框圖 三、設(shè)計原理分析電路由兩大部分組成:密碼鎖電路和備用電源(UPS),其中設(shè)置UPS電源是為了防止因為停電 造成的密碼鎖電路失效,使用戶免遭麻煩。 密碼鎖電路包含:鍵盤輸入、密碼修改、密碼檢測、開鎖電路、執(zhí)行電路、報警電路、鍵盤輸 次數(shù)鎖定電路。 1、鍵盤輸入、密碼修改、密碼檢測、開鎖及執(zhí)行電路 . 其電路如下圖3-1-1所示: 圖3-1-1鍵盤輸入、密碼修改、密碼檢測、開鎖、執(zhí)行電路 開關(guān)K1~K9是用戶的輸入密碼的鍵盤,用戶可以通過開關(guān)輸入密碼,開關(guān)兩端的電容是為了提高開關(guān)速度,電路先自動將IC1~IC4清零,由報警電路送來的清零信號經(jīng)C25送到T11基極,使T11導(dǎo)通,其集電極輸出低電平,送往IC1~IC4,實現(xiàn)清零。 密碼修改電路由雙刀雙擲開關(guān)S1~S4組成(如圖3-1-2所示), 它是利用開關(guān)切換的原理實現(xiàn)密碼的修改。例如要設(shè)定密碼為1458,可以撥動開關(guān)S1向左,S2向右,S3向左,S4向右,即可實現(xiàn)密碼的修改,由于輸入的密碼要經(jīng)過S1~S4的選擇,也就實現(xiàn)了密碼的校驗。本電路有16組的密碼可供修改。 圖3-1-2密碼修改電路 由兩塊74LS112(雙JK觸發(fā)器,包含IC1~IC4)組成密碼檢測電路。由于IC1處于計數(shù)狀態(tài),當(dāng)用戶按下第一個正確的密碼后,CLK端出現(xiàn)了一個負(fù)的下降沿,IC1計數(shù),Q端輸出為高電平,用戶依次按下有效的密碼,IC2~IC3也依次輸出高電平,送入與門IC5,使其輸出開鎖的高電平信號送往IC13的2腳,執(zhí)行電路動作,實現(xiàn)開鎖。 執(zhí)行電路是由一塊555單穩(wěn)態(tài)電路(IC13),以及由T10、 T11組成的達(dá)林頓管構(gòu)成。若IC13的2腳輸入一高電平,則3腳輸出高電平,使T10導(dǎo)通,T11導(dǎo)通,電磁閥開啟,實現(xiàn)開門,同時T10集電極上接的D5(綠色發(fā)光二極管)發(fā)亮,表示開門,20秒后,555電路狀態(tài)翻轉(zhuǎn),電磁閥停止工作,以節(jié)電。其中電磁閥并聯(lián)的電容C24使為了提高電磁閥的力矩。 2、報警電路 報警電路實現(xiàn)的功能是:當(dāng)輸入密碼的時間超過40秒(一般情況下用戶輸入不會超過),電路報警80秒,防止他人惡意開鎖。 電路包含兩大部分,2分鐘延時和40秒延時電路。其工作原理是當(dāng)用戶開始輸入密碼時,電路開始2分鐘計時,超出40秒,電路開始80秒的報警。圖如下3-2-1所示 圖3-2-1報警電路 有人走近門時,觸摸了TP端(TP端固定在鍵盤上,其靈敏度非常高,保證電路可靠的觸發(fā)),由于人體自身帶的電,使IC10的2腳出現(xiàn)低電平,使IC10的狀態(tài)發(fā)生翻轉(zhuǎn),其3腳輸出高電平,T5導(dǎo)通(可以通過R12控制T1的基極電流),其集電極接的黃色發(fā)光二極管D3發(fā)光,表示現(xiàn)在電子鎖處于待命狀態(tài),T6截止,C4開始通過R14充電(充電時間是40秒,此時為用戶輸入密碼的時間,即用戶輸入密碼的時間不能超過40秒,否則電路就開始報警, 由于用戶經(jīng)常輸入密碼,而且知道密碼,一般輸入密碼的時間不會超過40秒),IC2開始進(jìn)入延時40秒的狀態(tài)。 開始報警:當(dāng)用戶輸入的密碼不正確或輸入密碼的時間超過40秒,IC11的2腳電位隨著C4的充電而下降,當(dāng)電位下降到1/3Vcc時(即40秒延時結(jié)束時候),3腳變成高電位(延時時是低電平),通過R15使(R15的作用是為了限制T7的導(dǎo)通電流防止電流過大燒毀三極管)T7導(dǎo)通,其集電極上面接的紅色發(fā)光二極管D4發(fā)亮,表示當(dāng)前處于報警狀態(tài),T8也隨之而導(dǎo)通,使蜂鳴器發(fā)聲,令賊人生怯,實現(xiàn)報警. 停止報警:當(dāng)達(dá)到了80秒的報警時間,IC10的6,7腳接的電容C5放電結(jié)束,IC10的3腳變成低電平,T5截止,T6導(dǎo)通,強(qiáng)制使強(qiáng)制電路處于穩(wěn)態(tài),IC11的3腳輸出低電平,使T7,T8截止,蜂鳴器停止報警;或者用戶輸入的密碼正確,則有開鎖電路中的T10集電極輸出清除報警信號,送至T12(PNP),T12導(dǎo)通,強(qiáng)制使T7基極至低電位,解除報警信號。 3、報警次數(shù)檢測及鎖定電路 若用戶操作連續(xù)失誤超過3次,電路將鎖定5分鐘。其工作原理如下:當(dāng)電路報警的次數(shù)超過3次,由IC9(74161)構(gòu)成的3位計數(shù)器將產(chǎn)生進(jìn)位,通過IC7,輸出清零信號送往74161的清零端,以實現(xiàn)重新計數(shù)。經(jīng)過IC8(與門),送到IC12(555)的2腳,使3腳產(chǎn)生5分鐘的高電平鎖定脈沖(其脈沖可由公式T=1.1RC計算得出),經(jīng)T9倒相,送IC6輸入端,使IC6輸出低電平,使IC13不能開鎖,到鎖定的目的。電路圖如下3-3-1所示: 圖3-3-1報警次數(shù)檢測及鎖定電路 4、備用電源電路 為了防止停電情況的發(fā)生,本電路后備了UPS電源,它包括市電供電電路,停電檢測電路,電子開關(guān)切換電路,蓄電池充電電路和蓄電池組成。其電路圖如下3-4-1所示: 
220V市電通過變壓器B降壓成12V的交流電,再經(jīng)過整流橋整流,7805穩(wěn)壓到5V送往電子切換電路,由于本電路功耗較少,所以選用10W的小型變壓器。
圖3-4-1電源電路 由R8,R9,R6,R7及IC14構(gòu)成電壓比較器,正常情況下,V+<V- IC14輸出高電平,繼電器的常閉觸點和市電相連;當(dāng)市電斷開,V+>V- IC14輸出高電平,由T3,T4構(gòu)成的達(dá)林頓管使繼電器J開啟,將其常開觸電將蓄電池和電路相連,實現(xiàn)市電和蓄電池供電的切換,保證電子密碼鎖的正常工作(視電池容量而定持續(xù)時間)。其電路圖如下3-4-2所示: 圖3-4-2停電檢測及電子開關(guān)切換電路 T1,T2構(gòu)成的蓄電池自動充電電路,它在電池充滿后自動停止充電,其中D1亮為正在充電,D2為工作指示。由R4,R5,T1構(gòu)成電壓檢測電路,蓄電池電壓低,則T1,T2導(dǎo)通,實現(xiàn)對其充電;充滿后,T1,T2截止,停止充電,同時D1熄滅,電路中C4的作用是濾除干擾信號。其電路圖如3-4-3所示: 圖3-4-3 蓄電池自動充電電路 五、總結(jié)與體會
以上為實習(xí)期間所設(shè)計的電子密碼鎖電路,它經(jīng)過多次修改和整理,以是一個比較不錯的設(shè)計,可以滿足人們的基本要求,但因為水平有限,此電路中也存在一定的問題,譬如說電路的密碼不能遺忘,一旦遺忘,就很難打開,這可以通過增加電路解決,但過于復(fù)雜,本次設(shè)計未其中;用開關(guān)作74LS112的CLK脈沖,不是很穩(wěn)定,可以調(diào)換其它高速開關(guān)或計數(shù)脈沖;電路密碼只有16種可供修改,但由于他人不知道密碼的位數(shù),而且還要求在規(guī)定的時間內(nèi)按一定的順序開鎖,所以他人開鎖的幾率很;電路中未加顯示電路,但可通過其它數(shù)字模塊實現(xiàn)這一功能。這需要一段時間的進(jìn)一步改進(jìn),如果有好的意見,希望老師給以支持。 通過這三周的學(xué)習(xí),我感覺有很大的收獲:首先,通過學(xué)習(xí)使自己對課本上的知識可以應(yīng)用于實際,使的理論與實際相結(jié)合,加深自己對課本知識的更好理解,同時實習(xí)也段練了我個人的動手能力:能夠充分利用圖書館去查閱資料,增加了許多課本以外的知識。能對protel 99、和EWB等仿真軟件操作,能達(dá)到學(xué)以致用。對我們學(xué)生來說,理論與實際同樣重要,這是我們以后在工作中說明自己能力的一個重要標(biāo)準(zhǔn)。 在實習(xí)中,我感受到了老師對學(xué)生的那種悔人不卷的精神,每天的固定時間,老師都來給我們指導(dǎo),使我們少走彎路,順利完成實習(xí)任務(wù),請允許我向你們致意崇高的敬意,感謝你們,老師!
單片機(jī)源程序如下: - #include<reg52.h>
- #include<math.h>
- #include<intrins.h>
- #define uchar unsigned char
- #define uint unsigned int
- #define data_IO P2
- sbit rs=P3^0; //指令和數(shù)據(jù)寄存器 “1是數(shù)據(jù),” “0是指令”
- sbit rw=P3^1;//讀寫控制,“1讀” “0寫”
- sbit e=P3^2; //片選信號
- sbit p=P2^7;
- sbit deng=P3^3;///響音樂的端口
- sbit md=P3^4;///修改密碼時的燈
- uchar pwflag;//密碼是否正確的標(biāo)志位
- uchar count;//
- uchar gg=0 ;//只有輸入正確的密碼才能修改密碼
- uchar cs=3 ;//輸入密碼的錯誤次數(shù)
- uchar m[]={1,2,3,4,5,6}; ///初始密碼
- static uchar mbuf[6];///輸入的密碼
- char d[32]={' ','I','M','P','O','R','T',' ','C','I','P','H','E','R',':',' ',
- ' ',' ','_',' ',' ','_','_','_','_','_','_',' ',' ',' ',' ',' '};//輸入密碼
- code char ks[32]={'C','O','N','G','R','A','T','U','L','A','T','E',' ','Y','O','U',
- ' ','O','P','E','N','I','N','G',' ',' ','L','O','C','K','!',' '};////開鎖
- code char cw[32]={' ','C','I','P','H','E','R',' ',' ','E','R','R','O','R',' ',' ',
- '~','~','~','~','~','~','~','~','~','~','~','~','~','~','~','~' };////錯誤
- code char xc[32]={' ',' ','A','M','E','N','D',' ','S','U','C','C','E','E','D',' ',
- ' ',' ',' ',' ',' ','!','!','!','!','!','!',' ',' ',' ',' ',' '};//修改成功
- code char xg[32]={' ','A','M','E','N','D',' ',' ','C','I','P','H','E','R',':',' ',
- ' ',' ',' ',' ',' ','_','_','_','_','_','_',' ',' ',' ',' ',' '};///修改密碼*/
- void yanshi(uint n)///////////////延時函數(shù)///////////////////////////////////
- {
- uint i;
- for(i=0;i<n;i++){};
- }
- void delay(uint n)///////////////延時函數(shù)///////////////////////////////////
- {
- uint i,j;
- for(i=0;i<1000;i++)
- {for(j=0;j<n;j++){}}
-
- }
- void busy() ////////////////////判斷是否忙////////////////////////////////////////
- {data_IO=0xff;
- rs=0; //寫指令 ////////////////////
- rw=1; //表示讀狀態(tài) // 三個的狀態(tài)表示 //
- e=1; //下降延// // 判忙狀態(tài) //
- while(!p); ////////////////////
- // e=0;
- }
- void xiezl(uchar shuju) /////////////////////*寫指令*/////////////////////////////
- {
- busy();/*yanshi(6500);*/
- data_IO=shuju;
- rs=0; //寫指令 ////////////////////
- rw=0; //表示寫狀態(tài) // 三個的狀態(tài)表示 //
- e=1; //下降延// // 寫指令 //
- e=0; ///////// ////////////////////
- }
- void w_dat(uint n)//////////////////寫數(shù)據(jù)//////////////////////////
- {
- busy(); /*yanshi(6500) ;*/
- data_IO=n;
- rs=1; //寫數(shù)據(jù) ////////////////////
- rw=0; //表示寫狀態(tài) // 三個的狀態(tài)表示 //
- e=1; //下降延// //寫數(shù)據(jù) //
- e=0; ///////// ////////////////////
- // return;
- }
- void xianshi(uchar js[]) //////////////////顯示函數(shù)///////////////////////////////
- {
- uchar h,v;
- xiezl(0x01); //清屏顯示
- yanshi(2000) ;
- xiezl(0x80); // DDRAM地址的設(shè)置
- for(h=0;h<16;h++)
- {w_dat(js[h]); ///n表示有寫幾位數(shù)據(jù)
- yanshi(100) ;
- }
- xiezl(0xc0);//換行
- for(v=(16);v<32;v++)
- {w_dat(js[v]); ///n表示有寫幾位數(shù)據(jù)
- yanshi(100) ;
- }
- }
- void chushihua(void)///////////////////*液晶模塊初始化*/
- { uchar i;
- rs=0; //寫指令
- rw=0; //表示寫狀態(tài)
- e=0; //使能
- for(i=0;i<3;i++)
- {
- xiezl(0x38); //功能設(shè)置,8位,一行顯示,5*7點陣
- yanshi(1000);
- }
- xiezl(0x38); //兩行顯示
- xiezl(0x0f); //顯示開關(guān)控制位
- xiezl(0x18); //移位控制,光標(biāo)和顯示一起左移
- xiezl(0x06); //設(shè)置輸入模式
- xiezl(0x01); //清屏顯示
- xiezl(0x80); // DDRAM地址的設(shè)置
- }
- bit pwcmp(void)
- {
- bit flag;
- uchar i;
- for (i=0;i<6;i++)
- {
- if (m[i]==mbuf[i]) flag = 1; //*密碼正確*/
- else { flag = 0; i=6; } //*密碼錯誤*/
- }
- return(flag);
- }
- void gb(void)/////////轉(zhuǎn)移光標(biāo)
- { uchar c;
- xiezl(0xc0);//換行
- yanshi(3000) ;
- for(c=0;c<5;c++)
- {w_dat(' ');///n表示有寫幾位數(shù)據(jù)
- yanshi(2000) ;
- }
- }
- uchar getkey(void)///得到鍵值
- { uchar h,l,k;
- while(P1!=0x0f)
- {
- h=P1&0x0f;
- P1=0xf0;
- l=P1&0xf0;
- k=h|l;
- return(k);
- }
- }
- void diaoyong(uchar i)///////////調(diào)用各鍵的函數(shù)//////輸入密碼
- { uchar lq;
- switch(i)
- {
- case 0x7e: if (count<6) { mbuf[count]=1; count++; w_dat('*');} break; // 01111110 1
- case 0xbe: if (count<6) { mbuf[count]=2; count++; w_dat('*');} break; // 10111110 2
- case 0xde: if (count<6) { mbuf[count]=3; count++; w_dat('*');} break; // 11011110 3
- case 0xee: if (count<6) { mbuf[count]=4; count++; w_dat('*');} break; // 11101110 4
- case 0x7d: if (count<6) { mbuf[count]=5; count++; w_dat('*');} break; // 01111101 5
- case 0xbd: if (count<6) { mbuf[count]=6; count++; w_dat('*');} break; // 10111101 6
- case 0xdd: if (count<6) { mbuf[count]=7; count++; w_dat('*');} break; // 11011101 7
- case 0xed: if (count<6) { mbuf[count]=8; count++; w_dat('*');} break; // 11101101 8
- case 0x7b: if (count<6) { mbuf[count]=9; count++; w_dat('*');} break; // 01111011 9
- case 0xbb: if (count<6) { mbuf[count]=0; count++; w_dat('*');} break; // 10111011 0
- case 0xdb: if (count==6) { pwflag = pwcmp();} else pwflag = 0;// 只有輸入6個密碼后按確認(rèn)鍵才作密碼比較
- if(pwflag) {deng=0; xianshi(ks);gg=1; } else { cs--;deng=1; xianshi(cw); delay(200); xianshi(d);gb();count = 0; }
- break; // 11011011 a
- case 0xeb: count = 0;deng=1; xianshi(d); gb();gg=0; /*取消鍵*/
- break; // 11101011 b
- case 0x77: if(gg==1){ count=0;xianshi(xg); gb();} //修該密碼
- break; // 01110111 c
-
- case 0xb7: if((count==6)&&(gg==1)) { count=0;
- for (lq=0;lq<6;lq++){ m[lq]=mbuf[lq]; yanshi(10000);} md=1; xianshi(xc); delay(200); xianshi(d);yanshi(2000);gb();yanshi(200);gg=0;}//保存密碼
- break; // 10110111 d
- /*case 0xd7: sr[jm]='e'; break; // 11010111 e
- case 0xe7: sr[jm]='f'; break; // 11100111 f */
- default: break;
- }
-
- }
- void main(void)
- {uchar key;
- chushihua();
- xianshi(d);//顯示函數(shù)
- gb(); //移光標(biāo)到第二行第六位
- while(cs)
- {
- P1=0x0f;
- if(P1!=0x0f)
- {
- yanshi(20);
- key=getkey();
- md=0;
- diaoyong(key);
- yanshi(20000);
- md=1;
- }
- }while(1);
- }
復(fù)制代碼
所有資料51hei提供下載:
|