智能電子密碼鎖_第1頁
智能電子密碼鎖_第2頁
智能電子密碼鎖_第3頁
智能電子密碼鎖_第4頁
智能電子密碼鎖_第5頁
已閱讀5頁,還剩34頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領

文檔簡介

-4軟件程序設計主程序流程圖如圖4-1所示為主程序流程圖,開始接上電源,程序進行初始化設置,然后在鍵盤上輸入密碼,此系統(tǒng)進行鍵盤掃描,密碼正確,開鎖成功,密碼錯誤3次出錯報警提示并且鎖住鍵盤一分鐘,選擇是否修改密碼,若要修改密碼,先輸入舊密碼密碼,密碼正確后設置新密碼,錯誤時報警,需要兩次確認新密碼,確認后,密碼修改成功,否則結(jié)束最終返回。然后啟動程序,進行保護,再次在鍵盤上輸入密碼,系統(tǒng)進行掃描,如果和之前一樣,則執(zhí)行相同程序,如不是,則執(zhí)行另一種程序。還有一個檢測震動的程序,這個是用來檢測報警的,要是有震動的信號就馬上發(fā)給GSM,然后GSM打電話報警。圖4-1主程序流程圖按鍵軟件設計為了節(jié)省IO口資源,按鍵采用行列掃描的形式,只用8個IO口就可以把16個按鍵全部編碼完了。如圖4-2為按鍵功能流程圖,在按鍵當中,有與輸入、確認、清除、返回、修改的程序相對應的按鍵。從鍵盤輸入數(shù)字編碼,并按順序地和存儲在AT24C02

里的密碼進行比較。當密碼輸入正確時就開鎖,要是輸入錯誤時,輸入錯誤次數(shù)加一,只有在密碼輸入的情況下才可以修改密碼。圖4-2按鍵功能流程圖4.2.2按鍵功能子程序unsignedcharkeynum1(void){unsignedchara,b;P1=0x0f;〃行線作為輸入,列線輸出低電平a=P1;b=0xff;if(a!=0x0f){Delay5Ms();Delay5Ms();a=P1;if(a!=0x0f){P1=0xf0;Delay5Ms();Delay5Ms();b=P1;a=a+b;switch(a){case(0x77):b=0;break;case(0x7b):b=1;break;case(0x7d):b=2;break;case(0x7e):b=3;break;case(0xb7):b=4;break;case(0xbb):b=5;break;case(0xbd):b=6;break;case(0xbe):b=7;break;case(0xd7):b=8;break;case(0xdb):b=9;break;case(0xdd):b=D;break;case(0xde):b=enter;break;case(0xe7):b=A;break;case(0xeb):b=B;break;case(0xed):b=C;break;case(0xee):b=backspace;break;default:b=0xff;break;}}}return(b);}本設計不但有鍵盤輸入方式還設計有紅外遙控輸入。這種設計是為了避免當鍵盤壞了的情況下,不用損壞密碼鎖,照樣可以打開。紅外遙控輸入只是作為預防的輸入方式。密碼設置軟件設計密碼設置程序流程圖如圖4-3為密碼設置流程圖,開始按下設置鍵,輸入舊密碼,如果錯誤累計三次,進行報警程序。如輸入正確,可以修改密碼,確認后再次輸入新密碼,如兩次輸入一樣,

次數(shù)>3?所輸入舊密碼正確?兩次新密碼輸入相同?Y則更改成功。如果兩次輸入的新密碼不一樣,則修改密碼失敗,重新返回設置新密碼。圖4-3密碼設置流程圖NYYNN設置成功返回輸入次數(shù)加1輸新密碼再次輸新密碼輸入舊密碼按下設置鍵次數(shù)>3?所輸入舊密碼正確?兩次新密碼輸入相同?Y則更改成功。如果兩次輸入的新密碼不一樣,則修改密碼失敗,重新返回設置新密碼。圖4-3密碼設置流程圖NYYNN設置成功返回輸入次數(shù)加1輸新密碼再次輸新密碼輸入舊密碼按下設置鍵報警程序密碼設置子程序//提示輸入舊密碼//提示輸入舊密碼{GotoXY(0,0);print("oldcode:");pass=1;count1=0;count=0;count7=1;count2=1;count6=0;sk[11]==0;}if((count!=0)&(pass==1)&(cp[0]==0)){pass0=0;//輸出顯示*if(count==1){GotoXY(0,0);print("oldcode:*");}if((count!=0)&(pass0==1)&(cp[0]==0)){pass=0;if(count==1){GotoXY(0,0);print("newcode:*");}if((sk[14]==1)&(count7==1))//按鍵盤認鍵,校驗舊密碼{//舊密碼輸入正確if((password[0]==cq[0])&(password[1]==cq[1])&(password[2]==cq[2])&(password[3]==cq[3])&(password[4]==cq[4])&(password[5]==cq[5])&(pass==1)&(count>6)){{GotoXY(0,0);print("newcode:");pass0=1;pass=0;sk[14]=0;count=0;count7=0;n=0;m=0;}else{GotoXY(0,0);print("oldcodewrong");//舊密碼輸入錯誤sk[14]=0;count2=0;count7=0;pass=0;m=0;}}if(pa!=10)&(pass0==1){co[n]=pa;n++;pa=10;}}if(sk[14]==1){if((n>7)&(count==6)){GotoXY(0,0);print("setover!");//舊密碼輸入正確,存新密碼}}開鎖軟件設計開鎖程序流程圖如圖4-4為開鎖流程圖,開始時按開鎖鍵,輸入密碼,如果輸入正確,則開鎖成功。如果輸入錯誤累計達到三次,則執(zhí)行報警程序。

圖4-4開鎖流程圖儲存密碼軟件設計本設計采用AT24C02來存儲密碼,為什么不把密碼放到單片機里存儲呢?只有做的目的只有一個,就是實現(xiàn)斷電保護密碼。在系統(tǒng)一開始運行程序的時候,首先是讀取存儲在AT24C02中的密碼,把它放到一個變量數(shù)組中,以用于密碼的比較。當需要修改密碼的時候,修改密碼成功后的第一件事就把密碼重新存進AT24C02中。具體程序如下:voidwrite_flash(unsignedcharData[],unsignedcharAddress,unsignedcharNum){unsignedchari;unsignedchar*PData;PData=Data;for(i=0;i<Num;i++){Start();Send(AddWr);//WriteAddressAck();Send(Address+i);//WritesubAddressAck();Send(*(PData+i));//WriteDataAck();Stop();mDelay(20);}}//readfromROMvoidread_flash(unsignedcharData[],unsignedcharAddress,unsignedcharNum){unsignedchari;unsignedchar*PData;PData=Data;for(i=0;i<Num;i++){Start();Send(AddWr);//WriteAddressAck();Send(Address+i);//WritesubAddressAck();Start();Send(AddRd);//ReadAddressAck();*(PData+i)=Read();//ReadDataScl=0;NoAck();Stop();}}在主程序中調(diào)用write_flash()和read_flash()這兩個函數(shù)就可以實現(xiàn)對密碼的存和讀操作了。4.6顯示程序設計本系統(tǒng)才用的是LCD12864作為顯示部分,它和其他的顯示的優(yōu)點在方案選擇的部分已經(jīng)討論過了,在這不重復論述。LCD12864有兩種讀寫操作方式,一種是串行的方式,另外一種是并行的。其中并行輸入方式是不是省IO口的只是需要用到5個IO口,而串行則需要用到13個IO口。決定使用什么方式顯示的主要是看PSB電平的高低,要是把它的管腳賦給高電平這是使用并行方式,需要調(diào)用并行對應的程序;反之則是串行方式。兩種方式的讀寫操作時序是不一樣的,需要分別調(diào)用各自相對應的程序。我處于保險考慮,在畫電路圖的時候,PSB接上一個IO口,把D0—D7接到P0口上,這樣我兩種方式都能使用,要是并行不行就用串行。在設計的時候,開始想嘗試使用并行的方式,比較幸運的是,我按照官方提供的資料上的時序來寫程序,下載進去就顯示成功了。以下是程序的讀和寫子程序:voidLCM_WriteDaterCom(bitdat_comm,ucharcontent){uchara,i,j;delay6(50);a=content;LCM_cs=1;LCM_sclk=0;LCM_std=1;for(i=0;i<5;i++){LCM_sclk=1;LCM_sclk=0;}LCM_std=0;LCM_sclk=1;LCM_sclk=0;if(dat_comm)LCM_std=1;//dataelseLCM_std=0;//commandLCM_sclk=1;LCM_sclk=0;LCM_std=0;LCM_sclk=1;LCM_sclk=0;for(j=0;j<2;j++){for(i=0;i<4;i++){a=a<<1;LCM_std=CY;LCM_sclk=1;LCM_sclk=0;}LCM_std=0;for(i=0;i<4;i++){4.5儲存密碼軟件設計LCM_sclk=1;LCM_sclk=0;}}}其中當bitdat_comm的值為0時為寫指令當為1時是讀數(shù)據(jù)。4.7語音模塊的程序系統(tǒng)設計有語言提示功能,每一步操作都有語言提示,即使您不看顯示器依然可以對密碼鎖進行您需要的操作。實現(xiàn)這功能的模塊是SX6288語音模塊;它是通過串口來和單片機進行交流的。SX6288A內(nèi)部具有128x16位的拼音序列緩沖。用戶發(fā)送合成命令后,命令會存放在串口緩沖區(qū)內(nèi),芯片進入忙狀態(tài),對串口緩沖區(qū)內(nèi)的文本進行解析,解析得出的拼音索引數(shù)據(jù)會被存入隊列,然后芯片就會恢復至空閑狀。要是需要播報聲音的時候,通過串口中斷,單片機會把播報的內(nèi)容發(fā)給串口,然后重復上述過程。以下是中斷部分程序:voidCOM_INI(){PCON=0x80;TMOD=0x20;SCON=0x50;TH1=0xfa;TL1=0xfa;TR1=1;TI=1;EA=1;}printf("<G>歡迎您的使用\n");4.8震動防盜的程序設計本設計要求設計一個防撬動報警系統(tǒng)。為了實現(xiàn)這個功能我使用了震動傳感器模塊。震動傳感器采用MEC原裝震動開關SW-18015P,靈敏度高,對環(huán)境震動敏感,一般用來檢測周圍環(huán)境的震動強度。當模塊在無震動或者震動強度達不到設定閾值時,D0口輸出高電平,當外界震動強度超過設定閾值時,模塊D0輸出低電平;因此可以寫程序來檢查D0口電平的高低來確定是否密碼鎖在震動。因為震動這個動作是隨時都有可能發(fā)生的,所以需要用到外部中斷的方式。當震動模塊檢測到有震動發(fā)生時,與D0口連接的IO口被拉低,也就是P32口;然后觸發(fā)外部中斷,接著在中斷里把P24口拉低,這時和P24口相連的另外一個單片機STC12C5608AD的IO口也被拉低;然后就通過發(fā)指令給串口,讓GSM打電話給設點好的號碼,完成整個報警過程。以下是GSM部分程序:#include<reg51.h>sbitkey=P2」;voidinit(){TMOD=0X20;//定時器1方式2,八位自動裝初值方式TL1=0xfd;TH1=0xfd;//裝入初值,波特率為9600;TR1=1;SM0=0;//設置串行通訊工作模式,(10為一部發(fā)送,波特率可變,由定時器1的溢出率控制)SM1=1;//(同上)在此模式下,定時器溢出一次就發(fā)送一個位的數(shù)據(jù)REN=1;//串行接收允許位(要先設置smOsml再開串行允許)}voidSendChars(char*str){while(*str!='\0'){SBUF=*str;while(!TI);〃等待發(fā)送完成信號(TI=1)出現(xiàn)TI=0;str++;}}voiddelay_50ms(intt){intj;for(;t>0;t--)for(j=6245;j>0;j--)}voidmain(){init();//串口初始化key=1;while(!key){SendChars("AT\r");//ati初始化sim300模塊delay_50ms(50);SendChars("AT\r");//撥打號碼10086delay_50ms(50);//等待30秒SendChars("ATH'r");//掛斷電話}}5電路和程序的調(diào)試5.1電路的焊接雖然電路的焊接從大一就開始練了,但是每次焊接都必須仔細認真,因為由于把元器件焊反而導致板子燒壞的事件屢見不鮮。所以我每次焊接時都告訴自己注意以下幾點::.焊前準備首先要熟悉所焊印制電路板的裝配圖,并按圖紙配料,檢查元器件型號、規(guī)格及數(shù)量是否符合圖紙要求,并做好裝配前元器件引線成型等準備工作。.焊接順序元器件裝焊順序依次為:電阻器、電容器、二極管、三極管、集成電路、大功率管,其它元器件為先小后大。.對元器件焊接要求(1)電阻器焊接按圖將電阻器準確裝人規(guī)定位置。要求標記向上,字向一致。裝完同一種規(guī)格后再裝另一種規(guī)格,盡量使電阻器的高低一致。焊完后將露在印制電路板表面多余引腳齊根剪去。(2)電容器焊接將電容器按圖裝人規(guī)定位置,并注意有極性電容器其“+”與“-”極不能接錯,電容器上的標記方向要易看可見。先裝玻璃釉電容器、有機介質(zhì)電容器、瓷介質(zhì)電容器,最后裝電解電容器。(3)二極管的焊接二極管焊接要注意以下幾點:第一,注意陽極陰極的極性,不能裝錯;第二,型號標記要易看可見;第三,焊接立式二極管時,對最短引線焊接時間不能超過2s。(4)三極管焊接注意e、b、c三引線位置插接正確;焊接時間盡可能短,焊接時用鑷子夾住引線腳,以利散熱。焊接大功率三極管時,若需加裝散熱片,應將接觸面平整、打磨光滑后再緊固,若要求加墊絕緣薄膜時,切勿忘記加薄膜。管腳與電路板上需連接時,要用塑料導線。(5)集成電路焊接首先按圖紙要求,檢查型號、引腳位置是否符合要求。焊接時先焊邊沿的二只引腳,以使其定位,然后再從左到右自上而下逐個焊接。對于電容器、二極管、三極管露在印制電路板面上多余引腳均需齊根剪去。5.2電路板的調(diào)試雖然電路和程序看起來比較簡單,但是在做的過程中遇到了不少問題。首先從畫圖開始就遇到了不少問題。因為電腦安裝的是Windows7系統(tǒng),所以安裝不了Protell99這一我們學的專業(yè)軟件。經(jīng)過網(wǎng)上查詢還有另外一款軟件altiumdesigner是完全可以代替protell99的,于是我就按裝了altiumdesigner09這個版本的,花了半個月來看視頻學習怎么使用這個軟件。發(fā)現(xiàn)這個軟件比Protell99好用。在畫圖的過程中遇到了很多問題,都通過百度或者問同學解決了。但是有一個是它系統(tǒng)自身的bug,就是用它來畫PCB的時候,每次想把一個元器件放到底層都會出錯,而且自動退出軟件。而我要畫貼片電容還有貼片的單片機,要是放不到底層就很難畫了,貼片電容沒有什么影響。但是要是畫單片機就不行了。為就解決這個問題我嘗試使用了很多方法,也在網(wǎng)上看了很多資料,都解決不了。身邊同學使用的也是出現(xiàn)這個問題。后來我看到網(wǎng)上有一個評論說altiumdesigners版修復了很多09版的bug,后來我從新安裝了10版才徹底把這個問題給解決。當把板子腐蝕和焊好后,又遇到問題了。插上電發(fā)現(xiàn)電源指示燈不亮,而且板子背后的穩(wěn)壓管AMS1117非常燙,我馬上把掉電源,然后用萬用表來檢查電路,發(fā)現(xiàn)電源的正負極在板子上的任意一點都是導通的。剛開始不知道為什么,然后就檢查一下PCB,發(fā)現(xiàn)PCB也沒有什么問題。后來查一下AMS1117的管腳參數(shù)才知道,原來連錯了。后來把管腳換過來,電路的工作就一切正常了。所以做電路板需要非常注重細節(jié),要是有一點點問題都會導致板子不工作甚至燒壞。當看到屏幕的背影光亮了,以為沒有什么其他的問題了,結(jié)果把程序下載進去發(fā)現(xiàn)不能顯示。檢查就一下程序,keil軟件能編譯,只是有幾個警告。而顯示的子程序已經(jīng)在開發(fā)板上試驗成功了,沒有出現(xiàn)什么問題。調(diào)解對比度滑動電阻也沒有反應,后來把滑動電阻103換成503的,再調(diào)解就慢慢的顯示出文字了。當我想嘗試一下復位的時候發(fā)現(xiàn),按下復位鍵沒有反應。檢查了原理圖和PCB都沒有問題,然后看看電路板上的電路,發(fā)現(xiàn)電阻是10k的,可是電容用的是500uf的,這個太大了根本不可能復位。所以需要換成10uf左右的極性電容。把它更換后,硬件部分沒有問題了。接下來是調(diào)節(jié)程序部分。5.3程序部分調(diào)試6結(jié)論與展望以上為畢業(yè)期間所作的畢業(yè)論文基于單片機的電子密碼鎖設計,在著手本次畢業(yè)設計時,通過查閱網(wǎng)絡與圖書館搜集到的資料,再加上指導老師指點,結(jié)合生活中對密碼鎖的功能特性要求,設計出了這一套電子密碼鎖系統(tǒng)的主要硬件結(jié)構(gòu)和軟件結(jié)構(gòu),基本完成了課題的要求。不過由于了解的專業(yè)知識尚淺,對課題的研究經(jīng)驗的不足,使得在技術(shù)的解決與運用上顯得粗糙了一些,特別是功能按鍵的設定。但因為我的水平有限,此電路中也存在一定的問題。譬如說電路的密碼不能遺忘,一旦遺忘,就很難打開,這可以通過增加電路解決,但由于過于復雜,本設計并未加入。另外由于畫線、電路問題,仿真結(jié)果并未有完成顯示,相關功能也沒有實現(xiàn),所以很遺憾!本次設計的電子密碼鎖是以手動鍵盤輸入密碼的,通過這幾個月對電子密碼鎖的研究學習,發(fā)覺這種密碼輸入方式可以進行改革。在越來越高科技化的今天,遙控控制顯的愈發(fā)重要,今后的電子密碼鎖應該具有以紅外技術(shù)或無線電技術(shù)為輔助的密碼按鍵輸入遠程交互技術(shù),這樣就能遠程輸入密碼完成操作。也可以放棄傳統(tǒng)的按鍵輸入密碼模式,借助傳感器技術(shù)運用聲控來實現(xiàn)密碼輸入,又或者人臉識別技術(shù),還有一種就是用戶指紋輸入方式,這些都可以使開鎖的時間更短更方便。電子密碼鎖產(chǎn)業(yè)將向靜態(tài)功耗更低,外圍電路更簡化,可提供的功能或控制口更多,更人性化高科技化的方向發(fā)展。通過本次畢業(yè)設計的鍛煉,我學到了很多有關電子密碼鎖的設計方法與工作原理,鞏固了單片機知識。無論從選題到定稿,從理論到實踐都使我學到了很多東西,它不僅可以鞏固了以前所學過的知識,而且學到了很多在書本上所沒有學到過的知識。同時也明白了理論與實踐相結(jié)合的重要性,只有理論知識是遠遠不夠的,只有把所學的理論知識與實踐相結(jié)合起來,從理論中得出結(jié)論,才能真正為社會服務,從而提高自己的實際動手能力和獨立思考的能力。致謝以上為實習期間所設計的基于單片機與串行通信的電子密碼鎖,它經(jīng)過多次修改和整理,以是一個比較不錯的設計,可以滿足人們的基本要求,并能簡單的學會使用。但是因為水平有限,此電路中也存在一定的問題,例如說電路的密碼不能遺忘,一旦遺忘,就很難打開,這可以通過增加電路解決,但過于復雜以及、知識的有限,本次設計未能實現(xiàn)。因為是初次設計有許多地方需要改進,如果有好的意見,希望老師能給以支持。在沒有做課程設計以前,覺得課程設計只是對知識的單純總結(jié),但是通過這次課程設計發(fā)現(xiàn)自己的看法有點太片面,課程設計不僅是對前面所學知識的一種檢驗,也是對自己能力的一種提高,通過這次課程設計使自己明白了原來的那點知識是非常欠缺的,要學習的東西還很多,通過這次課程設計,明白學習是一個長期積累的過程,在以后的工作和生活中都應該不斷的學習,努力提高自己的知識和綜合素質(zhì)。在這次課程設計中,同學之間互相幫助,有什么不懂的大家在一起商量,發(fā)現(xiàn)我們所學的知識實在是有限,不過我們能夠充分利用網(wǎng)絡的優(yōu)勢去查閱資料。最后,課程設計中涉及到的電路圖,有的可以用圖片制作工具繪制,但還是水平有限,不能全部做完,只能用別人設計好的,以后要好好學習相關的圖片制作。在整個設計過程中懂得了許多東西,也培養(yǎng)了獨立思考和設計的能力,樹立了對知識應用的信心,相信會對今后的學習工作和生活有非常大的幫助,并且提高了自己的動手實踐操作能力,使自己充分體會到了在設計過程中的成功喜悅。雖然這個設計做的不怎么好,但是在設計過程中所學到的東西是這次課程設計的最大收獲和財富,使我終身受益。經(jīng)過兩個月的忙碌,本次畢業(yè)設計已經(jīng)接近尾聲,在此,我要感謝每一個幫助過我的人。首先,我要感謝的是我的導師歸發(fā)弟老師。歸發(fā)弟平日里工作繁多,但在我做畢業(yè)設計的每個階段,都給予我悉心的指導和幫助。可以說,沒有歸老師的悉心指導和幫助,我是不可能順利完成我的畢業(yè)設計的。另外,他的治學嚴謹和科學研究的精神也是我永遠學習的榜樣,并將積極影響我今后的學習和工作。接著我要感謝四年來,在各位老師孜孜不倦的教導和無微不至的關懷,使我在這四年當中不僅學到了豐富的知識,還學到了處人為事的道理,對我今后的生活學習和工作提供了寶貴的財富。最后我要感謝所有幫助過我的同學,在畢業(yè)設計期間,我們共同研究,互相學習和鼓勵,在良好的科研氛圍中共同完成了設計任務。同時也要感謝應科304班的所有同學在生活學習中帶給我的友情,這將是我大學生活中最美好的回憶。在此,對所有曾給予我?guī)椭睦蠋?、同學、朋友和親人們表示深深的謝意。參考文獻[1]

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論