版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、<p><b> 學(xué)號:</b></p><p><b> 姓名: </b></p><p><b> 學(xué)院:</b></p><p><b> 指導(dǎo)老師: </b></p><p><b> 日期:</b><
2、;/p><p><b> 單片機(jī)實(shí)現(xiàn)密碼鎖</b></p><p> 自動化學(xué)院 </p><p> 摘要:隨著科技的發(fā)展和社會生活水平的提高,人們對日常生活中安全保險(xiǎn)器件的要求越來越高,電子安全密碼鎖是基于這一要求的保險(xiǎn)器件。目前使用的密碼鎖種類繁多,如指紋密碼鎖、紅外密碼鎖、GPS密碼鎖等,各具特色。本文從經(jīng)濟(jì)
3、實(shí)用的角度出發(fā),介紹了如何采用AT89C51單片機(jī),設(shè)計(jì)一款具有報(bào)警功能的電子密碼鎖。該設(shè)計(jì)方法合理,簡單易行,成本低,適用于家庭、賓館、辦公室等場所。</p><p> 關(guān)鍵字:單片機(jī)密碼鎖報(bào)警</p><p> Abstract :With technological development and social improvement of living standards,
4、 people in daily life-safe devices have become increasingly demanding, electronic security locks is based on the requirements of the insurance device. Currently use a wide range of locks, such as fingerprint lock, passwo
5、rd lock infrared, GPS lock and other distinguishing features. This article from the economical point of view, describes how to use AT89C51 single-chip, designed with an electronic lock with alarm </p><p> K
6、eywords: MCU Password Lock Alarm</p><p><b> 概述</b></p><p> 本文介紹了采用AT89C51單片機(jī)設(shè)計(jì)一款電力密碼鎖,它具有按鍵提示、輸入錯誤提示、密碼顯示、密碼出錯報(bào)警、控制開鎖、密碼重置等功能,具體功能如下:</p><p> 密碼輸入:用戶通過鍵盤輸入正確密碼后,
7、系統(tǒng)自動解鎖。使用確定按鍵結(jié)束密碼輸入,使用退格鍵可以返回前面某處重新輸入密碼,使用閉鎖鍵可以使密碼鎖重新閉鎖。</p><p> 提示與報(bào)警:系統(tǒng)使用不同的聲音作為用戶不同操作的提。短叫一聲表示有按鍵輸入,長叫一聲表示密碼正確,長叫5S表示密碼錯誤,長叫3min表示連續(xù)三次輸入密碼錯誤。</p><p> 數(shù)碼管顯示:系統(tǒng)使用6位字符表示有關(guān)信息。第一個(gè)字符表示功能,P表示密碼鎖處于
8、閉鎖狀態(tài),等待用戶輸入開鎖密碼;|-表示系統(tǒng)已開鎖;顯示A表示密碼多次錯誤而報(bào)警。</p><p> 電子鎖控制:當(dāng)用戶輸入正確密碼后,系統(tǒng)開鎖;否則系統(tǒng)閉鎖。當(dāng)系統(tǒng)處于開鎖狀態(tài)時(shí),可以使用按鍵閉鎖。</p><p> 密碼重置:當(dāng)用戶在開鎖狀態(tài)下時(shí),可以通過密碼重置鍵進(jìn)入密碼重置模式,連續(xù)兩次輸入密碼正確之后,重置密碼成功,原密碼失效,新密碼生效。</p><p&
9、gt;<b> 設(shè)計(jì)思路及流程</b></p><p> 根據(jù)上述功能介紹,密碼鎖系統(tǒng)可以分為用戶密碼輸入、顯示和控制報(bào)警3大功能,因此可以鍵盤模塊、顯示模塊、報(bào)警模塊、電子鎖控制模塊和單片機(jī)模塊。系統(tǒng)模塊圖如圖1所示。</p><p> 各模塊設(shè)計(jì)思路如下:</p><p> 2.1、鍵盤設(shè)計(jì)。密碼鍵有10個(gè)(0~9),功能鍵有3個(gè),
10、一個(gè)共需要13個(gè)按鍵,因此系統(tǒng)采用4×4的行列矩陣鍵盤,可安裝16個(gè)按鍵,足夠滿足要求。</p><p> 2.2、數(shù)碼管設(shè)計(jì)。系統(tǒng)只需6為數(shù)碼管顯示器,為了簡化設(shè)計(jì),采用動態(tài)顯示方法。</p><p><b> 硬件電路設(shè)計(jì)</b></p><p> 3.1、鍵盤電路設(shè)計(jì)</p><p> 按鍵模塊采
11、用4×4行列矩陣結(jié)構(gòu),由4條行線和4條列線構(gòu)成。行線和列線共有16個(gè)交叉點(diǎn)每個(gè)交叉點(diǎn)可以放置一個(gè)按鍵,這樣共可以放置16個(gè)按鍵。按鍵電路如圖2所示。</p><p><b> 圖2</b></p><p> KEYL0~KEYL3為行線,分別接單片機(jī)的P2.0~P2.3;KEYR0~KEYR3為列線,分別接單片機(jī)的P2.4~P2.7。軟件編程采用線翻轉(zhuǎn)法
12、,該方法要求行線和列線上 都有上拉電阻。由于AT89C51單片機(jī)的P2口內(nèi)部集成了上拉電阻,所以系統(tǒng)未加。圖中順序前十個(gè)按鍵為0~9,最后3個(gè)按鍵分別為退格鍵、閉鎖鍵和確認(rèn)鍵。</p><p> 3.2、顯示電路設(shè)計(jì)</p><p> 顯示電路由6個(gè)共陽極數(shù)碼管構(gòu)成。軟件編程時(shí)采用動態(tài)顯示方法,其結(jié)構(gòu)圖如圖3所示。</p><p><b> 圖3&l
13、t;/b></p><p> 軟件編程時(shí),按照下面的步驟顯示字符:</p><p> ?。?)、首先從P0口輸出共陽極字符的段碼;</p><p> (2)、然后從LCONi輸出低電平。</p><p> 3.3、報(bào)警電路設(shè)計(jì)</p><p> 報(bào)警電路主要由PNP三極管和蜂鳴器構(gòu)成。報(bào)警電路圖如圖4所示
14、。</p><p><b> 圖4</b></p><p> LS1為一個(gè)5V的壓電蜂鳴器,當(dāng)對其1、2號引腳施加5V電壓時(shí),便會鳴叫。由圖4可知,當(dāng)ALARMCON輸出低電平時(shí),三極管飽和導(dǎo)通,蜂鳴器鳴叫;當(dāng)ALARMCON輸出高電平時(shí),三極管飽截止,蜂鳴器停止鳴叫。通過控制ALARMCON輸出低電平的時(shí)間長短來控制蜂鳴器長叫或短叫。</p>&l
15、t;p> 3.4、電子鎖控制電路</p><p> 電子鎖控制電路主要由繼電器、三極管和發(fā)光二極管構(gòu)成。電子鎖控制電路圖如圖5所示。</p><p><b> 圖5</b></p><p> 繼電器線圈的一個(gè)引腳接電源正極,另一端接NPN三極管的集電極。三極管的基極通過一個(gè)電阻接單片機(jī)的引腳。當(dāng)LOCKCON輸出高電平時(shí),三極管導(dǎo)
16、通,繼電器線圈得電,觸點(diǎn)閉合,發(fā)光二極管發(fā)光,相當(dāng)于電子鎖閉鎖;當(dāng)LOCKCON輸出低電平時(shí),三極管截止,繼電器線圈失電,觸點(diǎn)釋放,發(fā)光二極管熄滅,相當(dāng)于電子鎖開鎖。圖中普通二極管是繼電器線圈的續(xù)流二極管,為感應(yīng)電動勢提供回路,以免損壞三極管。</p><p><b> 3.5、單片機(jī)電路</b></p><p> 單片機(jī)電路主要由單片機(jī)、振蕩電路和復(fù)位電路構(gòu)成。
17、由于AT89C51內(nèi)部集成了12MHz的振蕩電路,所以系統(tǒng)外部未加。單片機(jī)電路圖如圖6所示。</p><p><b> 圖6</b></p><p> AT89C51單片機(jī)的P0口用于輸出顯示器段碼。P1口的P1.0~P1.5用于6個(gè)LED的亮與滅。P2口用于構(gòu)成行列矩陣鍵盤。P3.3用于控制蜂鳴器的鳴叫。P3.5用于控制電子鎖的開閉。</p>&l
18、t;p><b> 軟件設(shè)計(jì)</b></p><p> 軟件設(shè)計(jì)主要是對鍵盤進(jìn)行掃描,根據(jù)按鍵控制報(bào)警電路、電子鎖電路,并將結(jié)果顯示。因此整個(gè)軟件分為按鍵子程序、顯示子程序、報(bào)警子程序、電子鎖控制子程序及主程序。</p><p> ////////常量、變量說明/////////////////////////////////////////////////
19、////////</p><p> #include<REG51.H></p><p> typedefunsigned char uchar;</p><p> typedef unsigned int uint;</p><p> ///鍵盤子程序相關(guān)說明</p><p> #define
20、BLANKCHAR 10 //定義空白常量</p><p> #define PCHAR 11 //定義字符P常量</p><p> #define OPENCHAR 12 //定義開鎖字符┣常量</p><p> #define ALARMCHAR 13 //定義字符A常量</p><p> #define LIN
21、ECHAR 14 //定義字符-常量</p><p> #define SETCHAR 15 //定義字符B常量</p><p> #define BACKKEY 0X0D //定義退格鍵常量</p><p> #define ENTERKEY 0X0F //定義確定鍵常量</p><p> #define LOC
22、KKEY 0X0E //定義閉鎖鍵常量</p><p> #define SETKEY 0X0C //定義設(shè)定鍵常量</p><p> #define NO_KEY 20 //定義無按鍵返回常量</p><p> #define KEYPORT P2 //定義鍵盤端口</p><p> uchar KeyPre;
23、 //保存上次掃描按鍵的鍵值</p><p> uchar KeyUp; //用于控制按鍵去抖動操作</p><p> #define LEDPORT P0 //定義顯示器段碼輸出端口</p><p> #define LEDCON P1 //定義顯示器位碼輸出端口</p><p> uchar co
24、de SEGCODE[]=</p><p> {0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90,//0……9的共陽極段碼</p><p> 0XFF,//不顯示的共陽極段碼</p><p> 0X8C,//字符P的共陽極段碼</p><p> 0X8F,//┣的共陽極段碼&l
25、t;/p><p> 0X88,//字符A的共陽極段碼</p><p> 0XBF, //字符-的共陽極段碼</p><p><b> 0X00};</b></p><p> //LED位碼 </p><p> uchar code BITCODE[]={0X01,0X02,0X04,
26、0X08,0X10,0X20,0X40,0X80};</p><p> uchar DispBuf[6]; //保存顯示的字符</p><p> bit DispNormal;//控制顯示時(shí)是正常顯示還是閃爍顯示</p><p> uchar DispCnt;//控制閃爍顯示的頻率</p><p> #define LONG
27、_TIME 200 //蜂鳴器響2s</p><p> #define SHORT_TIME 20//蜂鳴器響200ms </p><p> #define LONGER_TIME 18000//蜂鳴器響3min</p><p> sbit ALARMCON=P3^4; //定義報(bào)警控制引腳</p><p>
28、bit AlarmEnable; //定義是否報(bào)警或聲音提示</p><p> uint AlarmTime; //定義報(bào)警時(shí)間長度</p><p> sbit LOCKCON=P3^3; //定義電子鎖控制引腳</p><p> uchar PassWord[]={1,2,2,2,1}; //定義初始密碼表</p>&l
29、t;p> uchar PassInBuf[6]; //保存輸入的密碼字符</p><p> uchar PassInBuf1[6]; //設(shè)定密碼時(shí)保存第一次輸入的密碼</p><p> uchar PassPosi=1;//用戶輸入的密碼字符在PassInBuf[6]中的位置</p><p> bit TimerBit;//20
30、ms定時(shí)時(shí)間到標(biāo)志</p><p> uchar SysMode;//系統(tǒng)所處的模式:0輸入密碼模式1報(bào)警模式2開鎖模式</p><p> uchar ErrorCnt; //用戶連續(xù)輸入密碼出錯次數(shù)</p><p> long int j;</p><p><b> char i=0;</b>&
31、lt;/p><p> char h=0; //密碼重新輸入錯誤標(biāo)志位</p><p><b> char q;</b></p><p> char p=0; //重置密碼輸入次數(shù)標(biāo)志</p><p> char SET=0; //設(shè)定密碼標(biāo)志位</p><p> ////
32、////顯示子程序///////////////////////////////////////////////////////////</p><p><b> //信息填充函數(shù)</b></p><p> void Fill_Buf(uchar FillChar)//將字符FillChar寫入緩沖區(qū)</p><p><b>
33、 {</b></p><p><b> uchar t;</b></p><p> for(t=0;t<6;t++)</p><p><b> {</b></p><p> DispBuf[t]=FillChar;</p><p> PassInB
34、uf[t]=FillChar;</p><p><b> }</b></p><p><b> }</b></p><p> void Fill_Buf_P() //將系統(tǒng)閉鎖時(shí)的信息寫入緩沖區(qū)</p><p><b> {</b></p><p
35、> Fill_Buf(BLANKCHAR);</p><p> DispBuf[0]=PCHAR;</p><p><b> }</b></p><p> void Fill_Buf_O() //將系統(tǒng)開鎖時(shí)的信息寫入緩沖區(qū)</p><p><b> {</b></p&g
36、t;<p> Fill_Buf(BLANKCHAR);</p><p> DispBuf[0]=OPENCHAR;</p><p><b> }</b></p><p> void Fill_Buf_A() //將系統(tǒng)報(bào)警時(shí)的信息寫入緩沖區(qū)</p><p><b> {<
37、;/b></p><p> Fill_Buf(LINECHAR);</p><p> DispBuf[0]=ALARMCHAR;</p><p><b> } </b></p><p> void Fill_Buf_B() //將系統(tǒng)設(shè)定密碼時(shí)的信息寫入緩沖區(qū)</p><p>
38、;<b> {</b></p><p> Fill_Buf(BLANKCHAR);</p><p> DispBuf[0]=SETCHAR;</p><p><b> } </b></p><p> //緩沖區(qū)顯示函數(shù) </p><p> void Disp
39、_Led_Sin(uchar DispChar,uchar DispPosi) //在某個(gè)LED上顯示字符</p><p><b> {</b></p><p> LEDPORT=SEGCODE[DispChar];</p><p> LEDCON=BITCODE[DispPosi]; </p><p>
40、;<b> }</b></p><p> void Disp_Led_OFF() //關(guān)閉顯示器</p><p><b> {</b></p><p><b> uchar T;</b></p><p> LEDCON|=0X3F;</p><
41、p> for(T=0;T<6;T++)</p><p> Disp_Led_Sin(BLANKCHAR,T);</p><p><b> }</b></p><p> void Disp_LED(uchar i)//當(dāng)系統(tǒng)處于不同模式下時(shí)顯示某個(gè)顯示器</p><p><b> {&l
42、t;/b></p><p> DispCnt++;</p><p> DispCnt%=10;</p><p> if(DispCnt==0)</p><p><b> {</b></p><p> DispNormal=~DispNormal;</p><p&
43、gt;<b> }</b></p><p> if(SysMode==1)</p><p><b> {</b></p><p> if(!DispNormal)</p><p><b> {</b></p><p> Disp_Led_OF
44、F();</p><p><b> return;</b></p><p><b> }</b></p><p><b> }</b></p><p> Disp_Led_Sin(DispBuf[i],i);</p><p><b>
45、 }</b></p><p> ////////報(bào)警子程序////////////////////////////////////////////////////////////</p><p> void Sys_Speaker(uint stime) //設(shè)置報(bào)警時(shí)間及報(bào)警標(biāo)志位</p><p><b> {</b>
46、</p><p> AlarmEnable=1;</p><p> AlarmTime=stime;</p><p><b> }</b></p><p> void Sys_Alarm() //控制蜂鳴器鳴叫</p><p><b> {</b></p&
47、gt;<p> if(AlarmEnable==1)</p><p><b> {</b></p><p> ALARMCON=0;</p><p> AlarmTime--;</p><p> if(AlarmTime==0)</p><p><b> {&l
48、t;/b></p><p> AlarmEnable=0;</p><p> ALARMCON=1;</p><p> if(SysMode==1)</p><p><b> {</b></p><p> SysMode=0;</p><p> Fill_
49、Buf_P();</p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> ////////鍵盤子程序////
50、////////////////////////////////////////////////////////</p><p> uchar Find_Key()//掃描一次鍵盤返回按鍵值 </p><p><b> {</b></p><p> uchar KeyTemp,i,j;</p><p> K
51、EYPORT=0XF0;</p><p> KeyTemp=KEYPORT;</p><p> if(KeyTemp==0XF0)</p><p> return NO_KEY;</p><p> switch(KeyTemp)</p><p><b> {</b></p>
52、<p> case 0x70: j=4; break;</p><p> case 0xb0: j=3; break;</p><p> case 0xd0: j=2; break;</p><p> case 0xe0: j=1; break;</p><p> default: break;</
53、p><p><b> }</b></p><p> KEYPORT=0x0f;</p><p> KeyTemp=KEYPORT;</p><p> switch(KeyTemp)</p><p><b> {</b></p><p> cas
54、e 0x07: i=4; break;</p><p> case 0x0b: i=3; break;</p><p> case 0x0d: i=2; break;</p><p> case 0x0e: i=1; break;</p><p> default: break;</p><p>
55、;<b> } </b></p><p> return (4*(i-1)+j-1);</p><p><b> }</b></p><p> uchar Scan_Key() //負(fù)責(zé)按鍵去抖動等操作</p><p><b> {</b></p>
56、<p> uchar KeyTemp;</p><p> KeyTemp=Find_Key();</p><p> if(KeyTemp==NO_KEY)</p><p><b> {</b></p><p> if(KeyUp<2)</p><p><b>
57、 {</b></p><p><b> KeyUp=0;</b></p><p> return NO_KEY;</p><p><b> }</b></p><p> if(KeyUp==2)</p><p><b> {</b>
58、;</p><p><b> KeyUp=3;</b></p><p> return NO_KEY;</p><p><b> }</b></p><p> if(KeyUp==3)</p><p><b> {</b></p>
59、<p><b> KeyUp=0;</b></p><p> return KeyPre;</p><p><b> }</b></p><p><b> }</b></p><p><b> else</b></p>
60、<p><b> {</b></p><p> if(KeyUp==0)</p><p><b> {</b></p><p><b> KeyUp=1;</b></p><p> KeyPre=KeyTemp;</p><p>&l
61、t;b> }</b></p><p> else if(KeyUp==1)</p><p><b> {</b></p><p> if(KeyPre==KeyTemp)</p><p><b> KeyUp=2;</b></p><p><
62、b> else</b></p><p> KeyPre=KeyTemp;</p><p><b> }</b></p><p> else if(KeyUp==3)</p><p><b> {</b></p><p><b> Key
63、Up=2;</b></p><p><b> }</b></p><p><b> }</b></p><p> return NO_KEY;</p><p><b> }</b></p><p> void Key_Proces
64、s(uchar Key) //按鍵處理函數(shù)</p><p><b> {</b></p><p><b> uchar i;</b></p><p> if(Key==NO_KEY)</p><p><b> return;</b></p><
65、p> switch(SysMode)</p><p><b> {</b></p><p><b> case 0:</b></p><p> switch(Key)</p><p><b> {</b></p><p><b>
66、; case 0:</b></p><p><b> case 1:</b></p><p><b> case 2:</b></p><p><b> case 3:</b></p><p><b> case 4:</b><
67、/p><p><b> case 5:</b></p><p><b> case 6:</b></p><p><b> case 7:</b></p><p><b> case 8:</b></p><p><b&g
68、t; case 9:</b></p><p> DispBuf[PassPosi]=LINECHAR;</p><p> PassInBuf[PassPosi]=Key;</p><p> if(PassPosi<5)</p><p> PassPosi++;</p><p> Sys_S
69、peaker(SHORT_TIME);</p><p><b> break;</b></p><p> case BACKKEY:</p><p> DispBuf[PassPosi]=BLANKCHAR;</p><p> PassInBuf[PassPosi]=BLANKCHAR;</p>&
70、lt;p> if(PassPosi>1)</p><p> PassPosi--;</p><p> Sys_Speaker(SHORT_TIME);</p><p><b> break;</b></p><p> case ENTERKEY:</p><p> for(
71、i=0;i<5;i++)</p><p><b> {</b></p><p> if(PassInBuf[i+1]!=PassWord[i])</p><p><b> break;</b></p><p><b> }</b></p><p
72、><b> if(i>=5)</b></p><p><b> {</b></p><p> Fill_Buf_O();</p><p> PassPosi=1;</p><p> LOCKCON=1;</p><p> ErrorCnt=0;<
73、/p><p> Sys_Speaker(LONG_TIME);</p><p> SysMode=2;</p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p>&
74、lt;p> ErrorCnt++;</p><p> if(ErrorCnt>2)</p><p><b> {</b></p><p> ErrorCnt=0;</p><p> Fill_Buf_A();</p><p> PassPosi=1;</p>
75、<p> Sys_Speaker(LONGER_TIME);</p><p> SysMode=1;</p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p&g
76、t; Fill_Buf_P();</p><p> PassPosi=1;</p><p> Sys_Speaker(LONG_TIME);</p><p><b> }</b></p><p><b> }</b></p><p><b> break
77、;</b></p><p> case LOCKKEY:</p><p> Fill_Buf_P();</p><p> PassPosi=1;</p><p> Sys_Speaker(SHORT_TIME);</p><p> break;</p><p>&
78、lt;b> }</b></p><p><b> break;</b></p><p><b> case 2:</b></p><p> if(Key==LOCKKEY)</p><p><b> {</b></p><p>
79、; Fill_Buf_P();</p><p> SysMode=0;</p><p> LOCKCON=0;</p><p> Sys_Speaker(SHORT_TIME);</p><p><b> break;</b></p><p><b> }</b>
80、</p><p> if(Key==SETKEY)//密碼重置</p><p><b> {</b></p><p> if(SET==0)</p><p><b> {</b></p><p> Fill_Buf_B();</p><
81、p><b> SET=1;</b></p><p><b> break;</b></p><p><b> }</b></p><p><b> break;</b></p><p><b> }</b></p
82、><p> if(SET==1)</p><p><b> {</b></p><p> switch(Key)</p><p><b> {</b></p><p><b> case 0:</b></p><p>&l
83、t;b> case 1:</b></p><p><b> case 2:</b></p><p><b> case 3:</b></p><p><b> case 4:</b></p><p><b> case 5:</b&g
84、t;</p><p><b> case 6:</b></p><p><b> case 7:</b></p><p><b> case 8:</b></p><p><b> case 9:</b></p><p>
85、 DispBuf[PassPosi]=LINECHAR;</p><p> PassInBuf[PassPosi]=Key;</p><p> if(PassPosi<5)</p><p> PassPosi++;</p><p> Sys_Speaker(SHORT_TIME);</p><p><
86、;b> break;</b></p><p> case BACKKEY:</p><p> DispBuf[PassPosi]=BLANKCHAR;</p><p> PassInBuf[PassPosi]=BLANKCHAR;</p><p> if(PassPosi>1)</p><
87、p> PassPosi--;</p><p> Sys_Speaker(SHORT_TIME);</p><p><b> break;</b></p><p> case ENTERKEY:</p><p> if(PassPosi<5)</p><p><b>
88、 break;</b></p><p><b> if(p==0)</b></p><p><b> {p=1;</b></p><p> Fill_Buf_B();</p><p> PassPosi=1;</p><p> for(i=0;i&l
89、t;5;i++)</p><p> (PassInBuf1[i]=PassInBuf[i+1]);</p><p><b> break;</b></p><p><b> }</b></p><p><b> else</b></p><
90、p> {for(i=0;i<5;i++)</p><p><b> {</b></p><p> if(PassInBuf[i+1]!=PassInBuf1[i])</p><p><b> {</b></p><p><b> h=1;</b>
91、;</p><p><b> break;</b></p><p><b> }</b></p><p><b> }</b></p><p><b> if(h==1)</b></p><p><b> {&l
92、t;/b></p><p><b> h=0;</b></p><p> Fill_Buf_A();</p><p> PassPosi=1;</p><p> LOCKCON=0;</p><p> Sys_Speaker(LONG_TIME);</p><p
93、> SysMode=1;</p><p><b> break;</b></p><p><b> }</b></p><p> for(q=0;q<5;q++)</p><p> PassWord[q]=PassInBuf[q+1];</p><p>
94、 Fill_Buf_P();</p><p> SysMode=0;</p><p> LOCKCON=0;</p><p> PassPosi=1;</p><p><b> p=0;</b></p><p><b> SET=0;</b></p>
95、<p> Sys_Speaker(LONG_TIME);</p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p><b> break; </b></p
96、><p><b> }</b></p><p><b> }</b></p><p> /////////初始化程序///////////////////////////////////////////////////////////</p><p> void Ini_Timer0()
97、 //初始化T0</p><p><b> {</b></p><p> TMOD&=0XF0;</p><p> TMOD|=0X01;</p><p><b> TR0=0;</b></p><p> TH0=(65536-10000)/256;&
98、lt;/p><p> TL0=(65536-10000)%256;</p><p><b> TR0=1;</b></p><p><b> ET0=1;</b></p><p><b> }</b></p><p> void Timer0()
99、interrupt 1 //T0中斷函數(shù)</p><p><b> {</b></p><p><b> TR0=0;</b></p><p> TH0=(65536-10000)/256;</p><p> TL0=(65536-10000)%256;</p><
100、;p><b> TR0=1;</b></p><p> TimerBit=1;</p><p><b> }</b></p><p> void Ini_System() //系統(tǒng)初始化</p><p><b> {</b></p><
101、p> PassPosi=1;</p><p> LOCKCON=0;</p><p> Ini_Timer0();</p><p> Fill_Buf_P();</p><p><b> EA=1;</b></p><p><b> }</b></p&
102、gt;<p> ////////主程序////////////////////////////////////////////////////////////////</p><p> void main()</p><p><b> {</b></p><p> uchar KeyTemp;</p>&
103、lt;p> Ini_System();</p><p><b> while(1)</b></p><p><b> {</b></p><p> if(TimerBit==1)</p><p><b> {</b></p><p>
104、Disp_LED(i);</p><p><b> i++;</b></p><p><b> if(i>5)</b></p><p><b> i=0;</b></p><p> Sys_Alarm();</p><p> KeyTem
105、p=Scan_Key();</p><p> Key_Process(KeyTemp);</p><p> TimerBit=0;</p><p><b> } </b></p><p><b> }</b></p><p><b> }</b&g
106、t;</p><p><b> 總結(jié)</b></p><p> 本文詳細(xì)介紹了如何使用AT89C51單片和其他元器件設(shè)計(jì)一款電子密碼鎖。首先介紹了系統(tǒng)的具體要求實(shí)現(xiàn)的功能,在此基礎(chǔ)上將整個(gè)系統(tǒng)劃分為鍵盤模塊、顯示模塊、報(bào)警模塊、電子鎖控制模塊和單片機(jī)模塊;然后給出了每個(gè)模塊的硬件電路圖,并對硬件電路圖作了相應(yīng)的說明;最后根據(jù)功能和硬件電路圖給出了系統(tǒng)相關(guān)模塊的子程
107、序和系統(tǒng)主程序。</p><p> 通過本密碼鎖的設(shè)計(jì),使我對單片機(jī)有了更深的了解。特別是鍵盤掃描方法,以前只是理論上知識,而本次設(shè)計(jì)讓我有機(jī)會去實(shí)踐了這一知識。</p><p> 本設(shè)計(jì)只是一個(gè)簡單的密碼鎖,還有很多功能可以添加上去,如密碼不必必須是5位,少于5位也可以;密碼的明碼顯示等</p><p><b> 參考文獻(xiàn):</b>&l
108、t;/p><p> 《51單片機(jī)C語言應(yīng)用開發(fā)技術(shù)大全》龍脈工作室 劉坤、宋戈、趙紅波、張憲棟 編著,人民郵電出版社</p><p> 《51單片機(jī)應(yīng)用設(shè)計(jì)與仿真——基于Keil與Proteus》丁明亮、唐前輝 主編,北京航空航天大學(xué)出版社</p><p><b> 附:</b></p><p><b>
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 課程設(shè)計(jì)報(bào)告-單片機(jī)實(shí)現(xiàn)密碼鎖
- 單片機(jī)-密碼鎖課程設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)-密碼鎖
- 單片機(jī)課程設(shè)計(jì)--密碼鎖
- 單片機(jī)課程設(shè)計(jì)-密碼鎖
- 單片機(jī)課程設(shè)計(jì)報(bào)告--電子密碼鎖
- 單片機(jī)課程設(shè)計(jì)---密碼鎖
- 密碼鎖單片機(jī)課程設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)-密碼鎖
- 單片機(jī)課程設(shè)計(jì)--電子密碼鎖報(bào)告
- 單片機(jī)課程設(shè)計(jì)---電子密碼鎖報(bào)告
- 單片機(jī)課程設(shè)計(jì)----電子密碼鎖報(bào)告
- 單片機(jī)課程設(shè)計(jì)--電子密碼鎖
- 單片機(jī)課程設(shè)計(jì)---數(shù)字密碼鎖
- 單片機(jī)課程設(shè)計(jì)--電子密碼鎖
- 單片機(jī)課程設(shè)計(jì)---數(shù)字密碼鎖
- 單片機(jī)課程設(shè)計(jì)-數(shù)字密碼鎖
- 單片機(jī)課程設(shè)計(jì)電子密碼鎖
- 51單片機(jī)課程設(shè)計(jì)---密碼鎖
- 單片機(jī)課程設(shè)計(jì)報(bào)告--基于單片機(jī)的電子密碼鎖
評論
0/150
提交評論