版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p><b> 單</b></p><p><b> 片</b></p><p><b> 機(jī)</b></p><p><b> 課</b></p><p><b> 程</b></p><p
2、><b> 設(shè)</b></p><p><b> 計(jì)</b></p><p><b> 報(bào)</b></p><p><b> 告</b></p><p> 課題名稱:基于單片機(jī)的電子密碼鎖</p><p><b
3、> 學(xué) 校:</b></p><p> 系 別:機(jī)械電子工程系</p><p> 專 業(yè):應(yīng)用電子技術(shù)</p><p><b> 姓 名:</b></p><p><b> 學(xué) 號(hào):</b></p><p><b
4、> 指導(dǎo)教師:</b></p><p><b> 目錄</b></p><p> 一 設(shè)計(jì)總說(shuō)明- 3 -</p><p> 二 電子密碼鎖的系統(tǒng)設(shè)計(jì)- 4 -</p><p> 2.1設(shè)計(jì)方案論證與比較- 4 -</p><p> 2.2電子密碼鎖總體設(shè)計(jì)-
5、 4 -</p><p> 三 硬件電路設(shè)計(jì)- 5 -</p><p> 3.1單片機(jī)AT89C51簡(jiǎn)介- 5 -</p><p> 3.2 4×4矩陣鍵盤- 5 -</p><p> 3.3 震蕩電路- 6 -</p><p> 3.4 外部存儲(chǔ)器電路- 6 -</p>&
6、lt;p> 3.5 1602LCD液晶顯示- 7 -</p><p> 3.6 LED及蜂鳴器- 7 -</p><p> 3.7完整電路圖及元器件清單- 8 -</p><p> 四 軟件程序設(shè)計(jì)- 9 -</p><p> 4.1程序設(shè)計(jì)流程圖- 9 -</p><p> 4.2 電子密
7、碼鎖源程序- 10 -</p><p> 五 仿真調(diào)試- 15 -</p><p> 5.1 使用Keil生成hex文件- 15 -</p><p> 5.2 使用Proteus仿真過(guò)程- 16 -</p><p> 六 總結(jié)與體會(huì)- 19 -</p><p> 七 參考文獻(xiàn)及PCB封裝圖- 19
8、 -</p><p> 7.1 參考文獻(xiàn)- 19 -</p><p> 7.2 PCB封裝圖- 20 -</p><p><b> 一 設(shè)計(jì)總說(shuō)明</b></p><p> 在日常的生活和工作中, 住宅與部門的安全防范、單位的文件檔案、財(cái)務(wù)報(bào)表以及一些個(gè)人資料的保存多以加鎖的辦法來(lái)解決。若使用傳統(tǒng)的機(jī)械式鑰匙
9、開(kāi)鎖,人們常需攜帶多把鑰匙, 使用極不方便, 且鑰匙丟失后安全性即大打折扣。隨著科學(xué)技術(shù)的不斷發(fā)展,人們對(duì)日常生活中的安全保險(xiǎn)器件的要求越來(lái)越高。為滿足人們對(duì)鎖的使用要求,增加其安全性,用密碼代替鑰匙的密碼鎖應(yīng)運(yùn)而生。密碼鎖具有安全性高、成本低、功耗低、易操作等優(yōu)點(diǎn)。</p><p> 在安全技術(shù)防范領(lǐng)域,具有防盜報(bào)警功能的電子密碼鎖逐漸代替?zhèn)鹘y(tǒng)的機(jī)械式密碼鎖,克服了機(jī)械式密碼鎖密碼量少、安全性能差的缺點(diǎn),使密
10、碼鎖無(wú)論在技術(shù)上還是在性能上都大大提高一步。隨著大規(guī)模集成電路技術(shù)的發(fā)展,特別是單片機(jī)的問(wèn)世,出現(xiàn)了帶微處理器的智能密碼鎖,它除具有電子密碼鎖的功能外,還引入了智能化管理、專家分析系統(tǒng)等功能,從而使密碼鎖具有很高的安全性、可靠性,應(yīng)用日益廣泛。</p><p> 基于以上思路,本次設(shè)計(jì)使用ATMEL公司的AT89C51實(shí)現(xiàn)一基于單片機(jī)的電子密碼鎖的設(shè)計(jì),其主要具有如下功能:</p><p&g
11、t; 設(shè)置6位密碼,密碼通過(guò)鍵盤輸入,按鍵確實(shí)按下,發(fā)出提示音。若密碼正確,則將鎖打開(kāi)。</p><p> 密碼可以由用戶自己修改設(shè)定(只支持6位密碼),鎖打開(kāi)后才能修改密碼。</p><p><b> 斷電后密碼可保存。</b></p><p> 電子密碼鎖的設(shè)計(jì)主要由三部分組成:4×4矩陣鍵盤接口電路、密碼鎖的控制電路、密
12、碼存儲(chǔ)電路、輸出顯示電路。另外系統(tǒng)還有LED提示燈,蜂鳴器等。</p><p> 密碼鎖設(shè)計(jì)的關(guān)鍵問(wèn)題是實(shí)現(xiàn)密碼的輸入、清除、更改、開(kāi)鎖等功能:</p><p> 密碼輸入功能:按下一個(gè)數(shù)字鍵,依次輸入密碼。</p><p> 密碼清除功能:當(dāng)按下清除鍵時(shí),清除前面輸入的所有值,并清除所有顯示。</p><p> 密碼更改功能:將輸入
13、的值作為新的密碼并保存。</p><p> 開(kāi)鎖功能:當(dāng)按下開(kāi)鎖鍵,系統(tǒng)將輸入與密碼進(jìn)行檢查核對(duì),如果正確鎖打開(kāi),否則不打開(kāi)。</p><p> 主要的設(shè)計(jì)實(shí)施過(guò)程:首先,選用ATMEL公司的單片機(jī)AT89C51,以及選購(gòu)其他電子元器件。第二步,使用Proteus Pro7.7設(shè)計(jì)硬件電路原理圖,并設(shè)計(jì)PCB圖完成布線。第三步,使用Keil uVision3軟件編寫(xiě)單片機(jī)的C語(yǔ)言程序、
14、仿真、軟件調(diào)試。第四部,使用PROTEUS軟件進(jìn)行模擬軟、硬件調(diào)試,完成本次課程設(shè)計(jì)。</p><p> 摘要(關(guān)鍵詞):電子密碼鎖 AT89C51 4×4矩陣鍵盤 密碼輸入與修改</p><p> 二 電子密碼鎖的系統(tǒng)設(shè)計(jì)</p><p> 2.1設(shè)計(jì)方案論證與比較</p><p> 方案一:卡片式電子密碼鎖??ㄆ?/p>
15、電子密碼鎖,它利用光電耦合的方式,將密碼信息從打孔的形式做在卡片上 ,只要將卡片插入鎖內(nèi),就能將鎖打開(kāi)。如果卡片上密碼信息不對(duì),密碼鎖發(fā)出報(bào)警聲。這種方法是需要卡片做為鑰匙,容易被盜和被仿制,安全性不高。</p><p> 方案二:磁卡式電子密碼鎖,具有功能強(qiáng)、故障率低、可靠性高和工作壽命長(zhǎng)等優(yōu)點(diǎn),但這種方法的缺點(diǎn)是磁卡容易消磁,對(duì)用戶造成不必要的麻煩。</p><p> 方案三:用A
16、T89C51設(shè)計(jì)的多功能密碼鎖。以單片機(jī)作為微控制器,可以實(shí)現(xiàn)基于以上優(yōu)點(diǎn),本系統(tǒng)選用該方案作為設(shè)計(jì)方案。按鍵有效指示、輸入錯(cuò)誤、控制開(kāi)鎖、錯(cuò)誤報(bào)警、密碼修改等功能,工作穩(wěn)定可靠,保密性高,實(shí)用性強(qiáng)。</p><p> 2.2電子密碼鎖總體設(shè)計(jì)</p><p><b> 三 硬件電路設(shè)計(jì)</b></p><p> 3.1單片機(jī)AT89C5
17、1簡(jiǎn)介</p><p> AT89C51是美國(guó)ATMEL公司生產(chǎn)的低電壓,高性能CMOS 8位單片機(jī),片內(nèi)含4K bytes的可反復(fù)擦寫(xiě)的只讀程序存儲(chǔ)器(EPROM)和128bytes的隨機(jī)存取數(shù)據(jù)序存器(RAM),器件采用ATMEL公司的高密度/非易失性存儲(chǔ)技術(shù)生產(chǎn),兼容標(biāo)準(zhǔn)MCS-51指令系統(tǒng),片內(nèi)置通用8位中央處理器(CPU)和FLASH存儲(chǔ)單元,AT89C51單片機(jī)為許多嵌入式控制系統(tǒng)提供了一種靈活行高
18、且價(jià)廉的方案。</p><p><b> 主要特性:</b></p><p> · 與MCS-51 兼容· 4K字節(jié)可編程FLASH存儲(chǔ)器(壽命:1000寫(xiě)/</p><p><b> 擦循環(huán))</b></p><p> · 全靜態(tài)工作:0Hz-24KHz&
19、#183; 三級(jí)程序存儲(chǔ)器保密鎖定· 128*8位內(nèi)部RAM· 32條可編程I/O線· 兩個(gè)16位定時(shí)器/計(jì)數(shù)器· 5個(gè)中斷源· 可編程串行通道· 低功耗的閑置和掉電模式· 片內(nèi)振蕩器和時(shí)鐘電路</p><p> 圖3-1 AT89C51引腳圖</p><p> 3.2 4×4矩陣鍵
20、盤</p><p> 如圖3-2所示,本系統(tǒng)采用4×4矩陣鍵盤,16個(gè)按鍵分為輸入數(shù)字鍵:0、1、2、3、4、5、6、7、8、9;功能鍵確定、上鎖、修改密碼、保存密碼、CLR。 </p><p><b> 圖</b></p><p><b> 圖圖3-2</b></p><p>
21、 4×4 矩陣鍵盤</p><p><b> 3.3 震蕩電路</b></p><p> 圖 3-3 振蕩電路</p><p> 本設(shè)計(jì)晶振選擇頻率為12MHZ,電容選擇30pF如圖3-3。</p><p> 經(jīng)計(jì)算得單片機(jī)工作機(jī)器周期為:</p><p> 12×
22、;(1÷12M)=1us。</p><p> 3.4 外部存儲(chǔ)器電路</p><p> 為了保證用戶密碼在系統(tǒng)掉電時(shí)不會(huì)丟失,本系統(tǒng)采用AT24C04的EEPROM存儲(chǔ)器來(lái)存儲(chǔ)用戶密碼。電擦除可編程只讀存儲(chǔ)器EEPROM(Electrically Erasable PROM)是近年來(lái)開(kāi)始被廣泛使用的一種只讀存儲(chǔ)器,它能在應(yīng)用系統(tǒng)中進(jìn)行在線改寫(xiě),并能在掉電的情況下保存數(shù)據(jù)而不需
23、保證電源,因而完全符合系統(tǒng)的設(shè)計(jì)要求。雖然EEPROM的擦除時(shí)間較長(zhǎng),但這不影響整個(gè)系統(tǒng)的功能。在本系統(tǒng),用戶設(shè)定的密碼就存于EEPROM AT24C04中。AT24C04與單片機(jī)之間采用I2C總線通訊方式。</p><p> 圖3-4 24C04A外部存儲(chǔ)器</p><p> 3.5 1602LCD液晶顯示</p><p> 圖3-5 LCD液晶顯示<
24、/p><p><b> 主要技術(shù)參數(shù)</b></p><p> 3.6 LED及蜂鳴器</p><p> 圖3-6 LED開(kāi)鎖提示</p><p> 如圖,LED模擬鎖的開(kāi)關(guān)狀態(tài)。若LED亮,表示密碼正確,開(kāi)鎖。</p><p><b> 圖 3-7 蜂鳴器</b>&l
25、t;/p><p> 按鍵按下,密碼鎖打開(kāi)等動(dòng)作實(shí)現(xiàn)時(shí)發(fā)出提示音。</p><p> 3.7完整電路圖及元器件清單</p><p> 圖3-8 仿真電路圖</p><p><b> 表3-9 元件清單</b></p><p><b> 四 軟件程序設(shè)計(jì)</b></p
26、><p> 程序主要完成:開(kāi)始時(shí)LCD顯示“Your Password”提示輸入密碼,輸入密碼后按下確認(rèn)鍵,系統(tǒng)會(huì)將所輸入與系統(tǒng)密碼進(jìn)行比對(duì)。若輸入密碼正確則顯示“Unlock OK”開(kāi)鎖,然后可以選擇上鎖或者修改密碼,如果密碼錯(cuò)誤則顯示“ERROR”。開(kāi)鎖后,按下上鎖鍵,系統(tǒng)上鎖并返回,選擇修改密碼則可以對(duì)系統(tǒng)進(jìn)行修改密碼操作。</p><p> 4.1程序設(shè)計(jì)流程圖</p>
27、<p> 圖4-1 程序設(shè)計(jì)流程圖 </p><p> 4.2 電子密碼鎖源程序</p><p> //-------------------------------Main.c----------------------------------------</p><p> //名稱:電子密碼鎖</p><p>
28、//-----------------------------------------------------------------------------</p><p><b> //</b></p><p> // 當(dāng)輸入0-9中的數(shù)字時(shí)可以輸入密碼,不超過(guò)6位,輸入完成后按下A</p><p> // 鍵
29、開(kāi)鎖,密碼正確時(shí)LED點(diǎn)亮,液晶屏顯示開(kāi)鎖成功。</p><p> // 其他鍵功能是:B上鎖 C重新輸入密碼 D保存新密碼 E清除。</p><p> // 重設(shè)密碼時(shí)要求先輸入正確的密碼成功開(kāi)鎖。</p><p> //---------------------------------------------------------
30、--------------------</p><p> #include <reg51.h></p><p> #include <string.h></p><p> #include <intrins.h></p><p> #define uchar unsigned char</p
31、><p> #define uint unsigned int</p><p> #define Delay4us();</p><p> //上次按鍵和當(dāng)前按鍵序號(hào),該矩陣中序號(hào)范圍為0-15,16表示無(wú)按鍵</p><p> uchar Pre_KeyNo = 16, KeyNo = 16;</p><p>
32、 uchar code Title_Text[] = "Your Password...";//標(biāo)題字符串</p><p> uchar DSY_BUFFER[10] = " ";//顯示緩沖</p><p> uchar UserPassword[10] = " ";//用戶輸入的密碼</p>
33、<p> void LCD_Init();//液晶初始化</p><p> void Display_String(uchar * str, uchar LineNo);//在液晶指定行顯示字符串</p><p> void IIC_24C04_Init();//IIC初始化</p><p> void Beep();
34、//蜂鳴器</p><p> uchar RecString (uchar Slave,uchar Subaddr,uchar *Buffer,uchar N);//從IIC讀取數(shù)據(jù)</p><p> uchar SendString (uchar Slave,uchar Subaddr,uchar *Buffer,uchar N);//向IIC寫(xiě)入數(shù)據(jù)</p>
35、<p> uchar Keys_Scan();//鍵盤掃描,返回鍵盤號(hào)0-15</p><p> sbit LED_OPEN =P2^7;//開(kāi)鎖亮燈</p><p> sbit BEEP =P3^7;//蜂鳴器</p><p> //-----------------------------------------
36、------------------------------------</p><p><b> // 延時(shí)</b></p><p> //-----------------------------------------------------------------------------</p><p> void DelayMS
37、(uint x)</p><p><b> {</b></p><p><b> uchar i;</b></p><p> while (x--) for (i = 0;i < 120; i++);</p><p><b> }</b></p>&
38、lt;p> //-----------------------------------------------------------------------------</p><p><b> // 蜂鳴器子程序</b></p><p> //-------------------------------------------------------
39、----------------------</p><p> void Beep()</p><p><b> {</b></p><p><b> uchar i;</b></p><p> for (i = 0;i < 100; i++)</p><p>
40、<b> {</b></p><p> DelayMS(1); BEEP = ~BEEP;</p><p><b> }</b></p><p><b> BEEP=0;</b></p><p><b> }</b></p><
41、;p> //-----------------------------------------------------------------------------</p><p><b> // 清除密碼</b></p><p> //-----------------------------------------------------------
42、------------------</p><p> void Clear_Password()</p><p><b> {</b></p><p> UserPassword[0] = '\0';</p><p> DSY_BUFFER[0] = '\0';</p>
43、;<p><b> }</b></p><p> //-----------------------------------------------------------------------------</p><p><b> // 主程序</b></p><p> //-----------
44、------------------------------------------------------------------</p><p> void main()</p><p><b> {</b></p><p> uchar i = 0;</p><p> uchar IIC_Password[
45、10];</p><p> uchar IS_Valid_User = 0;</p><p> P0 = 0xFF; </p><p> P1 = 0xFF;</p><p> P2 = 0xFF; </p><p> TMOD = 0x02; //T0設(shè)置為
46、8位自動(dòng)重裝模式</p><p> TH0 = 175; </p><p> TL0 = 175;</p><p> TR0 = 1; //啟動(dòng)T0</p><p> DelayMS(10); </p><
47、;p> LCD_Init(); //初始化LCD </p><p> IIC_24C04_Init(); //初始化24C04 </p><p> Display_String(Title_Text,0x00); //在第1行顯示標(biāo)題</p><p> RecString(0x
48、a0, 0 , IIC_Password, 6); </p><p> IIC_Password[6] = '\0';</p><p><b> while(1)</b></p><p><b> { </b></p><p> P1 = 0xF0;</p>
49、<p> if(P1 != 0xF0) KeyNo = Keys_Scan(); //掃描鍵盤獲取鍵序號(hào)KeyNo</p><p> switch ( KeyNo )</p><p><b> {</b></p><p> case 0: case 1: case 2: case 3: case 4: </p>
50、;<p> case 5: case 6: case 7: case 8: case 9:</p><p> if ( i<= 5 ) //密碼限制在6位以內(nèi)</p><p><b> {</b></p><p> //如果i為0則執(zhí)行一次清屏</p><p> i
51、f (i ==0) Display_String(" ",0x40);</p><p> UserPassword[i] = KeyNo + '0';</p><p> UserPassword[i+1] = '\0';</p><p> DSY_BUFFER[i] = '
52、;*';</p><p> DSY_BUFFER[i+1] = '\0';</p><p> Display_String(DSY_BUFFER,0x40);</p><p><b> i++;</b></p><p><b> }</b></p>&l
53、t;p><b> break;</b></p><p> case 10: //按A鍵開(kāi)鎖</p><p> if (strcmp(UserPassword,IIC_Password) == 0) </p><p><b> {</b></p><p> LED_OPEN = 0;
54、 //點(diǎn)亮LED</p><p> Clear_Password();</p><p> Display_String("Unlock OK! ",0x40);</p><p> IS_Valid_User = 1;</p><p><b> }</b></p><
55、;p><b> else </b></p><p><b> {</b></p><p> LED_OPEN =1; //關(guān)閉LED</p><p> Clear_Password();</p><p> Display_String("ERROR !
56、",0x40);</p><p> IS_Valid_User = 0;</p><p><b> }</b></p><p><b> i = 0;</b></p><p><b> break;</b></p><p> case
57、 11: //按B鍵上鎖</p><p> LED_OPEN =1; </p><p> Clear_Password();</p><p> Display_String(Title_Text,0x00);</p><p> Display_String(" ",0x40);&l
58、t;/p><p> i = 0; </p><p> IS_Valid_User = 0; </p><p><b> break;</b></p><p> case 12: //按C鍵設(shè)置新密碼</p><p>
59、 //如果是合法用戶則提示輸入新密碼</p><p> if ( !IS_Valid_User ) Display_String("No rights !",0x40);</p><p><b> else </b></p><p><b> {</b></p><p>&
60、lt;b> i = 0;</b></p><p> Display_String("New Password: ",0x00);</p><p> Display_String(" ",0x40);</p><p><b> }</b></
61、p><p> break; </p><p> case 13: //按D鍵保存新密碼</p><p> if ( !IS_Valid_User ) Display_String("No rights !",0x40);</p><p><b> else <
62、;/b></p><p><b> {</b></p><p> SendString(0xa0, 0 , UserPassword, 6);</p><p> //重新讀入剛寫(xiě)的密碼</p><p> RecString(0xa0, 0 , IIC_Password, 6); </p>
63、<p> IIC_Password[6] = '\0'; </p><p><b> i = 0;</b></p><p> Display_String(Title_Text,0x00);</p><p> Display_String("Pass
64、word Saved! ",0x40);</p><p> } </p><p> break; </p><p> case 14: //按E鍵消除所有輸入</p><p><b> i = 0;</b></p>
65、<p> Clear_Password();</p><p> Display_String(" ",0x40); </p><p><b> }</b></p><p> Beep(); </p><p> D
66、elayMS(100);</p><p><b> P1= 0xF0;</b></p><p> while (P1 != 0xF0); //如果有鍵未釋放則等待</p><p> while (P1 == 0xF0); //如果沒(méi)有再次按下按鍵則等待</p><p><b> }</
67、b></p><p><b> }</b></p><p> //--------------------------------- 24C04.c -----------------------------------</p><p> // 24C04 IIC 讀/寫(xiě)程序</p><p> //----
68、-------------------------------------------------------------------------</p><p> sbit SCL = P3^2;//串行時(shí)鐘</p><p> sbit SDA = P3^3;//串行數(shù)據(jù)</p><p> //----------------------------
69、-------------------------------------------------</p><p><b> // 起始位</b></p><p> //-----------------------------------------------------------------------------</p><p>
70、 void Start()</p><p><b> {</b></p><p><b> SDA = 1; </b></p><p><b> SCL = 1; </b></p><p> Delay4us();</p><p><b&
71、gt; SDA = 0; </b></p><p> Delay4us(); </p><p><b> SCL = 0;</b></p><p><b> }</b></p><p> //-------------------------------------------
72、----------------------------------</p><p><b> // 停止位</b></p><p> //-----------------------------------------------------------------------------</p><p> void Stop()&l
73、t;/p><p><b> {</b></p><p><b> SDA = 0; </b></p><p><b> SCL = 1; </b></p><p> Delay4us(); </p><p><b> SDA = 1;&l
74、t;/b></p><p> Delay4us(); </p><p><b> SCL = 0;</b></p><p><b> }</b></p><p> //-----------------------------------------------------------
75、------------------</p><p> // IIC總線初始化</p><p> //-----------------------------------------------------------------------------</p><p> void ACK()</p><p><b> {
76、</b></p><p><b> SDA = 0; </b></p><p><b> SCL = 1; </b></p><p> Delay4us(); </p><p><b> SCL = 0; </b></p><p>&
77、lt;b> SDA =1;</b></p><p><b> }</b></p><p> //-----------------------------------------------------------------------------</p><p> // 發(fā)送非應(yīng)答信號(hào)</p><
78、;p> //-----------------------------------------------------------------------------</p><p> void NO_ACK()</p><p><b> {</b></p><p><b> SDA = 1;</b><
79、/p><p><b> SCL =1;</b></p><p> Delay4us(); </p><p><b> SCL = 0; </b></p><p><b> SDA = 0;</b></p><p><b> }</b
80、></p><p> //-----------------------------------------------------------------------------</p><p> // 從芯片讀取1字節(jié)</p><p> //-------------------------------------------------------
81、----------------------</p><p> uchar RecByte()</p><p><b> {</b></p><p> uchar i,rd;</p><p> rd = 0x00;</p><p> SDA = 1;//置數(shù)據(jù)線為輸入方式</p
82、><p> for(i = 0;i < 8; i++)</p><p><b> {</b></p><p> SCL = 1; rd <<= 1; rd|=SDA;</p><p> Delay4us();SCL = 0; Delay4us();</p><p><b
83、> }</b></p><p><b> SCL = 0;</b></p><p> Delay4us();</p><p> return rd;</p><p><b> }</b></p><p> //------------------
84、-----------------------------------------------------------</p><p> // 向芯片發(fā)送1字節(jié)</p><p> //-----------------------------------------------------------------------------</p><p> uc
85、har SendByte(uchar wd)</p><p><b> {</b></p><p><b> uchar i;</b></p><p><b> bit ack0;</b></p><p> for(i = 0;i < 8;i++)//循環(huán)移入8
86、位</p><p><b> {</b></p><p> SDA = (bit)(wd & 0x80);</p><p> _nop_(); _nop_(); SCL = 1; Delay4us(); </p><p> SCL = 0 ;wd <<= 1;</p><p
87、><b> }</b></p><p> Delay4us();</p><p> SDA = 1;//釋放總線并準(zhǔn)備讀取應(yīng)答</p><p><b> SCL = 1;</b></p><p> Delay4us();</p><p> ack0 =
88、!SDA;//0表示無(wú)應(yīng)答</p><p><b> SCL = 0;</b></p><p> Delay4us();</p><p> return ack0;//返回應(yīng)答</p><p><b> }</b></p><p> //----------
89、-------------------------------------------------------------------</p><p> // 發(fā)送多字節(jié)數(shù)據(jù)函數(shù)</p><p> //-----------------------------------------------------------------------------</p><
90、p> uchar SendString(uchar Slave,uchar Subaddr,uchar *Buffer,uchar N)</p><p><b> {</b></p><p><b> uchar i;</b></p><p><b> Start();</b></
91、p><p> if (!SendByte(Slave))return 0;//器件地址</p><p> if (!SendByte(Subaddr)) return 0;//器件子地址</p><p><b> Start();</b></p><p> if (!SendByte(Slave + 1)) r
92、eturn 0;//器件地址,讀操作</p><p> for (i = 0; i < N-1; i++)</p><p><b> {</b></p><p> Buffer[i] = RecByte();//接收數(shù)據(jù)</p><p> ACK();//發(fā)送應(yīng)答位</p>&l
93、t;p><b> }</b></p><p> Buffer[N-1] = RecByte();//接收最后一位</p><p> NO_ACK();//發(fā)送非應(yīng)答</p><p><b> Stop();</b></p><p><b> return 1;&
94、lt;/b></p><p><b> }</b></p><p> //----------------------------- KeyPAD.c --------------------------------------</p><p> void DelayMS(uint x);</p><p>
95、 //-----------------------------------------------------------------------------</p><p> // 鍵盤矩陣掃描子程序</p><p> //-----------------------------------------------------------------------------<
96、;/p><p> uchar Keys_scan()</p><p><b> {</b></p><p> uchar Tmp, KeyNo = 0;</p><p> //高四位置0,放入四行</p><p> P1 = 0x0F;</p><p> Delay
97、MS(1);</p><p> //按鍵后00001111將變成0000xxxx,x中1個(gè)為0,3個(gè)仍為1</p><p> //下面的表達(dá)式會(huì)將高四位移至低四位,并將其中唯一的0變?yōu)?,其余為0</p><p> Tmp = P1 >> 4 ^ 0x0F;</p><p> //對(duì) 0-3行分別附加起始值 0,4,8,1
98、2</p><p> switch (Tmp)</p><p><b> {</b></p><p> case 1: KeyNo += 0; break;</p><p> case 2: KeyNo += 4; break;</p><p> case 4: KeyNo += 8;
99、break;</p><p> case 8: KeyNo += 12;</p><p><b> }</b></p><p> return KeyNo;</p><p><b> } </b></p><p><b> 五 仿真調(diào)試</b>
100、</p><p> 5.1 使用Keil生成hex文件</p><p> 將上述代碼經(jīng)Keil生成hex文件以便Proteus仿真。Keil界面如下圖:</p><p> 圖 5-1 Keil的使用</p><p> 5.2 使用Proteus仿真過(guò)程</p><p> 使用Proteus繪制原理圖,然后將上
101、一步Keil生成的hex程序文件載入到單片機(jī)中,點(diǎn)擊運(yùn)行,過(guò)程大致如下:</p><p> 1.初始界面:LCD顯示“Your Password...”,提示輸入密碼,如下圖:</p><p> 圖 5-2 初始界面</p><p><b> 2.密碼輸入:</b></p><p> 輸入密碼,按確定鍵,如果正確
102、,顯示“Unlock OK!”并解鎖。</p><p> 圖 5-3 密碼正確</p><p> 圖 5-4 燈亮開(kāi)鎖</p><p> 輸入密碼,按確定鍵,如果錯(cuò)誤,則顯示“Error!”,不解鎖。</p><p> 圖 5-5 密碼錯(cuò)誤</p><p><b> 圖 5-6 鎖未開(kāi)</b&
103、gt;</p><p> 3.密碼修改及保存:</p><p> 在密碼輸入正確,鎖打開(kāi)的情況下,按“修改密碼”鍵,進(jìn)入密碼修改界面:</p><p> 圖 5-7 輸入新密碼</p><p> 輸入新密碼后,按“保存密碼”鍵,保存新密碼:</p><p> 圖 5-8 保存密碼</p><
104、;p><b> 六 總結(jié)與體會(huì)</b></p><p> 通過(guò)這次課程設(shè)計(jì),讓我復(fù)習(xí)了很多學(xué)過(guò)的舊知識(shí),同時(shí)鍛煉了自己的動(dòng)手能力和查閱資料。尤其是解決在實(shí)際中解決排查問(wèn)題的能力。</p><p> 通過(guò)這次的設(shè)計(jì),我熟悉了使用Proteus的技巧,熟悉并了解了一些電子元件。</p><p> 在設(shè)計(jì)中,我學(xué)到了如何使用C語(yǔ)言對(duì)單片
105、機(jī)進(jìn)行編寫(xiě)程序,熟悉了使用KEIL軟件,并且加深了對(duì)單片機(jī)的編程技巧。</p><p> 在做這個(gè)設(shè)計(jì)的過(guò)程中,我遇到了不少的問(wèn)題。這鍛煉了我篩選、查閱資料,并將理論結(jié)合到自己的設(shè)計(jì)中的能力。一步一步的排除故障原因,找到故障的原因并解決故障。</p><p> 這次的設(shè)計(jì)使我對(duì)模擬電子、數(shù)字電子知識(shí)加深了了解,尤其是在對(duì)電路進(jìn)行調(diào)試的時(shí)候,出現(xiàn)了很多這些方面的問(wèn)題,通過(guò)對(duì)以往知識(shí)的復(fù)習(xí)
106、鞏固,將問(wèn)題解決。</p><p> 這次的設(shè)計(jì)有很多的不足,和現(xiàn)實(shí)的產(chǎn)品有很大的的差距,例如沒(méi)有更好的加密方法,電動(dòng)鎖的部分在實(shí)物中使用一個(gè)LED代替等,還可以做得更好。</p><p> 最后,要感謝在這次課程設(shè)計(jì)過(guò)程中幫助我的老師同學(xué)們。</p><p> 七 參考文獻(xiàn)及PCB封裝圖</p><p><b> 7.1
107、參考文獻(xiàn)</b></p><p> [1] 侯玉寶 陳忠平等.基于Proteus的51系列單片機(jī)設(shè)計(jì)與仿真[M].電子工業(yè)出版社,2008年</p><p> [2] 劉坤.51單片機(jī)C語(yǔ)言應(yīng)用開(kāi)發(fā)技術(shù)大全[M].人民郵電出版社,2008年</p><p> [3] 王守忠.51單片機(jī)應(yīng)用開(kāi)發(fā)速查手冊(cè)[M].人民郵電出版社,2009年</p&
108、gt;<p> [4] 胡漢才.單片機(jī)原理及其接口技術(shù)[M].清華大學(xué)出版社,1996年</p><p> [5] 趙新民.智能儀器設(shè)計(jì)基礎(chǔ)[M].哈爾濱工業(yè)大學(xué)出版社,1999年</p><p> [6] 李鐘實(shí).實(shí)用電子報(bào)警器精選百例[M].北京:科技技術(shù)文獻(xiàn)出版社,2002年</p><p> [7] 候振鵬.嵌入式C語(yǔ)言程序設(shè)計(jì)[M].
109、人民郵電出版社,2006年</p><p> [8] 王東峰等.單片機(jī)C語(yǔ)言應(yīng)用100例[M].電子工業(yè)出版社,2009年</p><p> [9]陳海宴.51單片機(jī)原理及應(yīng)用[M].北京航空航天大學(xué)出版社,2010</p><p> [10] Brian W. Kernighan.The C Programming Language. Prentice
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 基于單片機(jī)的電子密碼鎖設(shè)計(jì) 單片機(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ī)控制的電子密碼鎖
- 單片機(jī)課程設(shè)計(jì)--基于單片機(jī)控制的電子密碼鎖
- 單片機(jī)課程設(shè)計(jì)--基于單片機(jī)控制的電子密碼鎖
- 單片機(jī)課程設(shè)計(jì)報(bào)告--電子密碼鎖
- 單片機(jī)課程設(shè)計(jì)--電子密碼鎖報(bào)告
- 單片機(jī)課程設(shè)計(jì)---電子密碼鎖報(bào)告
- 單片機(jī)課程設(shè)計(jì)----電子密碼鎖報(bào)告
- 單片機(jī)課程設(shè)計(jì)--電子密碼鎖
- 單片機(jī)課程設(shè)計(jì)--電子密碼鎖
- 單片機(jī)課程設(shè)計(jì)電子密碼鎖
- 單片機(jī)課程設(shè)計(jì)---基于單片機(jī)的數(shù)字密碼鎖設(shè)計(jì)
- 單片機(jī)-密碼鎖課程設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)--基于單片機(jī)8051的密碼鎖控制
- 單片機(jī)課程設(shè)計(jì)-密碼鎖
- 單片機(jī)課程設(shè)計(jì)--密碼鎖
- 單片機(jī)課程設(shè)計(jì)-密碼鎖
評(píng)論
0/150
提交評(píng)論