單片機(jī)課程設(shè)計報告基于AT89C52單片機(jī)的電子密碼鎖設(shè)計_第1頁
單片機(jī)課程設(shè)計報告基于AT89C52單片機(jī)的電子密碼鎖設(shè)計_第2頁
單片機(jī)課程設(shè)計報告基于AT89C52單片機(jī)的電子密碼鎖設(shè)計_第3頁
單片機(jī)課程設(shè)計報告基于AT89C52單片機(jī)的電子密碼鎖設(shè)計_第4頁
單片機(jī)課程設(shè)計報告基于AT89C52單片機(jī)的電子密碼鎖設(shè)計_第5頁
已閱讀5頁,還剩13頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、沈陽理工大學(xué)課程設(shè)計專用紙 .18摘 要隨著社會的發(fā)展進(jìn)步,密碼鎖逐漸成為我們生活中很重要的一部分,密碼鎖是安全的一個很好的保障措施。本論文設(shè)計一個基于單片機(jī)和存儲器的,能夠進(jìn)行開鎖,上鎖,修改密碼的電子密碼鎖。電子密碼鎖是現(xiàn)代電子科技與安全結(jié)合的產(chǎn)物。它在現(xiàn)代鎖業(yè)扮演著重要的角色,本文的主要內(nèi)容是用at89c52單片機(jī)為核心控制元件,用存儲器24c04進(jìn)行存儲密碼鎖的密碼,當(dāng)用戶輸入的密碼與存儲器儲存的密碼相同時,即可開鎖成功,并也可以修改密碼,若不相同,則不能開鎖,并提示密碼錯誤。關(guān)鍵詞:at89c52單片機(jī) 密碼鎖 lcd 矩陣鍵盤 目錄摘 要1目錄21.引 言32. 總體設(shè)計42.1基

2、本原理42.2系統(tǒng)總體框圖及設(shè)計思路43.詳細(xì)設(shè)計53.1 硬件設(shè)計53.2軟件設(shè)計.83.2.1程序設(shè)計思路83.2.2 程序流程圖83.2.3 程序代碼94. 系統(tǒng)調(diào)試及分析155.心得體會17參考文獻(xiàn)181.引 言單片機(jī)又稱單片微控制器,它不是完成某一個邏輯功能的芯片,而是把一個計算機(jī)系統(tǒng)集成到一個芯片上。相當(dāng)于一個微型的計算機(jī),和計算機(jī)相比,單片機(jī)只缺少了i/o設(shè)備。概括的講:一塊芯片就成了一臺計算機(jī)。它的體積小、質(zhì)量輕、價格便宜、為學(xué)習(xí)、應(yīng)用和開發(fā)提供了便利條件。同時,學(xué)習(xí)使用單片機(jī)是了解計算機(jī)原理與結(jié)構(gòu)的最佳選擇。 密碼鎖是一種通過密碼輸入來控制電路或是芯片工作,從而控制機(jī)械開關(guān)的

3、閉合,完成開鎖、閉鎖任務(wù)的電子產(chǎn)品。它的種類很多,有簡易的電路產(chǎn)品,也有基于芯片的性價比較高的產(chǎn)品?,F(xiàn)在應(yīng)用較廣的數(shù)字密碼鎖是以芯片為核心,通過編程來實現(xiàn)的。其性能和安全性已大大超過了機(jī)械鎖。其特點是保密性好,隨機(jī)開鎖成功率幾乎為零。密碼可變,用戶可以隨時更改密碼,防止密碼被盜,同時也可以避免因人員的更替而使鎖的密級下降。無活動零件,不會磨損,壽命長。使用靈活性好,不像機(jī)械鎖必須佩帶鑰匙才能開鎖。數(shù)字密碼鎖操作簡單易行,一學(xué)就會。2. 總體設(shè)計2.1基本原理電子密碼鎖是才用存儲芯片24c04進(jìn)行存放密碼,單片機(jī)可以對24c04進(jìn)行讀取密碼和寫入密碼,本密碼鎖是事先吧初始密碼123456寫入24

4、c04中,用戶輸入密碼后,通過對用戶輸入的密碼和24c04中的密碼進(jìn)行比較,若比較相同則提示開鎖稱成功,開鎖后,用戶可以修改密碼,即把用戶輸入的新密碼寫入到24c04當(dāng)中,并清除之前的密碼,按下保存鍵后,繼成功修改密碼。其中24c04的原理如下:at24c04是美國atmel公司的低功耗cmos型e2prom,內(nèi)含2568位存儲空間,具有工作電壓寬(2.55.5 v)、擦寫次數(shù)多(大于10000次)、寫入速度快(小于10 ms)、抗干擾能力強(qiáng)、數(shù)據(jù)不易丟失、體積小等特點。而且他是采用了i2c總線式進(jìn)行數(shù)據(jù)讀寫的串行器件,占用很少的資源和io線,并且支持在線編程,進(jìn)行數(shù)據(jù)實時的存取十分方便。at

5、24c04中帶有的片內(nèi)地址寄存器。每寫入或讀出一個數(shù)據(jù)字節(jié)后,該地址寄存器自動加1,以實現(xiàn)對下一個存儲單元的讀寫。所有字節(jié)均以單一操作方式讀取。為降低總的寫入時間,一次操作可寫入多達(dá)8個字節(jié)的數(shù)據(jù)。i2c總線是一種用于ic器件之間連接的二線制總線。他通過sda(串行數(shù)據(jù)線)及scl(串行時鐘線)兩根線在連到總線上的器件之間傳送信息,并根據(jù)地址識別每個器件。 at24c02正是運(yùn)用了i2c規(guī)程,使用主從機(jī)雙向通信,主機(jī)(通常為單片機(jī))和從機(jī)(at24c04)均可工作于接收器和發(fā)送器狀態(tài)。主機(jī)產(chǎn)生串行時鐘信號(通過scl引腳)并發(fā)出控制字,控制總線的傳送方向,并產(chǎn)生開始和停止的條件。無論是主機(jī)還是

6、從機(jī),接收到一個字節(jié)后必須發(fā)出一個確認(rèn)信號ack。at24c04的控制字由8位二進(jìn)制數(shù)構(gòu)成,在開始信號發(fā)出以后,主機(jī)便會發(fā)出控制字,以選擇從機(jī)并控制總線傳送的方向。2.2系統(tǒng)總體框圖及設(shè)計思路電子密碼鎖24c04存儲密碼矩陣鍵盤進(jìn)行輸入lcd顯示提示信息 總體設(shè)計思路:本設(shè)計利用單片機(jī)靈活的編程設(shè)計和豐富的io端口,及其控制的準(zhǔn)確性,不但能實現(xiàn)基本的密碼鎖功能,還能添加掉電存儲。其中,0-9為用戶可以輸入密碼可選擇的數(shù)字,10號功能為開鎖鍵,11號功能為上鎖,12號功能為輸入修改后的密碼,13號功能為保存密碼,14號功能為重新輸入。利用lcd來顯示提示信息,用led來提示密碼鎖的狀態(tài)。3.詳細(xì)

7、設(shè)計3.1 硬件設(shè)計1芯片及原理介紹(一) at89c52at89c52與mcs-51單片機(jī)產(chǎn)品兼容 、8k字節(jié)在系統(tǒng)可編程flash存儲器、 1000次擦寫周期、 全靜態(tài)操作:0hz33mhz 、 三級加密程序存儲器 、 32個可編程i/o口線 、三個16位定時器/計數(shù)器 八個中斷源 、全雙工uart串行通道、 低功耗空閑和掉電模式 、掉電后中斷可喚醒 、看門狗定時器 、雙數(shù)據(jù)指針 、掉電標(biāo)識符 。 p1口引腳特殊功能p1.0t2(定時器t2外部輸入)p3口引腳p3.0rxd(串行輸入口)p3.1txd(串行輸出口)p3.2(外部中斷0)p3.3(外部中斷1)p3.4t0(定時器0外部輸入)

8、p3.5t1(定時器1外部輸入)p3.6wr(外部數(shù)據(jù)存儲器寫選通)p3.7rd(外部數(shù)據(jù)存儲器讀先通)at89c52的一些特殊功能口,如下表所示:(二) 矩陣鍵盤使用矩陣鍵盤,所以本設(shè)計就采用行列式鍵盤,同時也能減少鍵盤與單片機(jī)接口時所占用的i/o線的數(shù)目,在按鍵比較多的時候,通常采用這樣方法。其原理如圖。本設(shè)計中矩陣鍵盤接在單片機(jī)的p1口。每一條水平(行線)與垂直線(列線)的交叉處不相通,而是通過一個按鍵來連通,利用這種行列式矩陣結(jié)構(gòu)只需要n條行線和m條列線,即可組成具有nm個按鍵的鍵盤。在這種行列式矩陣鍵盤非鍵盤編碼的單片機(jī)系統(tǒng)中,鍵盤處理程序首先執(zhí)行等待按鍵并確認(rèn)有無按鍵按下的程序段。

9、當(dāng)確認(rèn)有按鍵按下后,下一步就要識別哪一個按鍵按下。對鍵的識別通常有兩種方法:一種是常用的逐行掃描查詢法;另一種是速度較快的線反轉(zhuǎn)法。(三) lcd1602本系統(tǒng)設(shè)計的顯示電路是為了給使用者以提示而設(shè)置的。本系統(tǒng)的顯示采用了lcd1602作為顯示模塊,其能夠同時顯示16x02即32個字符。lcd在系統(tǒng)中,其d0-d7引腳分別接單片機(jī)的p0口、vss和vdd分別接電源和地線、vee為液晶亮度調(diào)節(jié)按鈕(可接電位器)、rs為數(shù)據(jù)或命令的選擇端接p2.0、rw為讀寫的選擇端接p2.1、e為使能信號接p2.2。如圖所示。(四) 24c04本設(shè)計中為了在系統(tǒng)掉電時能夠保存系統(tǒng)的設(shè)置密碼,使用了具有i2c總線

10、接口的e2prom的24c04芯片來保存密碼鎖的密碼。scl串行時鐘 at24c02串行時鐘輸入管腳用于產(chǎn)生器件所有數(shù)據(jù)發(fā)送或接收的時鐘,這是一個輸入管腳。 sda串行數(shù)據(jù)/地址 at24c02 雙向串行數(shù)據(jù)/地址管腳用于器件所有數(shù)據(jù)的發(fā)送或接收,sda 是一個開漏輸出管腳,可與其它開漏輸出或集電極開路輸出進(jìn)行線或(wire-or)。 a0、a1、a2器件地址輸入端 這些輸入腳用于多個器件級聯(lián)時設(shè)置器件地址,當(dāng)這些腳懸空時默認(rèn)值為0。當(dāng)使用at24c02 時最大可級聯(lián)8個器件。如果只有一個at24c02被總線尋址,這三個地址輸入腳(a0、a1、a2 )可懸空或連接到vss,如果只有一個at24

11、c02被總線尋址這三個地址輸入腳(a0、a1、a2 )必須連接到vss。 wp寫保護(hù) 如果wp管腳連接到vcc,所有的內(nèi)容都被寫保護(hù)只能讀。當(dāng)wp管腳連接到vss 或懸空允許器件進(jìn)行正常的讀/寫操作2.硬件原理圖p1口通過連接1個矩陣鍵盤,作為密碼輸入和功能選擇按鍵;p0口接lcd1602的8位數(shù)據(jù)通信線;p2.0,p2.1,p2.2接lcd控制端;p3.2和p3.3接24c04。 3.2 軟件設(shè)計. 3.2.1程序設(shè)計思路電子密碼鎖工作的主要過程是lcd提示開始選擇操作功能(選擇開鎖還是更改密碼),通過10號鍵盤開鎖,13號14號進(jìn)行密碼的修改與保存。當(dāng)用戶選擇開鎖時,通過鍵盤輸入開鎖密碼。

12、如果密碼輸入正確,則lcd提示密碼正確、led燈亮表示開鎖。如果密碼輸入錯誤則lcd提示密碼錯誤。當(dāng)用戶選擇更改密碼功能時,要求用戶先輸入當(dāng)前密碼。當(dāng)密碼正確時lcd提示用戶進(jìn)一步操作。單片機(jī)向24c04寫入新密碼,否則提示錯誤并返回初狀態(tài)。3.2.1程序流程圖開始功能鍵盤掃描檢測子程序輸入開鎖還是改密碼?提示輸入開鎖密碼lcd用*動態(tài)提示已輸入數(shù)字提示輸入舊密碼將已輸入的數(shù)字暫存與單片機(jī)ram判斷舊密碼是否正確?n提示密碼錯誤調(diào)用存于24c04的密碼與其比較?y清單片機(jī)ram密碼暫存區(qū)提示輸入新密碼yn判斷輸入的密碼是正確?第一個led亮n提示出錯y將新密碼寫入at24c02 結(jié)束提示密碼修

13、改成功3.2.3 程序代碼1、預(yù)定義部分#include#include#include#include #include #include #define uchar unsigned char#define uint unsigned int/上次按鍵和當(dāng)前按鍵序號,該矩陣中序號范圍015,16表示無按鍵uchar pre_keyno=16,keyno=16;uchar code title_text=your password.;/標(biāo)題字符串uchar dsy_buffer16= ;/顯示緩沖uchar userpassword7= ;/用戶輸入的密碼uchar iic_password

14、7;uchar is_valid_user = 0;uchar i = 0;void beep();uchar clear_password();sbit led_open = p20;/開鎖燈亮sbit beep = p37;/蜂鳴器2、功能控制void key_main() p1 = 0xf0; if(p1 != 0xf0) keyno = keys_scan(); /掃描鍵盤獲取鍵序號keyno if(pre_keyno != keyno) if(i=6) switch ( keyno ) case 0: case 1: case 2: case 3: case 4: case 5: c

15、ase 6: case 7: case 8: case 9: if (i = 0) display_string( ,0x40); userpasswordi = keyno + 0; userpasswordi+1 = ;/dsy_bufferi = userpasswordi; dsy_bufferi = *; dsy_bufferi+1 = ; display_string(dsy_buffer,0x40); i+;break; case 10: /按a鍵開鎖 if (strcmp(userpassword,iic_password) = 0) led_open = 0; /點亮led

16、clear_password(); display_string(unlock ok! ,0x40); is_valid_user = 1; else led_open =1; /關(guān)閉led clear_password(); display_string(error ! ,0x40); is_valid_user = 0; i = 0; break; case 11: /按b鍵上鎖 led_open =1; clear_password(); display_string(title_text,0x00); display_string( ,0x40); i = 0; is_valid_us

17、er = 0; break; case 12: /按c鍵設(shè)置新密碼 /如果是合法用戶則提示輸入新密碼 if ( !is_valid_user ) display_string(no rights !,0x40); else i = 0; display_string(new password: ,0x00); display_string( ,0x40); break; case 13: /按d鍵保存新密碼 if ( !is_valid_user ) display_string(no rights !,0x40); else sendstring(0xa0, 0 , userpassword

18、, 6); /重新讀入剛寫的密碼 recstring(0xa0, 0 , iic_password, 6); iic_password6 = ; i = 0; display_string(title_text,0x00); display_string(password saved! ,0x40); break; case 14: /按e鍵消除所有輸入 i = 0; clear_password(); display_string( ,0x40); beep(); pre_keyno = keyno;/delay(100);/ beep(); delay(100); p1= 0xf0; wh

19、ile (p1 != 0xf0); /如果有鍵未釋放則等待 while (p1 = 0xf0); /如果沒有再次按下按鍵則等待 3、24c04讀寫程序 /-從芯片讀取1字節(jié)uchar recbyte() uchar i,rd; rd=0x00; sda=1; for(i=0;i8;i+) scl=1;rd=1;rd|=sda;delay4us();scl=0;delay4us(); scl=0; delay4us(); return rd;/-向芯片發(fā)送一個字節(jié)uchar sendbyte(uchar wd) uchar i; bit ack0; for(i=0;i8;i+) sda=(bit

20、)(wd&0x80); _nop_();_nop_(); scl=1;delay4us(); scl=0; wd=1; delay4us(); sda=1; scl=1; delay4us(); ack0=!sda; scl=0; delay4us(); return ack0;/發(fā)送多字節(jié)數(shù)據(jù)函數(shù) uchar sendstring(uchar slave,uchar subaddr,uchar *buffer,uchar n)uchar i;start();if(!sendbyte(slave) return 0;if(!sendbyte(subaddr) return 0;for(i=0;

21、in-1;i+)if(!sendbyte(bufferi) return 0; stop(); return 1;/-接收多字節(jié)數(shù)據(jù)函數(shù)uchar recstring(uchar slave,uchar subaddr,uchar *buffer,uchar n)uchar i;start();if(!sendbyte(slave) return 0;if(!sendbyte(subaddr) return 0;start();if(!sendbyte(slave+1) return 0;for(i=0;in-1;i+) bufferi=recbyte(); ack(); buffern-1=

22、 recbyte(); no_ack(); stop(); return 1;4、lcd1602顯示部分/測試lcd忙狀態(tài) 返回resultbit lcd_bz()bit result;rs = 0;rw = 1;eq = 1;_nop_();_nop_();_nop_();_nop_();result = (bit)(p0&0x80);eq = 0;return result; /寫指令數(shù)據(jù)到lcdvoid lcd_wcmd(uchar cmd)rs = 0;rw = 0;eq = 0;p0 = cmd;eq = 1;delay_lcd(1);eq = 0;/寫入顯示數(shù)據(jù)到lcdvoid l

23、cd_wdat(uchar dat)while(lcd_bz();rs = 1;rw = 0; p0 = dat;delay_lcd(1);eq = 1;eq = 0;/lcd初始化void lcd_init()lcd_wcmd(0x38);/顯示模式設(shè)置,5*7點陣,8位數(shù)據(jù)接口while(lcd_bz();lcd_wcmd(0x0c);/顯示開及光標(biāo)設(shè)置不顯示lcd_wcmd(0x06);/顯示光標(biāo)移動設(shè)置lcd_wcmd(0x01);/顯示清屏void display_string(uchar *str,uchar lineno)/在液晶指定行顯示字符串uchar i;lcd_wcmd(0x80 + lineno);for(i=0; i4)0x0f;switch(temp)case 1: k+=0;break;case 2: k+=4;break;case 4: k+=8;break;case 8: k+=12;break;default:break ;/keyno=k;return k;6、主函數(shù)void main

溫馨提示

  • 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. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論