單片機課程設計報告電子密碼鎖_第1頁
單片機課程設計報告電子密碼鎖_第2頁
單片機課程設計報告電子密碼鎖_第3頁
單片機課程設計報告電子密碼鎖_第4頁
單片機課程設計報告電子密碼鎖_第5頁
已閱讀5頁,還剩60頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

年4月19日單片機課程設計報告電子密碼鎖文檔僅供參考,不當之處,請聯系改正。山東交通學院單片機原理與應用課程設計院(部):軌道交通學院班級:自動化121學生姓名:學號:指導教師:時間:.6.1—.6.12課程設計任務書題目電子密碼鎖設計系(部)軌道交通學院專業班級自動化121學生姓名學號06月01日至06月12日共2周指導教師(簽字)系主任(簽字)年月日一、設計內容及要求本實驗基于51單片機利用矩陣按鍵、步進電機、lcd1602等模塊實現電子密碼鎖的輸入密碼、密碼比對、步進電機的驅動、修改密碼等功能。設計內容包括:1)lcd1602顯示;2)矩陣按鍵的輸入;3)24C08的儲存于讀取;4)步進電機的驅動;5)線路的鏈接。設計要求:1)能演示;2)能回答答辯過程中提問的問題;3)完成設計報告。二、設計原始資料單片機原理及接口技術李全利1月單片機原理及應用教程范立南1月單片機原理及應用教程劉瑞新07月

三、設計完成后提交的文件和圖表1.計算說明書部分1)方案論證報告打印版或手寫版2)程序流程圖3)具體程序2.圖紙部分:具體電路原理圖打印版四、進程安排教學內容學時地點資料查閱與學習討論2天406實驗室分散設計4天406實驗室編寫報告2天406實驗室成果驗收2天406實驗室按分組選擇不同的實驗臺,每組3人,題目可重復選擇,但每題目不得超過10人。五、主要參考資料《電子設計自動化技術基礎》馬建國、孟憲元編清華大學出版4月《單片機原理及接口技術》張毅剛人民郵電出版社.《實用電子系統設計基礎》姜威1月《單片機系統的PROTEUS設計與仿真》張靖武4月指導老師成績答辯小組成績總成績目錄TOC\o"1-2"\h\z\uHYPERLINK摘要1HYPERLINK1.設計要求2HYPERLINK2.功能概述23.總體設計2HYPERLINK4.硬件設計3HYPERLINK4.1矩陣按鍵設計3HYPERLINK4.2LCD顯示設計4HYPERLINKHYPERLINK4.3步進電機模塊設計5HYPERLINKHYPERLINK4.4密碼修改設計5 4.5密碼比較模塊6HYPERLINK5.軟件設計及流程圖6HYPERLINK6.個人體會8HYPERLINK7.參考文獻9附錄10摘要設計運用了ATMEL公司的AT89S52芯片系統,將微處理器、總線、蜂鳴器、矩陣鍵盤、存儲器和I/O口等硬件集中一塊電路板上,經過讀取鍵盤輸入的數據(密碼)并儲存到ATMEL91224C08存儲器中,然后判斷之后鍵盤輸入的數據與已存儲的數據是否相同來決定打開密碼箱或鎖鍵盤或報警。在keil4軟件中編程,系統可實現6位密碼的處理,并經過控制步進電機控制密碼箱門的電子鎖,同時還能夠修改改密碼。利用單片機系統制作的密碼箱安全性能更高,更易操作且體積小。關鍵詞:單片機、密碼鎖、修改密碼1.設計要求本實驗將實現六位數的電子密碼鎖。要求使用4X4行列式鍵盤作為輸入,并用LCD實時顯示。具體要求如下:1.開機時LCD顯示“welcometouse”,初始化密碼為“123456”,密碼能夠更改。2.按下“10”,開始則顯示“EnterPlease:”。3.隨時能夠輸入數值,并在LCD上實時顯示‘*’。當鍵入數值時,為了保密按從左到右依次顯示‘*’,可鍵入值為0~9。4.按下“13”鍵,則表示確定鍵按下,進行密碼對比。如相符則在LCD第一行顯示“Openthedoor!”,同時指示燈亮起而且步進電機旋轉一定的角度;如不符,則LCD第一行顯示“Wrongpassword!”,而且蜂鳴器同時提示一下。如果密碼連續三次錯誤則蜂鳴器連續響5下,而且持續5秒不能進行任何操作5.在開鎖狀態下按下“12”鍵,進入修改密碼狀態,LCD同時提示“Enternewcode!”。6.14為刪除按鍵,出入之后能夠進行刪除。7.15按鍵為關閉按鍵,只有在打開狀態下才能夠關閉,按下之后LCD顯示“Closethedoor!”。2.功能概述此設計分為四個功能模塊。第一模塊:按鍵輸入模塊,用于密碼的輸入以及其它的密碼操作按鍵。第二模塊:LCD模塊,是與使用者交流的界面,用于顯示各種狀態下的內容。第三模塊:步進電機模塊,用于控制密碼鎖的打開與關閉。第四模塊:24C08模塊,用于儲存輸入的密碼并讀出來。總體設計本次設計作品的主要構成部分包括80C51單片機、LCD1602、24C08、矩陣按鍵、LED等、蜂鳴器。如圖1總體仿真圖,圖2實物圖。圖1總體電路圖圖2密碼鎖實物圖4.硬件設計4.1矩陣按鍵設計如圖3所示矩陣按鍵由P1口控制,了加強密碼的保密性,采用一個4×4的矩陣式鍵盤能夠任意設置用戶密碼(1-16位長度),從而提高了密碼的保密性,同時也能減少與單片機接口時所占用的I/O口線的數目,節省了單片機的寶貴資源,在按鍵比較多的時候,一般采用這種方法。每一行與每一列的交叉處不相同,而是經過一個按鍵來連通,利用這種行列式矩陣結構只需要N根行線與M根列線,即可組成具有N×M個按鍵的矩陣鍵盤。在這種行列式矩陣鍵盤編碼的單片機系統中,鍵盤處理程序首先執行等待按鍵并確認有無按鍵按下的程序段。當確認有按鍵按下后,下一步就是要識別哪一個按鍵被按下。對鍵的識別方法一般有兩種:一種是通用的組行掃描查詢法;另一種是速度較快的線反轉法。此系統中,我們采用線反轉法。首先辨別鍵盤中有無按鍵被按下,在單片機I/O口向鍵盤送全掃描字,然后讀入行線狀態來判斷。具體方法是:向行線輸出全掃描字00H,把全部列線置成低電平,然后將列線的電平狀態讀入累加器A中。如果有按鍵被按下,總會有一根行線電瓶被拉至低電平從而使行線不全為1。判斷鍵盤中哪一個按鍵被按下一般是經過將列線逐列至低電平后,檢查行輸入狀態來實現的。方法是:依次給列線送低電平,然后檢查所有行線狀態,如果全為1,則所按下的按鍵不在此列;如果不全為1,則所按下的按鍵必在此列,而且是在與零電平行線相交的交點上的那個按鍵。圖3矩陣按鍵電路4.2LCD顯示設計顯示電路是為了給使用者以提示而設置的,顯示部分由液晶顯示器LCD1602(如圖4所示)取代普通的數碼管完成。P0口作為數據傳輸口P2.0、P2.1、P2.2分別連接RS、RW、E。開鎖時,按下鍵盤上的開鎖按鍵后,利用鍵盤上的數字鍵0-9輸入密碼,每按下一個數字鍵后在顯示器上顯示一個*,輸入多少位就顯示多少個*。當密碼輸入完成時,如果輸入的密碼正確的話,LCD顯示“openthedore!”。如果密碼不正確,LCD顯示屏會顯示“Wrongpassword!”,同時紅燈亮起。經過LCD顯示屏,能夠清楚地判斷出密碼鎖所處的狀態。圖4LCD顯示屏4.3步進電機模塊設計步進電機是一種將電脈沖轉化為角位移的執行機構。通俗一點講:當步進驅動器接收到一個脈沖信號,它就驅動步進電機按設定的方向轉動一個固定的角度步進角。您能夠經過控制脈沖個來控制角位移量,從而達到準確定位的目的;同時您能夠經過控制脈沖頻率來控制電機轉動的速度和加速度,從而達到調速的目的。步進電機28BYJ48型四相八拍電機,電壓為DC5V—DC12V。當對步進電機施加一系列連續不斷的控制脈沖時,它能夠連續不斷地轉動。每一個脈沖信號對應步進電機的某一相或兩相繞組的通電狀態改變一次,也就對應轉子轉過一定的角度(一個步距角)。當通電狀態的改變完成一個循環時,轉子轉過一個齒距。四相步進電機能夠在不同的通電方式下運行,常見的通電方式有單(單相繞組通電)四拍(A-B-C-D-A...),雙(雙相繞組通電)四拍(AB-BC-

CD-DA-AB-...),八拍(A-AB-B-BC-C-CD-D-DA-A...)。如圖4所示。由ULN來控制,ULN的1、2、3、4引腳分別連接P3.0、P3.1、P3.2、P3.3口。圖5步進電機模塊4.4密碼修改設計EEPROM×82.5~10ms圖5中AT24C02的1、2、3腳是三條地址線,用于確定芯片的硬件地址。在AT89C51試驗開發板上它們都接地,第8腳和第4腳分別為正、負電源。第5腳SDA為串行數據輸入/輸出,數據經過這條雙向I2C總線串行傳送,在AT89C51試驗開發板上和單片機的P3.5連接。第6腳SCL為串行時鐘輸入線,在AT89C51試驗開發板上和單片機的P3.4連接。SDA和SCL都需要和正電源間各接一個5.1K的電阻上拉。第7腳需要接地。經過使用24C02便能夠實現對密碼的儲存于讀取進一步實現密碼鎖的改密碼功能。圖6AT24C024.5密碼比較設計該模塊將輸入密碼字符串與設定密碼字符串比較。如果相同,執行開鎖動作并將輸入錯誤次數清零;如果不同,累計錯誤次數,如果是第三次輸入錯誤,系統鎖死并發出聲光告警;如果小于三次,顯示密碼錯誤信息,返回密碼輸入環節。邏輯框圖如圖6所示。模塊啟動模塊啟動驗證密碼判斷錯誤次數顯示錯誤而且鎖定10秒發出報警系統鎖死作出相應的動作連續錯誤次數小于三次密碼正確密碼錯誤圖7密碼比較流程圖軟件設計及流程圖系統的軟件設計采用匯編語言編碼。設計方法是先用文本編輯器編寫源碼,然后用軟件KeilC51編譯,如果沒有錯誤,可連接生成.HEX格式的文件。如果有錯誤則無法連接,但可在生成的.OBJ文件中找到代碼錯誤的地方,便于修改。當然也能夠直接在Keil中編碼。生成的HEX文件是記錄文本行的ASCII文本文件,在HEX文件中,每一行是一個HEX記錄,由十六進制數組成的機器碼或者數據常量。HEX文件經常被用于將程序或數據傳輸存儲到ROM、EPROM,大多數編程器和模擬器使用HEX文件。圖8單片機控制總體電路圖7為單片機控制總體電路,圖8軟件運行流程圖。圖9軟件運行流程圖6.個人體會經過這次課程設計,讓我更加深刻了解課本知識,和以往對知識的疏忽得以補充,在設計過程中遇到一些模糊的操作和專業用語,比如說單片機定時器,以及中斷的選擇,經過對單片機的操作實現自己設計的功能,在使用手冊時,有的數據很難查出,可是這些問題經過這次設計,都一一得以解決,我相信單片機這本書中還有很多我為搞清楚的問題,可是這次的課程設計給我相當的基礎知識,為我以后工作打下了嚴實的基礎。雖然這次課程是那么短暫的2周時間,我感覺到這些天我的所學勝過我這一學期所學,這次任務原則上是設計,其實就是一次大的作業,是讓我對課本知識的鞏固和應用,對程序的設計,修改以及調試,使我做事的耐心和仔細程度得以提高。課程設計是培訓學生運用本專業所學的理論知識和專業知識來分析解決實際問題的重要教學環節,是對三年所學知識的復習和鞏固。同樣,也促使了同學們的相互重來,我可能會認真的去學習和研究,也可能會自己獨立的完成一個項目,我相信無論是誰看到自己做出的成果時心里一定會很興奮。此次設計讓我明白了一個很深刻的道理:團隊精神固然很重要,但人往往還是要靠自己的努力,自己親身去經歷,這樣自己的心里才會踏實,學到的東西才會更多。參考文獻[1]馬建國、孟憲元.電子設計自動化技術基礎.機械工業出版社..[2]姜威.實用電子系統設計基礎.北京理工大學出版社..[3]張靖武.單片機系統的PROTEUS設計與仿真.電子工業出版社..[4]孫福成.KEILC項目教程.西安電子科技大學出版社..[5]張毅剛.單片機原理及接口技術.人民郵電出版社..8.附錄:源程序#include<reg51.h>#include<intrins.h>#define OP_READ 0xa1 //器件地址以及讀取操作,0xa1即為10100001B#define OP_WRITE0xa0 //器件地址以及寫入操作,0xa1即為10100000B#defineuintunsignedint#defineucharunsignedchar#defineKEYP1#defineNo_key20#definelcddataP0sbitSDA=P3^5;//將串行數據總線SDA位定義在為P3.5引腳sbitSCL=P3^4;//將串行時鐘總線SDA位定義在為P3.4引腳sbitlcden=P2^2;sbitlcdrs=P2^0;sbitlcdrw=P2^1;sbitlight=P2^3;sbitlight1=P2^4;sbitdeng=P3^7;sbitBEEP=P3^6;ucharj,z,y,j1,j2; //h使用修改后的密碼開鎖標志位ucharn=0,h=0; //中間標志位用于傳遞信息保證密碼修改過后按復位按鍵密碼修改標志位不改變ucharaa;ucharcodeFFW[8]={0xf1,0xf3,0xf2,0xf6,0xf4,0xfc,0xf8,0xf9};ucharcodeREV[8]={0xf9,0xf8,0xfc,0xf4,0xf6,0xf2,0xf3,0xf1};//反轉編碼ucharcodetable[]="Welcometouse!";ucharcodetable1[]="Openthedoor!";ucharcodetable2[]="EnterPlease:";ucharcodetable3[]="Closethedoor!";ucharcodetable4[]="Wrongpassword!";ucharcodetable5[]="Enternewcode!";ucharcodetable6[]="Newcodefinish";ucharcodekey_table[16]={1,2,3,10, 4,5,6,11, 7,8,9,12, 0,13,14,15};ucharPassword[]={1,2,3,4,5,6};//設置的初始密碼ucharsave[15];ucharmima[15];ucharconflag; //確認標志ucharlockflag; //鍵盤鎖定標志ucharstartflag; //開始標志ucharopen;//門打開標志位ucharbegain; //開始標志voiddelay1(uintt);voiddelay(uintz);voidwright_com(ucharcom); //寫命令函數voidwright_data(uchardate);//寫數據函數voidinit();//初始化函數voiddisplay_open(); //顯示openthedoorvoiddisplay_close(); //顯示closethedoorvoiddisplay_wrong();voiddisplay_newcode(); //顯示輸入新密碼voiddisplay_codefinish();//顯示新密碼成功voiddelete(); //刪除輸入的最后一個數ucharkeyscan(); //帶返回值的鍵盤掃描程序voidenter_code(uchart); //voidenter_code1(uchart);voidenter_code2(uchart);voidconfirm(); //確認密碼對不對,把輸入的數據與密碼逐一對比voidconfirm1();voidsucceed_an(); //密碼正確時的響應voidfail_an(); //密碼失敗時的響應voidalarm(); //發出警報聲voidreset(); //復位函數voidreset_save();voiddisplay_enter(); //顯示輸入voidmotor_ffw();voidmotor_rev();/*****************************************************函數功能:延時1ms(3j+2)*i=(3×33+2)×10=1010(微秒),能夠認為是1毫秒***************************************************/voiddelay1ms(){uchari,n; for(i=0;i<10;i++) for(n=0;n<33;n++) ; }/*****************************************************函數功能:延時若干毫秒入口參數:n***************************************************/voiddelaynms(uintn){uchari; for(i=0;i<n;i++) delay1ms();}voidstart()//開始位{ SDA=1;//SDA初始化為高電平“1”SCL=1;//開始數據傳送時,要求SCL為高電平“1” _nop_();//等待一個機器周期 _nop_();//等待一個機器周期 _nop_();//等待一個機器周期 _nop_();//等待一個機器周期 SDA=0;//SDA的下降沿被認為是開始信號 _nop_();//等待一個機器周期 _nop_();//等待一個機器周期 _nop_();//等待一個機器周期 _nop_();//等待一個機器周期 SCL=0;//SCL為低電平時,SDA上數據才允許變化(即允許以后的數據傳遞)}voidstop()//停止位{ SDA=0;//SDA初始化為低電平“0” _n SCL=1;//結束數據傳送時,要求SCL為高電平“1” _nop_();//等待一個機器周期 _nop_();//等待一個機器周期 _nop_();//等待一個機器周期 _nop_();//等待一個機器周期 SDA=1;//SDA的上升沿被認為是結束信號 _nop_();//等待一個機器周期 _nop_();//等待一個機器周期 _nop_();//等待一個機器周期 _nop_();//等待一個機器周期 SDA=0; SCL=0;}//**********從AT24Cxx讀取數據********unsignedcharReadData()//從AT24Cxx移入數據到MCU{ unsignedchari; unsignedcharx;//儲存從AT24Cxx中讀出的數據 for(i=0;i<8;i++) { SCL=1;//SCL置為高電平 x<<=1;//將x中的各二進位向左移一位 x|=(unsignedchar)SDA;//將SDA上的數據經過按位“或“運算存入x中 SCL=0;//在SCL的下降沿讀出數據 } return(x);//將讀取的數據返回}//*******函數功能:向AT24Cxx的當前地址寫入數據********//在調用此數據寫入函數前需首先調用開始函數start(),因此SCL=0bitWriteCurrent(unsignedchary){ unsignedchari; bitack_bit;//儲存應答位 for(i=0;i<8;i++) //循環移入8個位 { SDA=(bit)(y&0x80);//經過按位“與”運算將最高位數據送到S //因為傳送時高位在前,低位在后 _nop_();//等待一個機器周期 SCL=1;//在SCL的上升沿將數據寫入AT24Cxx_nop_();//等待一個機器周期 _nop_();//等待一個機器周期 SCL=0;//將SCL重新置為低電平,以在SCL線形成傳送數據所需的8個脈沖 y<<=1;//將y中的各二進位向左移一位 } SDA=1; //發送設備(主機)應在時鐘脈沖的高電平期間(SCL=1)釋放SDA線, //以讓SDA線轉由接收設備(AT24Cxx)控制 _nop_();//等待一個機器周期 _nop_();//等待一個機器周期 SCL=1;//根據上述規定,SCL應為高電平 _nop_();//等待一個機器周期 _nop_();//等待一個機器周期 _nop_();//等待一個機器周期 _nop_();//等待一個機器周期 ack_bit=SDA;//接受設備(AT24Cxx)向SDA送低電平,表示已經接收到一個字節 //若送高電平,表示沒有接收到,傳送異常 SCL=0;//SCL為低電平時,SDA上數據才允許變化(即允許以后的數據傳遞) returnack_bit; //返回AT24Cxx應答位}//***************向AT24Cxx中的指定地址寫入數據*****************)voidWriteSet(unsignedcharadd,unsignedchardat)//在指定地址addr處寫入數據WriteCurrent{ start();//開始數據傳遞 WriteCurrent(OP_WRITE);//選擇要操作的AT24Cxx芯片,并告知要對其寫入數據 WriteCurrent(add);//寫入指定地址 WriteCurrent(dat);//向當前地址(上面指定的地址)寫入數據 stop();//停止數據傳遞 delaynms(4); //1個字節的寫入周期為1ms,最好延時1ms以上}unsignedcharReadCurrent()//從AT24Cxx中的當前地址讀取數據{ unsignedcharx; start();//開始數據傳遞 WriteCurrent(OP_READ);//選擇要操作的AT24Cxx芯片,并告知要讀其數據 x=ReadData();//將讀取的數據存入x stop();//停止數據傳遞 returnx;//返回讀取的數據}unsignedcharReadSet(unsignedcharset_addr)//從AT24Cxx中的指定地址讀取數據{ start();//開始數據傳遞 WriteCurrent(OP_WRITE);//選擇要操作的AT24Cxx芯片,并告知要對其寫入數據 WriteCurrent(set_addr);//寫入指定地址 return(ReadCurrent());//從指定地址讀出數據并返回}voidgaimima()//****改密碼程序****{ uchartemp,i; SDA=1; SCL=1; if(z==1) { while(1) { temp=keyscan(); enter_code(temp); if(temp==13) { for(i=0;i<6;i++) { WriteSet(i,save[i]); delaynms(10); } for(i=0;i<6;i++) { mima[i]=ReadSet(i); delaynms(10); } display_codefinish(); reset_save(); break; } if(temp==14) { delete(); } } }}voidmain(void){ uchartemp; y=0; open=1; //open門開關標志位1為關閉0為打開 while(1) { init(); if(h==1) { deng=0; } while(1) { begain=0; if(lockflag) { temp=keyscan();//按鍵期間也要進行鍵盤掃描 if(temp!=No_key)//重新計時三秒 { aa=0;//重新在定時器中計數 } } else { temp=keyscan();//重復掃描輸入,等待隨時輸入 if(temp!=No_key)//有按鍵按下才能進行下一步 { if(temp==10&&open==1) { reset(); startflag=1;//開始標志位 } if(startflag) { if(h==0) //更改密碼前的密碼確認 { enter_code(temp);//每掃描一次鍵盤就要進行一次處理保存輸入的數值 if(temp==13&&open==1)//按下確認鍵進行密碼確認 { confirm(); //進行確認判斷 if(conflag) { succeed_an();//密碼正確作出相應的反應 open=0; z=1; reset_save(); } else { fail_an();//密碼錯誤作出相應的反應 } } } else //更改密碼后的密碼確認 { enter_code(temp);//每掃描一次鍵盤就要進行一次處理保存輸入的數值 if(temp==13&&open==1)//按下確認鍵進行密碼確認 { confirm1(); //進行確認判斷 if(conflag) { succeed_an();//密碼正確作出相應的反應 open=0; z=1; } else { fail_an();//密碼錯誤作出相應的反應 } } } if(temp==14) { delete(); } if(temp==12&&z==1) { reset(); display_newcode(); gaimima(); h=1; //改密碼成功標志位 用于以后選擇密碼對比 } if(temp==15&&z==1) { ucharr; open=1; display_close(); for(r=0;r<18;r++) { motor_rev();//電機反轉 } } } } } if(temp==11&&begain==0&&open==1) { begain=1; break; } } }}voidmotor_rev() //電機反轉函數{ uchari; uintj; z=0; for(j=0;j<8;j++)//轉1×n圈 { for(i=0;i<8;i++)//一個周期轉45度 { P3=REV[i];//取數據 delay1(2);//調節轉速 } }}voidmotor_ffw() //電機轉動函數{uchari;uintj;for(j=0;j<8;j++)//轉1*n圈{for(i=0;i<8;i++)//一個周期轉45度{P3=FFW[i];//取數據delay1(2);//調節轉速}}}voiddisplay_enter() //顯示enter{ ucharnum; wright_com(0x80); for(num=0;num<15;num++) { wright_data(table2[num]); }}voiddisplay_close() //顯示close{ ucharnum; wright_com(0x80); for(num=0;num<15;num++) { wright_data(table3[num]); }}voiddisplay_open() //顯示open{ ucharnum; wright_com(0x80); for(num=0;num<15;num++) { wright_data(table1[num]); }}voiddisplay_wrong() //顯示wrong{ ucharnum; wright_com(0x80); for(num=0;num<15;num++) { wright_data(table4[num]); }}voiddisplay_newcode() //顯示輸入新密碼{ ucharnum; wright_com(0x80); for(num=0;num<15;num++) { wright_data(table5[num]); }}voiddisplay_codefinish() //顯示新密碼完成{ ucharnum; wright_com(0x80); for(num=0;num<15;num++) { wright_data(table6[num]); }}voiddelete() //刪除最后一個{ wright_com(0x80+0x40+j-1);//確定刪除對象 wright_data(''); //顯示空格即為刪除 save[--j]=0; //刪除后數據清零 wright_com(0x80+0x40+j);//為下次輸入數據時寫好位置}voidreset()//復位函數{ ucharnum; display_enter(); wright_com(0x80+0x40);//擦除屏幕上的顯示 for(num=0;num<15;num++) { save[num]=0;//對輸入的數值進行清零 wright_data(''); } wright_com(0x80+0x40); lockflag=0; conflag=0; j=0;}voidreset_save(){ ucharnum; wright_com(0x80+0x40);//擦除屏幕上的顯示 for(num=0;num<15;num++) { save[num]=0;//對輸入的數值進行清零 wright_data(''); } wright_com(0x80+0x40);}voidsucceed_an() //輸入密碼正確進行響應的函數{ ucharr; light=0; display_open(); for(r=0;r<18;r++) { motor_ffw();//電機正轉 } delay(1000); light=1; }voidfail_an() //輸入密碼錯誤進行響應的函數{ ucharj,i=0; while(1) { light1=0; display_wrong(); for(j=3000;j>0;j--)//蜂鳴器響大約500MS { BEEP=~BEEP; delay(1); //延時500US 發出大約1KHZ頻率的響聲 } BEEP=1;//蜂鳴器不響 delay(500); light1=1; break; } y++; if(y==3) { while(1) { light1=0; display_wrong(); for(j=3000;j>0;j--)//蜂鳴器響大約500MS { BEEP=~BEEP; delay(1); //延時500US 發出大約1KHZ頻率的響聲 } BEEP=1;//蜂鳴器不響 delay(500); light1=1; i++; if(i==4) { break; } } lockflag=1; }}voidenter_code(uchart)//輸入密碼并在屏幕上顯示星號{ if(t>=0&&t<10) { if(j==0) { wright_com(0x80+0x40); wright_data('*'); } else { wright_data('*'); } save[j++]=t; }}voidconfirm()//校對密碼以確定是否正確函數{ uchark; for(k=0;k<6;k++) { if(Password[k]!=save[k]) { break; } } if(k==6) { conflag=1; }}voidconfirm1()//校對密碼以確定是否正確函數{ uchark; for(k=0;k<6;k++) { if(save[k]!=mima[k]) { break; } } if(k==6) { conflag=1; }}voidtimer0()interrupt1{ TH0=(65536-50000)/256; TL0=(65536-50000)%256; if(lockflag) { y=0; aa++; light1=0; if(aa>=200) { aa=0; light1=1; lockflag=0; } }}voidinit()//初始化{ ucharnum; open=1; TMOD=1; TH0=(65536-50000)/256; TL0=(65536-50000)%256; ET0=1; EA=1; TR0=1; lcdrw=0; lcden=0; wright_com(0x38); wright_com(0x0c); wright_com(0x01); wright_com(0x80); for(num=0;num<15;num++) { wright_data(table[num]); delay(1); } }voidwright_com(ucharco

溫馨提示

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

評論

0/150

提交評論